github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/common/block_test.go (about) 1 // Copyright 2012-2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 "gopkg.in/juju/names.v2" 11 12 "github.com/juju/juju/apiserver/common" 13 "github.com/juju/juju/apiserver/params" 14 "github.com/juju/juju/state" 15 "github.com/juju/juju/testing" 16 ) 17 18 type mockBlock struct { 19 state.Block 20 t state.BlockType 21 m string 22 } 23 24 func (m mockBlock) Id() string { return "" } 25 26 func (m mockBlock) Tag() (names.Tag, error) { return names.NewModelTag("mocktesting"), nil } 27 28 func (m mockBlock) Type() state.BlockType { return m.t } 29 30 func (m mockBlock) Message() string { return m.m } 31 32 func (m mockBlock) ModelUUID() string { return "" } 33 34 type blockCheckerSuite struct { 35 testing.FakeJujuXDGDataHomeSuite 36 aBlock state.Block 37 destroy, remove, change state.Block 38 39 blockchecker *common.BlockChecker 40 } 41 42 var _ = gc.Suite(&blockCheckerSuite{}) 43 44 func (s *blockCheckerSuite) SetUpTest(c *gc.C) { 45 s.FakeJujuXDGDataHomeSuite.SetUpTest(c) 46 s.destroy = mockBlock{t: state.DestroyBlock, m: "Mock BLOCK testing: DESTROY"} 47 s.remove = mockBlock{t: state.RemoveBlock, m: "Mock BLOCK testing: REMOVE"} 48 s.change = mockBlock{t: state.ChangeBlock, m: "Mock BLOCK testing: CHANGE"} 49 s.blockchecker = common.NewBlockChecker(s) 50 } 51 52 func (mock *blockCheckerSuite) GetBlockForType(t state.BlockType) (state.Block, bool, error) { 53 if mock.aBlock.Type() == t { 54 return mock.aBlock, true, nil 55 } else { 56 return nil, false, nil 57 } 58 } 59 60 func (s *blockCheckerSuite) TestDestroyBlockChecker(c *gc.C) { 61 s.aBlock = s.destroy 62 s.assertErrorBlocked(c, true, s.blockchecker.DestroyAllowed(), s.destroy.Message()) 63 64 s.aBlock = s.remove 65 s.assertErrorBlocked(c, true, s.blockchecker.DestroyAllowed(), s.remove.Message()) 66 67 s.aBlock = s.change 68 s.assertErrorBlocked(c, true, s.blockchecker.DestroyAllowed(), s.change.Message()) 69 } 70 71 func (s *blockCheckerSuite) TestRemoveBlockChecker(c *gc.C) { 72 s.aBlock = s.destroy 73 s.assertErrorBlocked(c, false, s.blockchecker.RemoveAllowed(), s.destroy.Message()) 74 75 s.aBlock = s.remove 76 s.assertErrorBlocked(c, true, s.blockchecker.RemoveAllowed(), s.remove.Message()) 77 78 s.aBlock = s.change 79 s.assertErrorBlocked(c, true, s.blockchecker.RemoveAllowed(), s.change.Message()) 80 } 81 82 func (s *blockCheckerSuite) TestChangeBlockChecker(c *gc.C) { 83 s.aBlock = s.destroy 84 s.assertErrorBlocked(c, false, s.blockchecker.ChangeAllowed(), s.destroy.Message()) 85 86 s.aBlock = s.remove 87 s.assertErrorBlocked(c, false, s.blockchecker.ChangeAllowed(), s.remove.Message()) 88 89 s.aBlock = s.change 90 s.assertErrorBlocked(c, true, s.blockchecker.ChangeAllowed(), s.change.Message()) 91 } 92 93 func (s *blockCheckerSuite) assertErrorBlocked(c *gc.C, blocked bool, err error, msg string) { 94 if blocked { 95 c.Assert(params.IsCodeOperationBlocked(err), jc.IsTrue) 96 c.Assert(err, gc.ErrorMatches, msg) 97 } else { 98 c.Assert(errors.Cause(err), jc.ErrorIsNil) 99 } 100 }