github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/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 "github.com/juju/names" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 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 t state.BlockType 20 m string 21 } 22 23 func (m mockBlock) Id() string { return "" } 24 25 func (m mockBlock) Tag() (names.Tag, error) { return names.NewEnvironTag("mocktesting"), nil } 26 27 func (m mockBlock) Type() state.BlockType { return m.t } 28 29 func (m mockBlock) Message() string { return m.m } 30 31 type blockCheckerSuite struct { 32 testing.FakeJujuHomeSuite 33 aBlock state.Block 34 destroy, remove, change state.Block 35 36 blockchecker *common.BlockChecker 37 } 38 39 var _ = gc.Suite(&blockCheckerSuite{}) 40 41 func (s *blockCheckerSuite) SetUpTest(c *gc.C) { 42 s.FakeJujuHomeSuite.SetUpTest(c) 43 s.destroy = mockBlock{t: state.DestroyBlock, m: "Mock BLOCK testing: DESTROY"} 44 s.remove = mockBlock{t: state.RemoveBlock, m: "Mock BLOCK testing: REMOVE"} 45 s.change = mockBlock{t: state.ChangeBlock, m: "Mock BLOCK testing: CHANGE"} 46 s.blockchecker = common.NewBlockChecker(s) 47 } 48 49 func (mock *blockCheckerSuite) GetBlockForType(t state.BlockType) (state.Block, bool, error) { 50 if mock.aBlock.Type() == t { 51 return mock.aBlock, true, nil 52 } else { 53 return nil, false, nil 54 } 55 } 56 57 func (s *blockCheckerSuite) TestDestroyBlockChecker(c *gc.C) { 58 s.aBlock = s.destroy 59 s.assertErrorBlocked(c, true, s.blockchecker.DestroyAllowed(), s.destroy.Message()) 60 61 s.aBlock = s.remove 62 s.assertErrorBlocked(c, true, s.blockchecker.DestroyAllowed(), s.remove.Message()) 63 64 s.aBlock = s.change 65 s.assertErrorBlocked(c, true, s.blockchecker.DestroyAllowed(), s.change.Message()) 66 } 67 68 func (s *blockCheckerSuite) TestRemoveBlockChecker(c *gc.C) { 69 s.aBlock = s.destroy 70 s.assertErrorBlocked(c, false, s.blockchecker.RemoveAllowed(), s.destroy.Message()) 71 72 s.aBlock = s.remove 73 s.assertErrorBlocked(c, true, s.blockchecker.RemoveAllowed(), s.remove.Message()) 74 75 s.aBlock = s.change 76 s.assertErrorBlocked(c, true, s.blockchecker.RemoveAllowed(), s.change.Message()) 77 } 78 79 func (s *blockCheckerSuite) TestChangeBlockChecker(c *gc.C) { 80 s.aBlock = s.destroy 81 s.assertErrorBlocked(c, false, s.blockchecker.ChangeAllowed(), s.destroy.Message()) 82 83 s.aBlock = s.remove 84 s.assertErrorBlocked(c, false, s.blockchecker.ChangeAllowed(), s.remove.Message()) 85 86 s.aBlock = s.change 87 s.assertErrorBlocked(c, true, s.blockchecker.ChangeAllowed(), s.change.Message()) 88 } 89 90 func (s *blockCheckerSuite) assertErrorBlocked(c *gc.C, blocked bool, err error, msg string) { 91 if blocked { 92 c.Assert(params.IsCodeOperationBlocked(err), jc.IsTrue) 93 c.Assert(err, gc.ErrorMatches, msg) 94 } else { 95 c.Assert(errors.Cause(err), jc.ErrorIsNil) 96 } 97 }