1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
8
jc "github.com/juju/testing/checkers"
11
"github.com/juju/juju/apiserver/common"
12
"github.com/juju/juju/state"
13
"github.com/juju/juju/state/multiwatcher"
16
type machineSuite struct{}
18
var _ = gc.Suite(&machineSuite{})
20
func (s *machineSuite) TestMachineJobFromParams(c *gc.C) {
21
var tests = []struct {
22
name multiwatcher.MachineJob
26
name: multiwatcher.JobHostUnits,
27
want: state.JobHostUnits,
29
name: multiwatcher.JobManageModel,
30
want: state.JobManageModel,
34
err: `invalid machine job "invalid"`,
36
for _, test := range tests {
37
got, err := common.MachineJobFromParams(test.name)
39
c.Check(err, gc.ErrorMatches, test.err)
41
c.Check(got, gc.Equals, test.want)
45
func (s *machineSuite) TestDestroyMachines(c *gc.C) {
47
machines: map[string]*mockMachine{
49
"2": {destroyErr: errors.New("unit exists error")},
50
"3": {life: state.Dying},
53
err := common.MockableDestroyMachines(&st, false, "1", "2", "3", "4")
55
c.Assert(st.machines["1"].Life(), gc.Equals, state.Dying)
56
c.Assert(st.machines["1"].forceDestroyCalled, jc.IsFalse)
58
c.Assert(st.machines["2"].Life(), gc.Equals, state.Alive)
59
c.Assert(st.machines["2"].forceDestroyCalled, jc.IsFalse)
61
c.Assert(st.machines["3"].forceDestroyCalled, jc.IsFalse)
62
c.Assert(st.machines["3"].destroyCalled, jc.IsFalse)
64
c.Assert(err, gc.ErrorMatches, "some machines were not destroyed: unit exists error; machine 4 does not exist")
67
func (s *machineSuite) TestForceDestroyMachines(c *gc.C) {
69
machines: map[string]*mockMachine{
71
"2": {life: state.Dying},
74
err := common.MockableDestroyMachines(&st, true, "1", "2")
76
c.Assert(st.machines["1"].Life(), gc.Equals, state.Dying)
77
c.Assert(st.machines["1"].forceDestroyCalled, jc.IsTrue)
78
c.Assert(st.machines["2"].forceDestroyCalled, jc.IsTrue)
80
c.Assert(err, jc.ErrorIsNil)
83
type mockState struct {
85
machines map[string]*mockMachine
88
func (st *mockState) Machine(id string) (common.Machine, error) {
89
if m, ok := st.machines[id]; ok {
92
return nil, errors.Errorf("machine %s does not exist", id)
95
type mockMachine struct {
100
forceDestroyCalled bool
104
func (m *mockMachine) Life() state.Life {
108
func (m *mockMachine) ForceDestroy() error {
109
m.forceDestroyCalled = true
110
if m.forceDestroyErr != nil {
111
return m.forceDestroyErr
117
func (m *mockMachine) Destroy() error {
118
m.destroyCalled = true
119
if m.destroyErr != nil {