github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/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 gc "gopkg.in/check.v1" 8 "strings" 9 10 "github.com/juju/cmd" 11 "github.com/juju/errors" 12 jc "github.com/juju/testing/checkers" 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/environs/config" 18 "github.com/juju/juju/testing" 19 ) 20 21 type BlockCommandSuite struct { 22 ProtectionCommandSuite 23 } 24 25 var _ = gc.Suite(&BlockCommandSuite{}) 26 27 func runBlockCommand(c *gc.C, args ...string) error { 28 _, err := testing.RunCommand(c, envcmd.Wrap(&block.BlockCommand{}), args...) 29 return err 30 } 31 32 func (s *BlockCommandSuite) runBlockTestAndCompare(c *gc.C, operation string, expectedValue bool) { 33 err := runBlockCommand(c, operation) 34 c.Assert(err, jc.ErrorIsNil) 35 36 expectedOp := config.BlockKeyPrefix + strings.ToLower(operation) 37 expectedCfg := map[string]interface{}{expectedOp: expectedValue} 38 c.Assert(s.mockClient.cfg, gc.DeepEquals, expectedCfg) 39 } 40 41 func (s *BlockCommandSuite) TestBlockCmdNoOperation(c *gc.C) { 42 s.assertErrorMatches(c, runBlockCommand(c), `.*must specify one of.*`) 43 } 44 45 func (s *BlockCommandSuite) TestBlockCmdMoreThanOneOperation(c *gc.C) { 46 s.assertErrorMatches(c, runBlockCommand(c, "destroy-environment", "change"), `.*must specify one of.*`) 47 } 48 49 func (s *BlockCommandSuite) TestBlockCmdOperationWithSeparator(c *gc.C) { 50 s.assertErrorMatches(c, runBlockCommand(c, "destroy-environment|"), `.*valid argument.*`) 51 } 52 53 func (s *BlockCommandSuite) TestBlockCmdUnknownJujuOperation(c *gc.C) { 54 s.assertErrorMatches(c, runBlockCommand(c, "add-machine"), `.*valid argument.*`) 55 } 56 57 func (s *BlockCommandSuite) TestBlockCmdUnknownOperation(c *gc.C) { 58 s.assertErrorMatches(c, runBlockCommand(c, "blah"), `.*valid argument.*`) 59 } 60 61 func (s *BlockCommandSuite) TestBlockCmdValidDestroyEnvOperationUpperCase(c *gc.C) { 62 s.runBlockTestAndCompare(c, "DESTROY-ENVIRONMENT", true) 63 } 64 65 func (s *BlockCommandSuite) TestBlockCmdValidDestroyEnvOperation(c *gc.C) { 66 s.runBlockTestAndCompare(c, "destroy-environment", true) 67 } 68 69 func (s *BlockCommandSuite) processErrorTest(c *gc.C, tstError error, blockType block.Block, expectedError error, expectedWarning string) { 70 if tstError != nil { 71 c.Assert(errors.Cause(block.ProcessBlockedError(tstError, blockType)), gc.Equals, expectedError) 72 } else { 73 c.Assert(block.ProcessBlockedError(tstError, blockType), jc.ErrorIsNil) 74 } 75 // warning displayed 76 logOutputText := strings.Replace(c.GetTestLog(), "\n", "", -1) 77 c.Assert(logOutputText, gc.Matches, expectedWarning) 78 } 79 80 func (s *BlockCommandSuite) TestProcessErrOperationBlocked(c *gc.C) { 81 s.processErrorTest(c, common.ErrOperationBlocked, block.BlockRemove, cmd.ErrSilent, ".*operations that remove.*") 82 s.processErrorTest(c, common.ErrOperationBlocked, block.BlockDestroy, cmd.ErrSilent, ".*destroy-environment operation has been blocked.*") 83 } 84 85 func (s *BlockCommandSuite) TestProcessErrNil(c *gc.C) { 86 s.processErrorTest(c, nil, block.BlockDestroy, nil, "") 87 } 88 89 func (s *BlockCommandSuite) TestProcessErrAny(c *gc.C) { 90 err := errors.New("Test error Processing") 91 s.processErrorTest(c, err, block.BlockDestroy, err, "") 92 }