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

     1  // Copyright 2019 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package lease_test
     5  
     6  import (
     7  	"fmt"
     8  	"time"
     9  
    10  	"github.com/juju/clock/testclock"
    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 LeasesSuite struct {
    20  	testing.IsolationSuite
    21  
    22  	appName string
    23  }
    24  
    25  var _ = gc.Suite(&LeasesSuite{})
    26  
    27  func (s *LeasesSuite) SetUpTest(c *gc.C) {
    28  	s.IsolationSuite.SetUpTest(c)
    29  
    30  	s.appName = "redis"
    31  }
    32  
    33  func (s *LeasesSuite) TestLeases(c *gc.C) {
    34  	leases := map[corelease.Key]corelease.Info{
    35  		key(s.appName): {
    36  			Holder: "redis/0",
    37  			Expiry: offset(time.Second),
    38  		},
    39  	}
    40  	// Add enough leases for other models and namespaces to ensure
    41  	// that we would definitely fail if the Leases method does the
    42  	// wrong thing.
    43  	bad := corelease.Info{
    44  		Holder: "redis/1",
    45  		Expiry: offset(time.Second),
    46  	}
    47  	for i := 0; i < 100; i++ {
    48  		otherNS := fmt.Sprintf("ns%d", i)
    49  		leases[key(otherNS, "modelUUID", s.appName)] = bad
    50  		otherModel := fmt.Sprintf("model%d", i)
    51  		leases[key("namespace", otherModel, s.appName)] = bad
    52  	}
    53  
    54  	fix := &Fixture{leases: leases}
    55  	fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) {
    56  		leases, err := getReader(c, manager).Leases()
    57  		c.Assert(err, jc.ErrorIsNil)
    58  		c.Check(leases, gc.DeepEquals, map[string]string{s.appName: "redis/0"})
    59  	})
    60  }
    61  
    62  func getReader(c *gc.C, manager *lease.Manager) corelease.Reader {
    63  	reader, err := manager.Reader("namespace", "modelUUID")
    64  	c.Assert(err, jc.ErrorIsNil)
    65  	return reader
    66  }