github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/cmd/juju/machine/remove_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package machine_test 5 6 import ( 7 "strings" 8 9 "github.com/juju/cmd" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/apiserver/common" 14 "github.com/juju/juju/cmd/envcmd" 15 "github.com/juju/juju/cmd/juju/machine" 16 "github.com/juju/juju/testing" 17 ) 18 19 type RemoveMachineSuite struct { 20 testing.FakeJujuHomeSuite 21 fake *fakeRemoveMachineAPI 22 } 23 24 var _ = gc.Suite(&RemoveMachineSuite{}) 25 26 func (s *RemoveMachineSuite) SetUpTest(c *gc.C) { 27 s.FakeJujuHomeSuite.SetUpTest(c) 28 s.fake = &fakeRemoveMachineAPI{} 29 } 30 31 func (s *RemoveMachineSuite) run(c *gc.C, args ...string) (*cmd.Context, error) { 32 remove := machine.NewRemoveCommand(s.fake) 33 return testing.RunCommand(c, envcmd.Wrap(remove), args...) 34 } 35 36 func (s *RemoveMachineSuite) TestInit(c *gc.C) { 37 for i, test := range []struct { 38 args []string 39 machines []string 40 force bool 41 errorString string 42 }{ 43 { 44 errorString: "no machines specified", 45 }, { 46 args: []string{"1"}, 47 machines: []string{"1"}, 48 }, { 49 args: []string{"1", "2"}, 50 machines: []string{"1", "2"}, 51 }, { 52 args: []string{"1", "--force"}, 53 machines: []string{"1"}, 54 force: true, 55 }, { 56 args: []string{"--force", "1", "2"}, 57 machines: []string{"1", "2"}, 58 force: true, 59 }, { 60 args: []string{"lxc"}, 61 errorString: `invalid machine id "lxc"`, 62 }, { 63 args: []string{"1/lxc/2"}, 64 machines: []string{"1/lxc/2"}, 65 }, 66 } { 67 c.Logf("test %d", i) 68 removeCmd := &machine.RemoveCommand{} 69 err := testing.InitCommand(removeCmd, test.args) 70 if test.errorString == "" { 71 c.Check(err, jc.ErrorIsNil) 72 c.Check(removeCmd.Force, gc.Equals, test.force) 73 c.Check(removeCmd.MachineIds, jc.DeepEquals, test.machines) 74 } else { 75 c.Check(err, gc.ErrorMatches, test.errorString) 76 } 77 } 78 } 79 80 func (s *RemoveMachineSuite) TestRemove(c *gc.C) { 81 _, err := s.run(c, "1", "2/lxc/1") 82 c.Assert(err, jc.ErrorIsNil) 83 c.Assert(s.fake.forced, jc.IsFalse) 84 c.Assert(s.fake.machines, jc.DeepEquals, []string{"1", "2/lxc/1"}) 85 } 86 87 func (s *RemoveMachineSuite) TestRemoveForce(c *gc.C) { 88 _, err := s.run(c, "--force", "1", "2/lxc/1") 89 c.Assert(err, jc.ErrorIsNil) 90 c.Assert(s.fake.forced, jc.IsTrue) 91 c.Assert(s.fake.machines, jc.DeepEquals, []string{"1", "2/lxc/1"}) 92 } 93 94 func (s *RemoveMachineSuite) TestBlockedError(c *gc.C) { 95 s.fake.removeError = common.ErrOperationBlocked("TestBlockedError") 96 _, err := s.run(c, "1") 97 c.Assert(err, gc.Equals, cmd.ErrSilent) 98 c.Assert(s.fake.forced, jc.IsFalse) 99 // msg is logged 100 stripped := strings.Replace(c.GetTestLog(), "\n", "", -1) 101 c.Assert(stripped, gc.Matches, ".*TestBlockedError.*") 102 } 103 104 func (s *RemoveMachineSuite) TestForceBlockedError(c *gc.C) { 105 s.fake.removeError = common.ErrOperationBlocked("TestForceBlockedError") 106 _, err := s.run(c, "--force", "1") 107 c.Assert(err, gc.Equals, cmd.ErrSilent) 108 c.Assert(s.fake.forced, jc.IsTrue) 109 // msg is logged 110 stripped := strings.Replace(c.GetTestLog(), "\n", "", -1) 111 c.Assert(stripped, gc.Matches, ".*TestForceBlockedError.*") 112 } 113 114 type fakeRemoveMachineAPI struct { 115 forced bool 116 machines []string 117 removeError error 118 } 119 120 func (f *fakeRemoveMachineAPI) Close() error { 121 return nil 122 } 123 124 func (f *fakeRemoveMachineAPI) DestroyMachines(machines ...string) error { 125 f.forced = false 126 f.machines = machines 127 return f.removeError 128 } 129 130 func (f *fakeRemoveMachineAPI) ForceDestroyMachines(machines ...string) error { 131 f.forced = true 132 f.machines = machines 133 return f.removeError 134 }