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 }