~rogpeppe/juju-core/azure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Copyright 2013 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.

package main

import (
	"fmt"
	. "launchpad.net/gocheck"
	"launchpad.net/juju-core/constraints"
	"launchpad.net/juju-core/instance"
	jujutesting "launchpad.net/juju-core/juju/testing"
	"launchpad.net/juju-core/state"
	"launchpad.net/juju-core/testing"
	"strconv"
)

type AddMachineSuite struct {
	jujutesting.RepoSuite
}

var _ = Suite(&AddMachineSuite{})

func runAddMachine(c *C, args ...string) error {
	_, err := testing.RunCommand(c, &AddMachineCommand{}, args)
	return err
}

func (s *AddMachineSuite) TestAddMachine(c *C) {
	err := runAddMachine(c)
	c.Assert(err, IsNil)
	m, err := s.State.Machine("0")
	c.Assert(err, IsNil)
	c.Assert(m.Life(), Equals, state.Alive)
	c.Assert(m.Series(), DeepEquals, "precise")
	mcons, err := m.Constraints()
	c.Assert(err, IsNil)
	expectedCons := constraints.Value{}
	c.Assert(mcons, DeepEquals, expectedCons)
}

func (s *AddMachineSuite) TestAddMachineWithSeries(c *C) {
	err := runAddMachine(c, "--series", "series")
	c.Assert(err, IsNil)
	m, err := s.State.Machine("0")
	c.Assert(err, IsNil)
	c.Assert(m.Series(), DeepEquals, "series")
}

func (s *AddMachineSuite) TestAddMachineWithConstraints(c *C) {
	err := runAddMachine(c, "--constraints", "mem=4G")
	c.Assert(err, IsNil)
	m, err := s.State.Machine("0")
	c.Assert(err, IsNil)
	mcons, err := m.Constraints()
	c.Assert(err, IsNil)
	expectedCons := constraints.MustParse("mem=4G")
	c.Assert(mcons, DeepEquals, expectedCons)
}

func (s *AddMachineSuite) _assertAddContainer(c *C, parentId, containerId string, ctype instance.ContainerType) {
	m, err := s.State.Machine(parentId)
	c.Assert(err, IsNil)
	containers, err := m.Containers()
	c.Assert(err, IsNil)
	c.Assert(containers, DeepEquals, []string{containerId})
	container, err := s.State.Machine(containerId)
	c.Assert(err, IsNil)
	containers, err = container.Containers()
	c.Assert(err, IsNil)
	c.Assert(containers, DeepEquals, []string(nil))
	c.Assert(container.ContainerType(), Equals, ctype)
}

func (s *AddMachineSuite) TestAddContainerToNewMachine(c *C) {
	for i, ctype := range instance.SupportedContainerTypes {
		err := runAddMachine(c, fmt.Sprintf("%s", ctype))
		c.Assert(err, IsNil)
		s._assertAddContainer(c, strconv.Itoa(2*i), fmt.Sprintf("0/%s/0", ctype), ctype)
	}
}

func (s *AddMachineSuite) TestAddContainerToExistingMachine(c *C) {
	err := runAddMachine(c)
	c.Assert(err, IsNil)
	err = runAddMachine(c)
	c.Assert(err, IsNil)
	for i, container := range instance.SupportedContainerTypes {
		err := runAddMachine(c, fmt.Sprintf("%s:1", container))
		c.Assert(err, IsNil)
		s._assertAddContainer(c, "1", fmt.Sprintf("1/%s/%d", container, i), container)
	}
}

func (s *AddMachineSuite) TestAddMachineErrors(c *C) {
	err := runAddMachine(c, ":foo")
	c.Assert(err, ErrorMatches, `malformed container argument ":foo"`)
	err = runAddMachine(c, "foo:")
	c.Assert(err, ErrorMatches, `malformed container argument "foo:"`)
	err = runAddMachine(c, "lxc", "--constraints", "container=lxc")
	c.Assert(err, ErrorMatches, `container constraint "lxc" not allowed when adding a machine`)
}