1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
10
jc "github.com/juju/testing/checkers"
11
gc "gopkg.in/check.v1"
13
"github.com/juju/juju/apiserver/common"
14
"github.com/juju/juju/cmd/juju/machine"
15
"github.com/juju/juju/testing"
18
type RemoveMachineSuite struct {
19
testing.FakeJujuXDGDataHomeSuite
20
fake *fakeRemoveMachineAPI
23
var _ = gc.Suite(&RemoveMachineSuite{})
25
func (s *RemoveMachineSuite) SetUpTest(c *gc.C) {
26
s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
27
s.fake = &fakeRemoveMachineAPI{}
30
func (s *RemoveMachineSuite) run(c *gc.C, args ...string) (*cmd.Context, error) {
31
remove, _ := machine.NewRemoveCommandForTest(s.fake)
32
return testing.RunCommand(c, remove, args...)
35
func (s *RemoveMachineSuite) TestInit(c *gc.C) {
36
for i, test := range []struct {
43
errorString: "no machines specified",
46
machines: []string{"1"},
48
args: []string{"1", "2"},
49
machines: []string{"1", "2"},
51
args: []string{"1", "--force"},
52
machines: []string{"1"},
55
args: []string{"--force", "1", "2"},
56
machines: []string{"1", "2"},
59
args: []string{"lxd"},
60
errorString: `invalid machine id "lxd"`,
62
args: []string{"1/lxd/2"},
63
machines: []string{"1/lxd/2"},
67
wrappedCommand, removeCmd := machine.NewRemoveCommandForTest(s.fake)
68
err := testing.InitCommand(wrappedCommand, test.args)
69
if test.errorString == "" {
70
c.Check(err, jc.ErrorIsNil)
71
c.Check(removeCmd.Force, gc.Equals, test.force)
72
c.Check(removeCmd.MachineIds, jc.DeepEquals, test.machines)
74
c.Check(err, gc.ErrorMatches, test.errorString)
79
func (s *RemoveMachineSuite) TestRemove(c *gc.C) {
80
_, err := s.run(c, "1", "2/lxd/1")
81
c.Assert(err, jc.ErrorIsNil)
82
c.Assert(s.fake.forced, jc.IsFalse)
83
c.Assert(s.fake.machines, jc.DeepEquals, []string{"1", "2/lxd/1"})
86
func (s *RemoveMachineSuite) TestRemoveForce(c *gc.C) {
87
_, err := s.run(c, "--force", "1", "2/lxd/1")
88
c.Assert(err, jc.ErrorIsNil)
89
c.Assert(s.fake.forced, jc.IsTrue)
90
c.Assert(s.fake.machines, jc.DeepEquals, []string{"1", "2/lxd/1"})
93
func (s *RemoveMachineSuite) TestBlockedError(c *gc.C) {
94
s.fake.removeError = common.OperationBlockedError("TestBlockedError")
95
_, err := s.run(c, "1")
96
c.Assert(err, gc.Equals, cmd.ErrSilent)
97
c.Assert(s.fake.forced, jc.IsFalse)
99
stripped := strings.Replace(c.GetTestLog(), "\n", "", -1)
100
c.Assert(stripped, gc.Matches, ".*TestBlockedError.*")
103
func (s *RemoveMachineSuite) TestForceBlockedError(c *gc.C) {
104
s.fake.removeError = common.OperationBlockedError("TestForceBlockedError")
105
_, err := s.run(c, "--force", "1")
106
c.Assert(err, gc.Equals, cmd.ErrSilent)
107
c.Assert(s.fake.forced, jc.IsTrue)
109
stripped := strings.Replace(c.GetTestLog(), "\n", "", -1)
110
c.Assert(stripped, gc.Matches, ".*TestForceBlockedError.*")
113
type fakeRemoveMachineAPI struct {
119
func (f *fakeRemoveMachineAPI) Close() error {
123
func (f *fakeRemoveMachineAPI) DestroyMachines(machines ...string) error {
125
f.machines = machines
129
func (f *fakeRemoveMachineAPI) ForceDestroyMachines(machines ...string) error {
131
f.machines = machines