github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/cmd/juju/block/block_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package block_test 5 6 import ( 7 "strings" 8 9 "github.com/juju/cmd" 10 "github.com/juju/errors" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/apiserver/common" 15 "github.com/juju/juju/cmd/envcmd" 16 "github.com/juju/juju/cmd/juju/block" 17 "github.com/juju/juju/testing" 18 ) 19 20 type BlockCommandSuite struct { 21 ProtectionCommandSuite 22 mockClient *block.MockBlockClient 23 } 24 25 func (s *BlockCommandSuite) SetUpTest(c *gc.C) { 26 s.FakeJujuHomeSuite.SetUpTest(c) 27 s.mockClient = &block.MockBlockClient{} 28 s.PatchValue(block.BlockClient, func(p *block.BaseBlockCommand) (block.BlockClientAPI, error) { 29 return s.mockClient, nil 30 }) 31 } 32 33 var _ = gc.Suite(&BlockCommandSuite{}) 34 35 func (s *BlockCommandSuite) assertBlock(c *gc.C, operation, message string) { 36 expectedOp := block.TypeFromOperation(operation) 37 c.Assert(s.mockClient.BlockType, gc.DeepEquals, expectedOp) 38 c.Assert(s.mockClient.Msg, gc.DeepEquals, message) 39 } 40 41 func (s *BlockCommandSuite) TestBlockCmdMoreArgs(c *gc.C) { 42 _, err := testing.RunCommand(c, envcmd.Wrap(&block.DestroyCommand{}), "change", "too much") 43 c.Assert( 44 err, 45 gc.ErrorMatches, 46 `.*can only specify block message.*`) 47 } 48 49 func (s *BlockCommandSuite) TestBlockCmdNoMessage(c *gc.C) { 50 command := block.DestroyCommand{} 51 _, err := testing.RunCommand(c, envcmd.Wrap(&command)) 52 c.Assert(err, jc.ErrorIsNil) 53 s.assertBlock(c, command.Info().Name, "") 54 } 55 56 func (s *BlockCommandSuite) TestBlockDestroyOperations(c *gc.C) { 57 command := block.DestroyCommand{} 58 _, err := testing.RunCommand(c, envcmd.Wrap(&command), "TestBlockDestroyOperations") 59 c.Assert(err, jc.ErrorIsNil) 60 s.assertBlock(c, command.Info().Name, "TestBlockDestroyOperations") 61 } 62 63 func (s *BlockCommandSuite) TestBlockRemoveOperations(c *gc.C) { 64 command := block.RemoveCommand{} 65 _, err := testing.RunCommand(c, envcmd.Wrap(&command), "TestBlockRemoveOperations") 66 c.Assert(err, jc.ErrorIsNil) 67 s.assertBlock(c, command.Info().Name, "TestBlockRemoveOperations") 68 } 69 70 func (s *BlockCommandSuite) TestBlockChangeOperations(c *gc.C) { 71 command := block.ChangeCommand{} 72 _, err := testing.RunCommand(c, envcmd.Wrap(&command), "TestBlockChangeOperations") 73 c.Assert(err, jc.ErrorIsNil) 74 s.assertBlock(c, command.Info().Name, "TestBlockChangeOperations") 75 } 76 77 func (s *BlockCommandSuite) processErrorTest(c *gc.C, tstError error, blockType block.Block, expectedError error, expectedWarning string) { 78 if tstError != nil { 79 c.Assert(errors.Cause(block.ProcessBlockedError(tstError, blockType)), gc.Equals, expectedError) 80 } else { 81 c.Assert(block.ProcessBlockedError(tstError, blockType), jc.ErrorIsNil) 82 } 83 // warning displayed 84 logOutputText := strings.Replace(c.GetTestLog(), "\n", "", -1) 85 c.Assert(logOutputText, gc.Matches, expectedWarning) 86 } 87 88 func (s *BlockCommandSuite) TestProcessErrOperationBlocked(c *gc.C) { 89 s.processErrorTest(c, common.ErrOperationBlocked("operations that remove"), block.BlockRemove, cmd.ErrSilent, ".*operations that remove.*") 90 s.processErrorTest(c, common.ErrOperationBlocked("destroy-environment operation has been blocked"), block.BlockDestroy, cmd.ErrSilent, ".*destroy-environment operation has been blocked.*") 91 } 92 93 func (s *BlockCommandSuite) TestProcessErrNil(c *gc.C) { 94 s.processErrorTest(c, nil, block.BlockDestroy, nil, "") 95 } 96 97 func (s *BlockCommandSuite) TestProcessErrAny(c *gc.C) { 98 err := errors.New("Test error Processing") 99 s.processErrorTest(c, err, block.BlockDestroy, err, "") 100 }