github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/firewaller/machine_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewaller_test 5 6 import ( 7 "github.com/juju/names" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/api/firewaller" 12 "github.com/juju/juju/apiserver/params" 13 "github.com/juju/juju/instance" 14 "github.com/juju/juju/network" 15 "github.com/juju/juju/state" 16 statetesting "github.com/juju/juju/state/testing" 17 ) 18 19 type machineSuite struct { 20 firewallerSuite 21 22 apiMachine *firewaller.Machine 23 } 24 25 var _ = gc.Suite(&machineSuite{}) 26 27 func (s *machineSuite) SetUpTest(c *gc.C) { 28 s.firewallerSuite.SetUpTest(c) 29 30 var err error 31 s.apiMachine, err = s.firewaller.Machine(s.machines[0].Tag().(names.MachineTag)) 32 c.Assert(err, jc.ErrorIsNil) 33 } 34 35 func (s *machineSuite) TearDownTest(c *gc.C) { 36 s.firewallerSuite.TearDownTest(c) 37 } 38 39 func (s *machineSuite) TestMachine(c *gc.C) { 40 apiMachine42, err := s.firewaller.Machine(names.NewMachineTag("42")) 41 c.Assert(err, gc.ErrorMatches, "machine 42 not found") 42 c.Assert(err, jc.Satisfies, params.IsCodeNotFound) 43 c.Assert(apiMachine42, gc.IsNil) 44 45 apiMachine0, err := s.firewaller.Machine(s.machines[0].Tag().(names.MachineTag)) 46 c.Assert(err, jc.ErrorIsNil) 47 c.Assert(apiMachine0, gc.NotNil) 48 } 49 50 func (s *machineSuite) TestTag(c *gc.C) { 51 c.Assert(s.apiMachine.Tag(), gc.Equals, names.NewMachineTag(s.machines[0].Id())) 52 } 53 54 func (s *machineSuite) TestInstanceId(c *gc.C) { 55 // Add another, not provisioned machine to test 56 // CodeNotProvisioned. 57 newMachine, err := s.State.AddMachine("quantal", state.JobHostUnits) 58 c.Assert(err, jc.ErrorIsNil) 59 apiNewMachine, err := s.firewaller.Machine(newMachine.Tag().(names.MachineTag)) 60 c.Assert(err, jc.ErrorIsNil) 61 _, err = apiNewMachine.InstanceId() 62 c.Assert(err, gc.ErrorMatches, "machine 3 not provisioned") 63 c.Assert(err, jc.Satisfies, params.IsCodeNotProvisioned) 64 65 instanceId, err := s.apiMachine.InstanceId() 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(instanceId, gc.Equals, instance.Id("i-manager")) 68 } 69 70 func (s *machineSuite) TestWatchUnits(c *gc.C) { 71 w, err := s.apiMachine.WatchUnits() 72 c.Assert(err, jc.ErrorIsNil) 73 defer statetesting.AssertStop(c, w) 74 wc := statetesting.NewStringsWatcherC(c, s.BackingState, w) 75 76 // Initial event. 77 wc.AssertChange("wordpress/0") 78 wc.AssertNoChange() 79 80 // Change something other than the life cycle and make sure it's 81 // not detected. 82 err = s.machines[0].SetPassword("foo") 83 c.Assert(err, gc.ErrorMatches, "password is only 3 bytes long, and is not a valid Agent password") 84 wc.AssertNoChange() 85 86 err = s.machines[0].SetPassword("foo-12345678901234567890") 87 c.Assert(err, jc.ErrorIsNil) 88 wc.AssertNoChange() 89 90 // Unassign unit 0 from the machine and check it's detected. 91 err = s.units[0].UnassignFromMachine() 92 c.Assert(err, jc.ErrorIsNil) 93 wc.AssertChange("wordpress/0") 94 wc.AssertNoChange() 95 96 statetesting.AssertStop(c, w) 97 wc.AssertClosed() 98 } 99 100 func (s *machineSuite) TestActiveNetworks(c *gc.C) { 101 // No ports opened at first, no networks. 102 nets, err := s.apiMachine.ActiveNetworks() 103 c.Assert(err, jc.ErrorIsNil) 104 c.Assert(nets, gc.HasLen, 0) 105 106 // Open a port and check again. 107 err = s.units[0].OpenPort("tcp", 1234) 108 c.Assert(err, jc.ErrorIsNil) 109 nets, err = s.apiMachine.ActiveNetworks() 110 c.Assert(err, jc.ErrorIsNil) 111 c.Assert(nets, jc.DeepEquals, []names.NetworkTag{ 112 names.NewNetworkTag(network.DefaultPublic), 113 }) 114 115 // Remove all ports, no networks. 116 ports, err := s.machines[0].OpenedPorts(network.DefaultPublic) 117 c.Assert(err, jc.ErrorIsNil) 118 err = ports.Remove() 119 c.Assert(err, jc.ErrorIsNil) 120 nets, err = s.apiMachine.ActiveNetworks() 121 c.Assert(err, jc.ErrorIsNil) 122 c.Assert(nets, gc.HasLen, 0) 123 } 124 125 func (s *machineSuite) TestOpenedPorts(c *gc.C) { 126 networkTag := names.NewNetworkTag(network.DefaultPublic) 127 unitTag := s.units[0].Tag().(names.UnitTag) 128 129 // No ports opened at first. 130 ports, err := s.apiMachine.OpenedPorts(networkTag) 131 c.Assert(err, jc.ErrorIsNil) 132 c.Assert(ports, gc.HasLen, 0) 133 134 // Open a port and check again. 135 err = s.units[0].OpenPort("tcp", 1234) 136 c.Assert(err, jc.ErrorIsNil) 137 ports, err = s.apiMachine.OpenedPorts(networkTag) 138 c.Assert(err, jc.ErrorIsNil) 139 c.Assert(ports, jc.DeepEquals, map[network.PortRange]names.UnitTag{ 140 network.PortRange{FromPort: 1234, ToPort: 1234, Protocol: "tcp"}: unitTag, 141 }) 142 }