launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/cmd/juju/addmachine_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "fmt" 8 "strconv" 9 10 gc "launchpad.net/gocheck" 11 12 "launchpad.net/juju-core/constraints" 13 "launchpad.net/juju-core/instance" 14 jujutesting "launchpad.net/juju-core/juju/testing" 15 "launchpad.net/juju-core/state" 16 "launchpad.net/juju-core/testing" 17 jc "launchpad.net/juju-core/testing/checkers" 18 ) 19 20 type AddMachineSuite struct { 21 jujutesting.RepoSuite 22 } 23 24 var _ = gc.Suite(&AddMachineSuite{}) 25 26 func runAddMachine(c *gc.C, args ...string) error { 27 _, err := testing.RunCommand(c, &AddMachineCommand{}, args) 28 return err 29 } 30 31 func (s *AddMachineSuite) TestAddMachine(c *gc.C) { 32 err := runAddMachine(c) 33 c.Assert(err, gc.IsNil) 34 m, err := s.State.Machine("0") 35 c.Assert(err, gc.IsNil) 36 c.Assert(m.Life(), gc.Equals, state.Alive) 37 c.Assert(m.Series(), gc.DeepEquals, "precise") 38 mcons, err := m.Constraints() 39 c.Assert(err, gc.IsNil) 40 c.Assert(&mcons, jc.Satisfies, constraints.IsEmpty) 41 } 42 43 func (s *AddMachineSuite) TestAddMachineWithSeries(c *gc.C) { 44 err := runAddMachine(c, "--series", "series") 45 c.Assert(err, gc.IsNil) 46 m, err := s.State.Machine("0") 47 c.Assert(err, gc.IsNil) 48 c.Assert(m.Series(), gc.DeepEquals, "series") 49 } 50 51 func (s *AddMachineSuite) TestAddMachineWithConstraints(c *gc.C) { 52 err := runAddMachine(c, "--constraints", "mem=4G") 53 c.Assert(err, gc.IsNil) 54 m, err := s.State.Machine("0") 55 c.Assert(err, gc.IsNil) 56 mcons, err := m.Constraints() 57 c.Assert(err, gc.IsNil) 58 expectedCons := constraints.MustParse("mem=4G") 59 c.Assert(mcons, gc.DeepEquals, expectedCons) 60 } 61 62 func (s *AddMachineSuite) _assertAddContainer(c *gc.C, parentId, containerId string, ctype instance.ContainerType) { 63 m, err := s.State.Machine(parentId) 64 c.Assert(err, gc.IsNil) 65 containers, err := m.Containers() 66 c.Assert(err, gc.IsNil) 67 c.Assert(containers, gc.DeepEquals, []string{containerId}) 68 container, err := s.State.Machine(containerId) 69 c.Assert(err, gc.IsNil) 70 containers, err = container.Containers() 71 c.Assert(err, gc.IsNil) 72 c.Assert(containers, gc.DeepEquals, []string(nil)) 73 c.Assert(container.ContainerType(), gc.Equals, ctype) 74 } 75 76 func (s *AddMachineSuite) TestAddContainerToNewMachine(c *gc.C) { 77 for i, ctype := range instance.ContainerTypes { 78 c.Logf("test %d: %s", i, ctype) 79 err := runAddMachine(c, string(ctype)) 80 c.Assert(err, gc.IsNil) 81 s._assertAddContainer(c, strconv.Itoa(i), fmt.Sprintf("%d/%s/0", i, ctype), ctype) 82 } 83 } 84 85 func (s *AddMachineSuite) TestAddContainerToExistingMachine(c *gc.C) { 86 err := runAddMachine(c) 87 c.Assert(err, gc.IsNil) 88 for i, container := range instance.ContainerTypes { 89 machineNum := strconv.Itoa(i + 1) 90 err = runAddMachine(c) 91 c.Assert(err, gc.IsNil) 92 err := runAddMachine(c, fmt.Sprintf("%s:%s", container, machineNum)) 93 c.Assert(err, gc.IsNil) 94 s._assertAddContainer(c, machineNum, fmt.Sprintf("%s/%s/0", machineNum, container), container) 95 } 96 } 97 98 func (s *AddMachineSuite) TestAddUnsupportedContainerToMachine(c *gc.C) { 99 err := runAddMachine(c) 100 c.Assert(err, gc.IsNil) 101 m, err := s.State.Machine("0") 102 c.Assert(err, gc.IsNil) 103 m.SetSupportedContainers([]instance.ContainerType{instance.KVM}) 104 err = runAddMachine(c, "lxc:0") 105 c.Assert(err, gc.ErrorMatches, "cannot add a new machine: machine 0 cannot host lxc containers") 106 } 107 108 func (s *AddMachineSuite) TestAddMachineErrors(c *gc.C) { 109 err := runAddMachine(c, ":lxc") 110 c.Assert(err, gc.ErrorMatches, `malformed container argument ":lxc"`) 111 err = runAddMachine(c, "lxc:") 112 c.Assert(err, gc.ErrorMatches, `malformed container argument "lxc:"`) 113 err = runAddMachine(c, "2") 114 c.Assert(err, gc.ErrorMatches, `malformed container argument "2"`) 115 err = runAddMachine(c, "foo") 116 c.Assert(err, gc.ErrorMatches, `malformed container argument "foo"`) 117 err = runAddMachine(c, "lxc", "--constraints", "container=lxc") 118 c.Assert(err, gc.ErrorMatches, `container constraint "lxc" not allowed when adding a machine`) 119 }