launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/state/apiserver/common/instanceidgetter_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "launchpad.net/errgo/errors" 8 gc "launchpad.net/gocheck" 9 10 "launchpad.net/juju-core/instance" 11 "launchpad.net/juju-core/state" 12 "launchpad.net/juju-core/state/api/params" 13 "launchpad.net/juju-core/state/apiserver/common" 14 apiservertesting "launchpad.net/juju-core/state/apiserver/testing" 15 jc "launchpad.net/juju-core/testing/checkers" 16 ) 17 18 type instanceIdGetterSuite struct{} 19 20 var _ = gc.Suite(&instanceIdGetterSuite{}) 21 22 type fakeInstanceIdGetter struct { 23 state.Entity 24 instanceId string 25 err string 26 fetchError 27 } 28 29 func (f *fakeInstanceIdGetter) InstanceId() (instance.Id, error) { 30 if f.err != "" { 31 return "", errors.New(f.err) 32 } 33 return instance.Id(f.instanceId), nil 34 } 35 36 func (*instanceIdGetterSuite) TestInstanceId(c *gc.C) { 37 st := &fakeState{ 38 entities: map[string]entityWithError{ 39 "x0": &fakeInstanceIdGetter{instanceId: "foo"}, 40 "x1": &fakeInstanceIdGetter{instanceId: "bar"}, 41 "x2": &fakeInstanceIdGetter{instanceId: "baz", err: "x2 error"}, 42 "x3": &fakeInstanceIdGetter{fetchError: "x3 error"}, 43 }, 44 } 45 getCanRead := func() (common.AuthFunc, error) { 46 return func(tag string) bool { 47 switch tag { 48 case "x0", "x2", "x3": 49 return true 50 } 51 return false 52 }, nil 53 } 54 ig := common.NewInstanceIdGetter(st, getCanRead) 55 entities := params.Entities{[]params.Entity{ 56 {"x0"}, {"x1"}, {"x2"}, {"x3"}, {"x4"}, 57 }} 58 results, err := ig.InstanceId(entities) 59 c.Assert(err, gc.IsNil) 60 c.Assert(results, jc.DeepEquals, params.StringResults{ 61 Results: []params.StringResult{ 62 {Result: "foo"}, 63 {Error: apiservertesting.ErrUnauthorized}, 64 {Error: ¶ms.Error{Message: "x2 error"}}, 65 {Error: ¶ms.Error{Message: "x3 error"}}, 66 {Error: apiservertesting.ErrUnauthorized}, 67 }, 68 }) 69 } 70 71 func (*instanceIdGetterSuite) TestInstanceIdError(c *gc.C) { 72 getCanRead := func() (common.AuthFunc, error) { 73 return nil, errors.Newf("pow") 74 } 75 ig := common.NewInstanceIdGetter(&fakeState{}, getCanRead) 76 _, err := ig.InstanceId(params.Entities{[]params.Entity{{"x0"}}}) 77 c.Assert(err, gc.ErrorMatches, "pow") 78 }