ducky/devices
ducky/devices/context.go
Add more interface tests. Add a test to ensure that, when retrieving Devices, no error is returned if a Device cannot be found. Add a test to ensure that, when adding Devices, adding a Device that shares an ID with a Device already in the Storer returns an ErrDeviceAlreadyExists error. This involved creating the ErrDeviceAlreadyExists error, and modifying the in-memory implementation to properly return it. Fix a go vet issue in our previous test, wherein we forgot to pass the storer to a log message, resulting in a mismatch between the number of variables expected and the number of variables provided. Rename our tests to be better reflective of what they actually test.
| paddy@0 | 1 package devices |
| paddy@0 | 2 |
| paddy@0 | 3 import ( |
| paddy@0 | 4 "errors" |
| paddy@0 | 5 |
| paddy@0 | 6 "golang.org/x/net/context" |
| paddy@0 | 7 ) |
| paddy@0 | 8 |
| paddy@0 | 9 const ( |
| paddy@0 | 10 storerKey = "code.secondbit.org/ducky/devices.hg#Storer" |
| paddy@0 | 11 ) |
| paddy@0 | 12 |
| paddy@0 | 13 var ( |
| paddy@0 | 14 // ErrNoStorerSet is returned when the Context has no Storer set in it. |
| paddy@0 | 15 ErrNoStorerSet = errors.New("storerKey not set in Context") |
| paddy@0 | 16 // ErrStorerKeyNotStorer is returned when there's a value in the Context for storerKey, but it's not a Storer. |
| paddy@0 | 17 ErrStorerKeyNotStorer = errors.New("the value for storerKey does not fulfill the Storer interface") |
| paddy@0 | 18 ) |
| paddy@0 | 19 |
| paddy@0 | 20 func getStorer(c context.Context) (Storer, error) { |
| paddy@0 | 21 val := c.Value(storerKey) |
| paddy@0 | 22 if val == nil { |
| paddy@0 | 23 return nil, ErrNoStorerSet |
| paddy@0 | 24 } |
| paddy@0 | 25 storer, ok := val.(Storer) |
| paddy@0 | 26 if !ok { |
| paddy@0 | 27 return nil, ErrStorerKeyNotStorer |
| paddy@0 | 28 } |
| paddy@0 | 29 return storer, nil |
| paddy@0 | 30 } |