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