github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/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/clock/testclock"
    10  	"github.com/juju/errors"
    11  	"github.com/juju/testing"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	corelease "github.com/juju/juju/core/lease"
    16  	"github.com/juju/juju/worker/lease"
    17  )
    18  
    19  type TokenSuite struct {
    20  	testing.IsolationSuite
    21  }
    22  
    23  var _ = gc.Suite(&TokenSuite{})
    24  
    25  func (s *TokenSuite) TestSuccess(c *gc.C) {
    26  	fix := &Fixture{
    27  		leases: map[corelease.Key]corelease.Info{
    28  			key("redis"): {
    29  				Holder: "redis/0",
    30  				Expiry: offset(time.Second),
    31  			},
    32  		},
    33  	}
    34  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    35  		token := getChecker(c, manager).Token("redis", "redis/0")
    36  		err := token.Check()
    37  		c.Check(err, jc.ErrorIsNil)
    38  	})
    39  }
    40  
    41  func (s *TokenSuite) TestFailureMissing(c *gc.C) {
    42  	fix := &Fixture{}
    43  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    44  		token := getChecker(c, manager).Token("redis", "redis/0")
    45  		err := token.Check()
    46  		c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
    47  	})
    48  }
    49  
    50  func (s *TokenSuite) TestFailureOtherHolder(c *gc.C) {
    51  	fix := &Fixture{
    52  		leases: map[corelease.Key]corelease.Info{
    53  			key("redis"): {
    54  				Holder: "redis/99",
    55  				Expiry: offset(time.Second),
    56  			},
    57  		},
    58  	}
    59  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    60  		token := getChecker(c, manager).Token("redis", "redis/0")
    61  		err := token.Check()
    62  		c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
    63  	})
    64  }
    65  
    66  func getChecker(c *gc.C, manager *lease.Manager) corelease.Checker {
    67  	checker, err := manager.Checker("namespace", "modelUUID")
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	return checker
    70  }