ducky/devices

Paddy 2015-11-14 Parent:b6494e1a499e Child:c24a6c5fcd8c

5:408abf6e48d3 Go to Latest

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.

History
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 }