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  }