1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"github.com/juju/errors"
10
"github.com/juju/testing"
11
jc "github.com/juju/testing/checkers"
12
gc "gopkg.in/check.v1"
14
corelease "github.com/juju/juju/core/lease"
15
coretesting "github.com/juju/juju/testing"
16
"github.com/juju/juju/worker/lease"
19
type TokenSuite struct {
20
testing.IsolationSuite
23
var _ = gc.Suite(&TokenSuite{})
25
func (s *TokenSuite) TestSuccess(c *gc.C) {
27
leases: map[string]corelease.Info{
28
"redis": corelease.Info{
30
Expiry: offset(time.Second),
31
Trapdoor: corelease.LockedTrapdoor,
35
fix.RunTest(c, func(manager *lease.Manager, _ *coretesting.Clock) {
36
token := manager.Token("redis", "redis/0")
37
err := token.Check(nil)
38
c.Check(err, jc.ErrorIsNil)
42
func (s *TokenSuite) TestMissingRefresh_Success(c *gc.C) {
46
callback: func(leases map[string]corelease.Info) {
47
leases["redis"] = corelease.Info{
49
Expiry: offset(time.Second),
50
Trapdoor: corelease.LockedTrapdoor,
55
fix.RunTest(c, func(manager *lease.Manager, _ *coretesting.Clock) {
56
token := manager.Token("redis", "redis/0")
57
err := token.Check(nil)
58
c.Check(err, jc.ErrorIsNil)
62
func (s *TokenSuite) TestOtherHolderRefresh_Success(c *gc.C) {
66
callback: func(leases map[string]corelease.Info) {
67
leases["redis"] = corelease.Info{
69
Expiry: offset(time.Second),
70
Trapdoor: corelease.LockedTrapdoor,
75
fix.RunTest(c, func(manager *lease.Manager, _ *coretesting.Clock) {
76
token := manager.Token("redis", "redis/0")
77
err := token.Check(nil)
78
c.Check(err, jc.ErrorIsNil)
82
func (s *TokenSuite) TestRefresh_Failure_Missing(c *gc.C) {
88
fix.RunTest(c, func(manager *lease.Manager, _ *coretesting.Clock) {
89
token := manager.Token("redis", "redis/0")
90
err := token.Check(nil)
91
c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
95
func (s *TokenSuite) TestRefresh_Failure_OtherHolder(c *gc.C) {
99
callback: func(leases map[string]corelease.Info) {
100
leases["redis"] = corelease.Info{
102
Expiry: offset(time.Second),
103
Trapdoor: corelease.LockedTrapdoor,
108
fix.RunTest(c, func(manager *lease.Manager, _ *coretesting.Clock) {
109
token := manager.Token("redis", "redis/0")
110
err := token.Check(nil)
111
c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
115
func (s *TokenSuite) TestRefresh_Error(c *gc.C) {
117
expectCalls: []call{{
119
err: errors.New("crunch squish"),
123
fix.RunTest(c, func(manager *lease.Manager, _ *coretesting.Clock) {
124
token := manager.Token("redis", "redis/0")
125
c.Check(token.Check(nil), gc.ErrorMatches, "lease manager stopped")
126
err := manager.Wait()
127
c.Check(err, gc.ErrorMatches, "crunch squish")