github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/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/apiserver/common"
    14  	"github.com/juju/juju/constraints"
    15  	jujutesting "github.com/juju/juju/juju/testing"
    16  	"github.com/juju/juju/state"
    17  	"github.com/juju/juju/state/presence"
    18  	coretesting "github.com/juju/juju/testing"
    19  )
    20  
    21  func TestAll(t *stdtesting.T) {
    22  	coretesting.MgoTestPackage(t)
    23  }
    24  
    25  type clientSuite struct {
    26  	jujutesting.JujuConnSuite
    27  }
    28  
    29  var _ = gc.Suite(&clientSuite{})
    30  
    31  type Killer interface {
    32  	Kill() error
    33  }
    34  
    35  func assertKill(c *gc.C, killer Killer) {
    36  	c.Assert(killer.Kill(), gc.IsNil)
    37  }
    38  
    39  func setAgentPresence(c *gc.C, s *jujutesting.JujuConnSuite, machineId string) *presence.Pinger {
    40  	m, err := s.BackingState.Machine(machineId)
    41  	c.Assert(err, jc.ErrorIsNil)
    42  	pinger, err := m.SetAgentPresence()
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	s.BackingState.StartSync()
    45  	err = m.WaitAgentPresence(coretesting.LongWait)
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	return pinger
    48  }
    49  
    50  func assertEnsureAvailability(c *gc.C, s *jujutesting.JujuConnSuite) {
    51  	_, err := s.State.AddMachine("quantal", state.JobManageEnviron)
    52  	c.Assert(err, jc.ErrorIsNil)
    53  	// We have to ensure the agents are alive, or EnsureAvailability will
    54  	// create more to replace them.
    55  	pingerA := setAgentPresence(c, s, "0")
    56  	defer assertKill(c, pingerA)
    57  
    58  	emptyCons := constraints.Value{}
    59  	client := highavailability.NewClient(s.APIState)
    60  	result, err := client.EnsureAvailability(3, emptyCons, "", nil)
    61  	c.Assert(err, jc.ErrorIsNil)
    62  
    63  	c.Assert(result.Maintained, gc.DeepEquals, []string{"machine-0"})
    64  	c.Assert(result.Added, gc.DeepEquals, []string{"machine-1", "machine-2"})
    65  	c.Assert(result.Removed, gc.HasLen, 0)
    66  
    67  	machines, err := s.State.AllMachines()
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	c.Assert(machines, gc.HasLen, 3)
    70  	c.Assert(machines[0].Series(), gc.Equals, "quantal")
    71  	c.Assert(machines[1].Series(), gc.Equals, "quantal")
    72  	c.Assert(machines[2].Series(), gc.Equals, "quantal")
    73  }
    74  
    75  func (s *clientSuite) TestClientEnsureAvailability(c *gc.C) {
    76  	assertEnsureAvailability(c, &s.JujuConnSuite)
    77  }
    78  
    79  func (s *clientSuite) TestClientEnsureAvailabilityVersion(c *gc.C) {
    80  	client := highavailability.NewClient(s.APIState)
    81  	c.Assert(client.BestAPIVersion(), gc.Equals, 1)
    82  }
    83  
    84  type clientLegacySuite struct {
    85  	jujutesting.JujuConnSuite
    86  }
    87  
    88  var _ = gc.Suite(&clientLegacySuite{})
    89  
    90  func (s *clientLegacySuite) SetUpTest(c *gc.C) {
    91  	common.Facades.Discard("HighAvailability", 1)
    92  	s.JujuConnSuite.SetUpTest(c)
    93  }
    94  
    95  func (s *clientLegacySuite) TestEnsureAvailabilityLegacy(c *gc.C) {
    96  	assertEnsureAvailability(c, &s.JujuConnSuite)
    97  }
    98  
    99  func (s *clientLegacySuite) TestEnsureAvailabilityLegacyRejectsPlacement(c *gc.C) {
   100  	client := highavailability.NewClient(s.APIState)
   101  	_, err := client.EnsureAvailability(3, constraints.Value{}, "", []string{"machine"})
   102  	c.Assert(err, gc.ErrorMatches, "placement directives not supported with this version of Juju")
   103  }