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  }