Index: state/apiserver/client/client_test.go |
=== modified file 'state/apiserver/client/client_test.go' |
--- state/apiserver/client/client_test.go 2014-04-17 12:53:23 +0000 |
+++ state/apiserver/client/client_test.go 2014-04-23 06:49:12 +0000 |
@@ -2143,27 +2143,51 @@ |
return pinger |
} |
+var ( |
+ emptyCons = constraints.Value{} |
+ defaultSeries = "" |
+) |
+ |
func (s *clientSuite) TestClientEnsureAvailabilitySeries(c *gc.C) { |
- err := s.APIState.Client().EnsureAvailability(1, constraints.Value{}, "") |
+ _, err := s.State.AddMachine("quantal", state.JobManageEnviron) |
c.Assert(err, gc.IsNil) |
+ // We have to ensure the agents are alive, or EnsureAvailability will |
+ // create more to replace them. |
pinger := s.setAgentAlive(c, "0") |
defer pinger.Kill() |
- err = s.APIState.Client().EnsureAvailability(3, constraints.Value{}, "non-default") |
- c.Assert(err, gc.IsNil) |
machines, err := s.State.AllMachines() |
c.Assert(err, gc.IsNil) |
+ c.Assert(machines, gc.HasLen, 1) |
+ c.Assert(machines[0].Series(), gc.Equals, "quantal") |
+ err = s.APIState.Client().EnsureAvailability(3, emptyCons, defaultSeries) |
+ c.Assert(err, gc.IsNil) |
+ machines, err = s.State.AllMachines() |
+ c.Assert(err, gc.IsNil) |
c.Assert(machines, gc.HasLen, 3) |
- c.Assert(machines[0].Series(), gc.Equals, "precise") |
- c.Assert(machines[1].Series(), gc.Equals, "non-default") |
- c.Assert(machines[2].Series(), gc.Equals, "non-default") |
+ c.Assert(machines[0].Series(), gc.Equals, "quantal") |
+ c.Assert(machines[1].Series(), gc.Equals, "quantal") |
+ c.Assert(machines[2].Series(), gc.Equals, "quantal") |
+ defer s.setAgentAlive(c, "1").Kill() |
+ defer s.setAgentAlive(c, "2").Kill() |
+ err = s.APIState.Client().EnsureAvailability(5, emptyCons, "non-default") |
+ c.Assert(err, gc.IsNil) |
+ machines, err = s.State.AllMachines() |
+ c.Assert(err, gc.IsNil) |
+ c.Assert(machines, gc.HasLen, 5) |
+ c.Assert(machines[0].Series(), gc.Equals, "quantal") |
+ c.Assert(machines[1].Series(), gc.Equals, "quantal") |
+ c.Assert(machines[2].Series(), gc.Equals, "quantal") |
+ c.Assert(machines[3].Series(), gc.Equals, "non-default") |
+ c.Assert(machines[4].Series(), gc.Equals, "non-default") |
} |
func (s *clientSuite) TestClientEnsureAvailabilityConstraints(c *gc.C) { |
- err := s.APIState.Client().EnsureAvailability(1, constraints.Value{}, "") |
+ _, err := s.State.AddMachine("quantal", state.JobManageEnviron) |
c.Assert(err, gc.IsNil) |
pinger := s.setAgentAlive(c, "0") |
defer pinger.Kill() |
- err = s.APIState.Client().EnsureAvailability(3, constraints.MustParse("mem=4G"), "") |
+ err = s.APIState.Client().EnsureAvailability( |
+ 3, constraints.MustParse("mem=4G"), defaultSeries) |
c.Assert(err, gc.IsNil) |
machines, err := s.State.AllMachines() |
c.Assert(err, gc.IsNil) |
@@ -2180,11 +2204,53 @@ |
} |
} |
+func (s *clientSuite) TestClientEnsureAvailability0Preserves(c *gc.C) { |
+ _, err := s.State.AddMachine("quantal", state.JobManageEnviron) |
+ c.Assert(err, gc.IsNil) |
+ pinger := s.setAgentAlive(c, "0") |
+ defer pinger.Kill() |
+ // A value of 0 says either "if I'm not HA, make me HA" or "preserve my |
+ // current HA settings". |
+ err = s.APIState.Client().EnsureAvailability(0, emptyCons, defaultSeries) |
+ c.Assert(err, gc.IsNil) |
+ machines, err := s.State.AllMachines() |
+ c.Assert(machines, gc.HasLen, 3) |
+ defer s.setAgentAlive(c, "1").Kill() |
+ // Now, we keep agent 1 alive, but not agent 2, calling |
+ // EnsureAvailability(0) again will cause us to start another machine |
+ err = s.APIState.Client().EnsureAvailability(0, emptyCons, defaultSeries) |
+ c.Assert(err, gc.IsNil) |
+ machines, err = s.State.AllMachines() |
+ c.Assert(machines, gc.HasLen, 4) |
+} |
+ |
+func (s *clientSuite) TestClientEnsureAvailability0Preserves5(c *gc.C) { |
+ _, err := s.State.AddMachine("quantal", state.JobManageEnviron) |
+ c.Assert(err, gc.IsNil) |
+ pinger := s.setAgentAlive(c, "0") |
+ defer pinger.Kill() |
+ // Start off with 5 servers |
+ err = s.APIState.Client().EnsureAvailability(5, emptyCons, defaultSeries) |
+ c.Assert(err, gc.IsNil) |
+ machines, err := s.State.AllMachines() |
+ c.Assert(machines, gc.HasLen, 5) |
+ defer s.setAgentAlive(c, "1").Kill() |
+ defer s.setAgentAlive(c, "2").Kill() |
+ defer s.setAgentAlive(c, "3").Kill() |
+ // Keeping all alive but one, will bring up 1 more server to preserve 5 |
+ err = s.APIState.Client().EnsureAvailability(0, emptyCons, defaultSeries) |
+ c.Assert(err, gc.IsNil) |
+ machines, err = s.State.AllMachines() |
+ c.Assert(machines, gc.HasLen, 6) |
+} |
+ |
func (s *clientSuite) TestClientEnsureAvailabilityErrors(c *gc.C) { |
- var emptyCons constraints.Value |
- defaultSeries := "" |
- err := s.APIState.Client().EnsureAvailability(0, emptyCons, defaultSeries) |
- c.Assert(err, gc.ErrorMatches, "number of state servers must be odd and greater than zero") |
+ _, err := s.State.AddMachine("quantal", state.JobManageEnviron) |
+ c.Assert(err, gc.IsNil) |
+ pinger := s.setAgentAlive(c, "0") |
+ defer pinger.Kill() |
+ err = s.APIState.Client().EnsureAvailability(-1, emptyCons, defaultSeries) |
+ c.Assert(err, gc.ErrorMatches, "number of state servers must be odd and non-negative") |
err = s.APIState.Client().EnsureAvailability(3, emptyCons, defaultSeries) |
c.Assert(err, gc.IsNil) |
err = s.APIState.Client().EnsureAvailability(1, emptyCons, defaultSeries) |