launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/state/apiserver/common/ensuredead_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/state" 11 "launchpad.net/juju-core/state/api/params" 12 "launchpad.net/juju-core/state/apiserver/common" 13 apiservertesting "launchpad.net/juju-core/state/apiserver/testing" 14 ) 15 16 type deadEnsurerSuite struct{} 17 18 var _ = gc.Suite(&deadEnsurerSuite{}) 19 20 type fakeDeadEnsurer struct { 21 state.Entity 22 life state.Life 23 err error 24 fetchError 25 } 26 27 func (e *fakeDeadEnsurer) EnsureDead() error { 28 return e.err 29 } 30 31 func (e *fakeDeadEnsurer) Life() state.Life { 32 return e.life 33 } 34 35 func (*deadEnsurerSuite) TestEnsureDead(c *gc.C) { 36 st := &fakeState{ 37 entities: map[string]entityWithError{ 38 "x0": &fakeDeadEnsurer{life: state.Dying, err: errors.Newf("x0 fails")}, 39 "x1": &fakeDeadEnsurer{life: state.Alive}, 40 "x2": &fakeDeadEnsurer{life: state.Dying}, 41 "x3": &fakeDeadEnsurer{life: state.Dead}, 42 "x4": &fakeDeadEnsurer{fetchError: "x4 error"}, 43 }, 44 } 45 getCanModify := func() (common.AuthFunc, error) { 46 return func(tag string) bool { 47 switch tag { 48 case "x0", "x1", "x2", "x4": 49 return true 50 } 51 return false 52 }, nil 53 } 54 d := common.NewDeadEnsurer(st, getCanModify) 55 entities := params.Entities{[]params.Entity{ 56 {"x0"}, {"x1"}, {"x2"}, {"x3"}, {"x4"}, {"x5"}, 57 }} 58 result, err := d.EnsureDead(entities) 59 c.Assert(err, gc.IsNil) 60 c.Assert(result, gc.DeepEquals, params.ErrorResults{ 61 Results: []params.ErrorResult{ 62 {¶ms.Error{Message: "x0 fails"}}, 63 {nil}, 64 {nil}, 65 {apiservertesting.ErrUnauthorized}, 66 {¶ms.Error{Message: "x4 error"}}, 67 {apiservertesting.ErrUnauthorized}, 68 }, 69 }) 70 } 71 72 func (*deadEnsurerSuite) TestEnsureDeadError(c *gc.C) { 73 getCanModify := func() (common.AuthFunc, error) { 74 return nil, errors.Newf("pow") 75 } 76 d := common.NewDeadEnsurer(&fakeState{}, getCanModify) 77 _, err := d.EnsureDead(params.Entities{[]params.Entity{{"x0"}}}) 78 c.Assert(err, gc.ErrorMatches, "pow") 79 } 80 81 func (*removeSuite) TestEnsureDeadNoArgsNoError(c *gc.C) { 82 getCanModify := func() (common.AuthFunc, error) { 83 return nil, errors.Newf("pow") 84 } 85 d := common.NewDeadEnsurer(&fakeState{}, getCanModify) 86 result, err := d.EnsureDead(params.Entities{}) 87 c.Assert(err, gc.IsNil) 88 c.Assert(result.Results, gc.HasLen, 0) 89 }