github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/lease/manager_check_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lease_test 5 6 import ( 7 "time" 8 9 "github.com/juju/errors" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 corelease "github.com/juju/juju/core/lease" 15 "github.com/juju/juju/worker/lease" 16 ) 17 18 type TokenSuite struct { 19 testing.IsolationSuite 20 } 21 22 var _ = gc.Suite(&TokenSuite{}) 23 24 func (s *TokenSuite) TestSuccess(c *gc.C) { 25 fix := &Fixture{ 26 leases: map[string]corelease.Info{ 27 "redis": corelease.Info{ 28 Holder: "redis/0", 29 Expiry: offset(time.Second), 30 Trapdoor: corelease.LockedTrapdoor, 31 }, 32 }, 33 } 34 fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) { 35 token := manager.Token("redis", "redis/0") 36 err := token.Check(nil) 37 c.Check(err, jc.ErrorIsNil) 38 }) 39 } 40 41 func (s *TokenSuite) TestMissingRefresh_Success(c *gc.C) { 42 fix := &Fixture{ 43 expectCalls: []call{{ 44 method: "Refresh", 45 callback: func(leases map[string]corelease.Info) { 46 leases["redis"] = corelease.Info{ 47 Holder: "redis/0", 48 Expiry: offset(time.Second), 49 Trapdoor: corelease.LockedTrapdoor, 50 } 51 }, 52 }}, 53 } 54 fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) { 55 token := manager.Token("redis", "redis/0") 56 err := token.Check(nil) 57 c.Check(err, jc.ErrorIsNil) 58 }) 59 } 60 61 func (s *TokenSuite) TestOtherHolderRefresh_Success(c *gc.C) { 62 fix := &Fixture{ 63 expectCalls: []call{{ 64 method: "Refresh", 65 callback: func(leases map[string]corelease.Info) { 66 leases["redis"] = corelease.Info{ 67 Holder: "redis/0", 68 Expiry: offset(time.Second), 69 Trapdoor: corelease.LockedTrapdoor, 70 } 71 }, 72 }}, 73 } 74 fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) { 75 token := manager.Token("redis", "redis/0") 76 err := token.Check(nil) 77 c.Check(err, jc.ErrorIsNil) 78 }) 79 } 80 81 func (s *TokenSuite) TestRefresh_Failure_Missing(c *gc.C) { 82 fix := &Fixture{ 83 expectCalls: []call{{ 84 method: "Refresh", 85 }}, 86 } 87 fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) { 88 token := manager.Token("redis", "redis/0") 89 err := token.Check(nil) 90 c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld) 91 }) 92 } 93 94 func (s *TokenSuite) TestRefresh_Failure_OtherHolder(c *gc.C) { 95 fix := &Fixture{ 96 expectCalls: []call{{ 97 method: "Refresh", 98 callback: func(leases map[string]corelease.Info) { 99 leases["redis"] = corelease.Info{ 100 Holder: "redis/1", 101 Expiry: offset(time.Second), 102 Trapdoor: corelease.LockedTrapdoor, 103 } 104 }, 105 }}, 106 } 107 fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) { 108 token := manager.Token("redis", "redis/0") 109 err := token.Check(nil) 110 c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld) 111 }) 112 } 113 114 func (s *TokenSuite) TestRefresh_Error(c *gc.C) { 115 fix := &Fixture{ 116 expectCalls: []call{{ 117 method: "Refresh", 118 err: errors.New("crunch squish"), 119 }}, 120 expectDirty: true, 121 } 122 fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) { 123 token := manager.Token("redis", "redis/0") 124 c.Check(token.Check(nil), gc.ErrorMatches, "lease manager stopped") 125 err := manager.Wait() 126 c.Check(err, gc.ErrorMatches, "crunch squish") 127 }) 128 }