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