github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/state/leadership/manager_validation_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package leadership_test
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/testing"
    10  	gc "gopkg.in/check.v1"
    11  	"gopkg.in/mgo.v2/txn"
    12  
    13  	"github.com/juju/juju/state/leadership"
    14  	"github.com/juju/juju/state/lease"
    15  	coretesting "github.com/juju/juju/testing"
    16  )
    17  
    18  type ValidationSuite struct {
    19  	testing.IsolationSuite
    20  }
    21  
    22  var _ = gc.Suite(&ValidationSuite{})
    23  
    24  func (s *ValidationSuite) TestMissingClient(c *gc.C) {
    25  	manager, err := leadership.NewManager(leadership.ManagerConfig{
    26  		Clock: coretesting.NewClock(time.Now()),
    27  	})
    28  	c.Check(err, gc.ErrorMatches, "missing client")
    29  	c.Check(manager, gc.IsNil)
    30  }
    31  
    32  func (s *ValidationSuite) TestMissingClock(c *gc.C) {
    33  	manager, err := leadership.NewManager(leadership.ManagerConfig{
    34  		Client: NewClient(nil, nil),
    35  	})
    36  	c.Check(err, gc.ErrorMatches, "missing clock")
    37  	c.Check(manager, gc.IsNil)
    38  }
    39  
    40  func (s *ValidationSuite) TestClaimLeadership_ServiceName(c *gc.C) {
    41  	fix := &Fixture{}
    42  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
    43  		err := manager.ClaimLeadership("foo/0", "bar/0", time.Minute)
    44  		c.Check(err, gc.ErrorMatches, `cannot claim leadership: invalid service name "foo/0"`)
    45  	})
    46  }
    47  
    48  func (s *ValidationSuite) TestClaimLeadership_UnitName(c *gc.C) {
    49  	fix := &Fixture{}
    50  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
    51  		err := manager.ClaimLeadership("foo", "bar", time.Minute)
    52  		c.Check(err, gc.ErrorMatches, `cannot claim leadership: invalid unit name "bar"`)
    53  	})
    54  }
    55  
    56  func (s *ValidationSuite) TestClaimLeadership_Duration(c *gc.C) {
    57  	fix := &Fixture{}
    58  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
    59  		err := manager.ClaimLeadership("foo", "bar/0", 0)
    60  		c.Check(err, gc.ErrorMatches, `cannot claim leadership: invalid duration 0`)
    61  	})
    62  }
    63  
    64  func (s *ValidationSuite) TestLeadershipCheck_ServiceName(c *gc.C) {
    65  	fix := &Fixture{}
    66  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
    67  		token := manager.LeadershipCheck("foo/0", "bar/0")
    68  		c.Check(token.Check(nil), gc.ErrorMatches, `cannot check leadership: invalid service name "foo/0"`)
    69  	})
    70  }
    71  
    72  func (s *ValidationSuite) TestLeadershipCheck_UnitName(c *gc.C) {
    73  	fix := &Fixture{}
    74  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
    75  		token := manager.LeadershipCheck("foo", "bar")
    76  		c.Check(token.Check(nil), gc.ErrorMatches, `cannot check leadership: invalid unit name "bar"`)
    77  	})
    78  }
    79  
    80  func (s *ValidationSuite) TestLeadershipCheck_OutPtr(c *gc.C) {
    81  	fix := &Fixture{
    82  		expectCalls: []call{{
    83  			method: "Refresh",
    84  			callback: func(leases map[string]lease.Info) {
    85  				leases["redis"] = lease.Info{
    86  					Holder:   "redis/0",
    87  					Expiry:   offset(time.Second),
    88  					AssertOp: txn.Op{C: "fake", Id: "fake"},
    89  				}
    90  			},
    91  		}},
    92  	}
    93  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
    94  		bad := "bad"
    95  		token := manager.LeadershipCheck("redis", "redis/0")
    96  		c.Check(token.Check(&bad), gc.ErrorMatches, `expected pointer to \[\]txn.Op`)
    97  	})
    98  }
    99  
   100  func (s *ValidationSuite) TestBlockUntilLeadershipReleased_ServiceName(c *gc.C) {
   101  	fix := &Fixture{}
   102  	fix.RunTest(c, func(manager leadership.ManagerWorker, _ *coretesting.Clock) {
   103  		err := manager.BlockUntilLeadershipReleased("foo/0")
   104  		c.Check(err, gc.ErrorMatches, `cannot wait for leaderlessness: invalid service name "foo/0"`)
   105  	})
   106  }