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 }