1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package firewaller_test
7
gc "launchpad.net/gocheck"
9
"launchpad.net/juju-core/instance"
10
"launchpad.net/juju-core/state/api/firewaller"
11
"launchpad.net/juju-core/state/api/params"
12
statetesting "launchpad.net/juju-core/state/testing"
13
jc "launchpad.net/juju-core/testing/checkers"
16
type unitSuite struct {
19
apiUnit *firewaller.Unit
22
var _ = gc.Suite(&unitSuite{})
24
func (s *unitSuite) SetUpTest(c *gc.C) {
25
s.firewallerSuite.SetUpTest(c)
28
s.apiUnit, err = s.firewaller.Unit(s.units[0].Tag())
29
c.Assert(err, gc.IsNil)
32
func (s *unitSuite) TearDownTest(c *gc.C) {
33
s.firewallerSuite.TearDownTest(c)
36
func (s *unitSuite) TestUnit(c *gc.C) {
37
apiUnitFoo, err := s.firewaller.Unit("unit-foo-42")
38
c.Assert(err, gc.ErrorMatches, `unit "foo/42" not found`)
39
c.Assert(err, jc.Satisfies, params.IsCodeNotFound)
40
c.Assert(apiUnitFoo, gc.IsNil)
42
apiUnit0, err := s.firewaller.Unit(s.units[0].Tag())
43
c.Assert(err, gc.IsNil)
44
c.Assert(apiUnit0, gc.NotNil)
45
c.Assert(apiUnit0.Name(), gc.Equals, s.units[0].Name())
48
func (s *unitSuite) TestRefresh(c *gc.C) {
49
c.Assert(s.apiUnit.Life(), gc.Equals, params.Alive)
51
err := s.units[0].EnsureDead()
52
c.Assert(err, gc.IsNil)
53
c.Assert(s.apiUnit.Life(), gc.Equals, params.Alive)
55
err = s.apiUnit.Refresh()
56
c.Assert(err, gc.IsNil)
57
c.Assert(s.apiUnit.Life(), gc.Equals, params.Dead)
60
func (s *unitSuite) TestWatch(c *gc.C) {
61
c.Assert(s.apiUnit.Life(), gc.Equals, params.Alive)
63
w, err := s.apiUnit.Watch()
64
c.Assert(err, gc.IsNil)
65
defer statetesting.AssertStop(c, w)
66
wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w)
71
// Change something other than the life cycle and make sure it's
73
err = s.units[0].SetStatus(params.StatusStarted, "not really", nil)
74
c.Assert(err, gc.IsNil)
77
// Make the unit dead and check it's detected.
78
err = s.units[0].EnsureDead()
79
c.Assert(err, gc.IsNil)
82
statetesting.AssertStop(c, w)
86
func (s *unitSuite) TestAssignedMachine(c *gc.C) {
87
machineTag, err := s.apiUnit.AssignedMachine()
88
c.Assert(err, gc.IsNil)
89
c.Assert(machineTag, gc.Equals, s.machines[0].Tag())
91
// Unassign now and check CodeNotAssigned is reported.
92
err = s.units[0].UnassignFromMachine()
93
c.Assert(err, gc.IsNil)
94
_, err = s.apiUnit.AssignedMachine()
95
c.Assert(err, gc.ErrorMatches, `unit "wordpress/0" is not assigned to a machine`)
96
c.Assert(err, jc.Satisfies, params.IsCodeNotAssigned)
99
func (s *unitSuite) TestOpenedPorts(c *gc.C) {
100
ports, err := s.apiUnit.OpenedPorts()
101
c.Assert(err, gc.IsNil)
102
c.Assert(ports, jc.DeepEquals, []instance.Port{})
104
// Open some ports and check again.
105
err = s.units[0].OpenPort("foo", 1234)
106
c.Assert(err, gc.IsNil)
107
err = s.units[0].OpenPort("bar", 4321)
108
c.Assert(err, gc.IsNil)
109
ports, err = s.apiUnit.OpenedPorts()
110
c.Assert(err, gc.IsNil)
111
c.Assert(ports, jc.DeepEquals, []instance.Port{{"bar", 4321}, {"foo", 1234}})
114
func (s *unitSuite) TestService(c *gc.C) {
115
service, err := s.apiUnit.Service()
116
c.Assert(err, gc.IsNil)
117
c.Assert(service.Name(), gc.Equals, s.service.Name())
120
func (s *unitSuite) TestName(c *gc.C) {
121
c.Assert(s.apiUnit.Name(), gc.Equals, s.units[0].Name())