github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/block/enablecommand_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package block_test
     5  
     6  import (
     7  	"errors"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/cmd/cmdtesting"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/cmd/juju/block"
    15  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    16  	"github.com/juju/juju/testing"
    17  )
    18  
    19  var _ = gc.Suite(&enableCommandSuite{})
    20  
    21  type enableCommandSuite struct {
    22  	testing.FakeJujuXDGDataHomeSuite
    23  }
    24  
    25  func (*enableCommandSuite) enableCommand(api *mockUnblockClient, err error) cmd.Command {
    26  	store := jujuclienttesting.MinimalStore()
    27  	return block.NewEnableCommandForTest(store, api, err)
    28  }
    29  
    30  func (s *enableCommandSuite) TestInit(c *gc.C) {
    31  	for _, test := range []struct {
    32  		args []string
    33  		err  string
    34  	}{
    35  		{
    36  			err: "missing command set (all, destroy-model, remove-object)",
    37  		}, {
    38  			args: []string{"other"},
    39  			err:  "bad command set, valid options: all, destroy-model, remove-object",
    40  		}, {
    41  			args: []string{"all"},
    42  		}, {
    43  			args: []string{"destroy-model"},
    44  		}, {
    45  			args: []string{"remove-object"},
    46  		}, {
    47  			args: []string{"all", "extra"},
    48  			err:  `unrecognized args: ["extra"]`,
    49  		},
    50  	} {
    51  		cmd := s.enableCommand(nil, nil)
    52  		err := cmdtesting.InitCommand(cmd, test.args)
    53  		if test.err == "" {
    54  			c.Check(err, jc.ErrorIsNil)
    55  		} else {
    56  			c.Check(err.Error(), gc.Equals, test.err)
    57  		}
    58  	}
    59  }
    60  
    61  func (s *enableCommandSuite) TestRunGetAPIError(c *gc.C) {
    62  	cmd := s.enableCommand(nil, errors.New("boom"))
    63  	_, err := cmdtesting.RunCommand(c, cmd, "all")
    64  	c.Assert(err.Error(), gc.Equals, "cannot connect to the API: boom")
    65  }
    66  
    67  func (s *enableCommandSuite) TestRun(c *gc.C) {
    68  	for _, test := range []struct {
    69  		args  []string
    70  		type_ string
    71  	}{{
    72  		args:  []string{"all"},
    73  		type_: "BlockChange",
    74  	}, {
    75  		args:  []string{"destroy-model"},
    76  		type_: "BlockDestroy",
    77  	}, {
    78  		args:  []string{"remove-object"},
    79  		type_: "BlockRemove",
    80  	}} {
    81  		mockClient := &mockUnblockClient{}
    82  		cmd := s.enableCommand(mockClient, nil)
    83  		_, err := cmdtesting.RunCommand(c, cmd, test.args...)
    84  		c.Check(err, jc.ErrorIsNil)
    85  		c.Check(mockClient.blockType, gc.Equals, test.type_)
    86  	}
    87  }
    88  
    89  func (s *enableCommandSuite) TestRunError(c *gc.C) {
    90  	mockClient := &mockUnblockClient{err: errors.New("boom")}
    91  	cmd := s.enableCommand(mockClient, nil)
    92  	_, err := cmdtesting.RunCommand(c, cmd, "all")
    93  	c.Check(err, gc.ErrorMatches, "boom")
    94  }
    95  
    96  type mockUnblockClient struct {
    97  	blockType string
    98  	err       error
    99  }
   100  
   101  func (c *mockUnblockClient) Close() error {
   102  	return nil
   103  }
   104  
   105  func (c *mockUnblockClient) SwitchBlockOff(blockType string) error {
   106  	c.blockType = blockType
   107  	return c.err
   108  }