github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/lease/manager_revoke_test.go (about)

     1  // Copyright 2020 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package lease_test
     5  
     6  import (
     7  	"github.com/juju/clock/testclock"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	corelease "github.com/juju/juju/core/lease"
    14  	"github.com/juju/juju/worker/lease"
    15  )
    16  
    17  type RevokeSuite struct {
    18  	testing.IsolationSuite
    19  }
    20  
    21  var _ = gc.Suite(&RevokeSuite{})
    22  
    23  func (s *RevokeSuite) TestHolderSuccess(c *gc.C) {
    24  	fix := &Fixture{
    25  		expectCalls: []call{{
    26  			method: "RevokeLease",
    27  			args: []interface{}{
    28  				corelease.Key{
    29  					Namespace: "namespace",
    30  					ModelUUID: "modelUUID",
    31  					Lease:     "redis",
    32  				},
    33  				"redis/0",
    34  			},
    35  		}},
    36  		leases: map[corelease.Key]corelease.Info{
    37  			key("redis"): {
    38  				Holder: "redis/0",
    39  			},
    40  		},
    41  	}
    42  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    43  		err := getRevoker(c, manager).Revoke("redis", "redis/0")
    44  		c.Check(err, jc.ErrorIsNil)
    45  	})
    46  }
    47  
    48  func (s *RevokeSuite) TestOtherHolderError(c *gc.C) {
    49  	fix := &Fixture{
    50  		leases: map[corelease.Key]corelease.Info{
    51  			key("redis"): {
    52  				Holder: "redis/0",
    53  			},
    54  		},
    55  	}
    56  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    57  		err := getRevoker(c, manager).Revoke("redis", "redis/1")
    58  		c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
    59  	})
    60  }
    61  
    62  func (s *RevokeSuite) TestMissing(c *gc.C) {
    63  	fix := &Fixture{}
    64  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    65  		err := getRevoker(c, manager).Revoke("redis", "redis/0")
    66  		c.Check(err, jc.ErrorIsNil)
    67  	})
    68  }
    69  
    70  func getRevoker(c *gc.C, manager *lease.Manager) corelease.Revoker {
    71  	revoker, err := manager.Revoker("namespace", "modelUUID")
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	return revoker
    74  }