github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/api/highavailability/client_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package highavailability_test 5 6 import ( 7 stdtesting "testing" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api/highavailability" 13 "github.com/juju/juju/constraints" 14 jujutesting "github.com/juju/juju/juju/testing" 15 "github.com/juju/juju/state" 16 "github.com/juju/juju/state/presence" 17 coretesting "github.com/juju/juju/testing" 18 ) 19 20 func TestAll(t *stdtesting.T) { 21 coretesting.MgoTestPackage(t) 22 } 23 24 type clientSuite struct { 25 jujutesting.JujuConnSuite 26 } 27 28 var _ = gc.Suite(&clientSuite{}) 29 30 type KillerForTesting interface { 31 KillForTesting() error 32 } 33 34 func assertKill(c *gc.C, killer KillerForTesting) { 35 c.Assert(killer.KillForTesting(), gc.IsNil) 36 } 37 38 func setAgentPresence(c *gc.C, s *jujutesting.JujuConnSuite, machineId string) *presence.Pinger { 39 m, err := s.BackingState.Machine(machineId) 40 c.Assert(err, jc.ErrorIsNil) 41 pinger, err := m.SetAgentPresence() 42 c.Assert(err, jc.ErrorIsNil) 43 s.BackingState.StartSync() 44 err = m.WaitAgentPresence(coretesting.LongWait) 45 c.Assert(err, jc.ErrorIsNil) 46 return pinger 47 } 48 49 func assertEnableHA(c *gc.C, s *jujutesting.JujuConnSuite) { 50 _, err := s.State.AddMachine("quantal", state.JobManageModel) 51 c.Assert(err, jc.ErrorIsNil) 52 // We have to ensure the agents are alive, or EnableHA will 53 // create more to replace them. 54 pingerA := setAgentPresence(c, s, "0") 55 defer assertKill(c, pingerA) 56 57 emptyCons := constraints.Value{} 58 client := highavailability.NewClient(s.APIState) 59 result, err := client.EnableHA(3, emptyCons, nil) 60 c.Assert(err, jc.ErrorIsNil) 61 62 c.Assert(result.Maintained, gc.DeepEquals, []string{"machine-0"}) 63 c.Assert(result.Added, gc.DeepEquals, []string{"machine-1", "machine-2"}) 64 c.Assert(result.Removed, gc.HasLen, 0) 65 66 machines, err := s.State.AllMachines() 67 c.Assert(err, jc.ErrorIsNil) 68 c.Assert(machines, gc.HasLen, 3) 69 c.Assert(machines[0].Series(), gc.Equals, "quantal") 70 c.Assert(machines[1].Series(), gc.Equals, "quantal") 71 c.Assert(machines[2].Series(), gc.Equals, "quantal") 72 } 73 74 func (s *clientSuite) TestClientEnableHA(c *gc.C) { 75 assertEnableHA(c, &s.JujuConnSuite) 76 } 77 78 func (s *clientSuite) TestClientEnableHAVersion(c *gc.C) { 79 client := highavailability.NewClient(s.APIState) 80 c.Assert(client.BestAPIVersion(), gc.Equals, 2) 81 }