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 }