github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/lease/manager_pin_test.go (about) 1 // Copyright 2018 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/names/v5" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 corelease "github.com/juju/juju/core/lease" 15 "github.com/juju/juju/worker/lease" 16 ) 17 18 type PinSuite struct { 19 testing.IsolationSuite 20 21 appName string 22 machine string 23 pinArgs []interface{} 24 } 25 26 func (s *PinSuite) SetUpTest(c *gc.C) { 27 s.IsolationSuite.SetUpTest(c) 28 29 s.appName = "redis" 30 s.machine = names.NewMachineTag("0").String() 31 s.pinArgs = []interface{}{ 32 corelease.Key{ 33 Namespace: "namespace", 34 ModelUUID: "modelUUID", 35 Lease: s.appName, 36 }, 37 s.machine, 38 } 39 } 40 41 var _ = gc.Suite(&PinSuite{}) 42 43 func (s *PinSuite) TestPinLease_Success(c *gc.C) { 44 fix := &Fixture{ 45 expectCalls: []call{{ 46 method: "PinLease", 47 args: s.pinArgs, 48 }}, 49 } 50 fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) { 51 err := getPinner(c, manager).Pin(s.appName, s.machine) 52 c.Assert(err, jc.ErrorIsNil) 53 }) 54 } 55 56 func (s *PinSuite) TestPinLease_Error(c *gc.C) { 57 fix := &Fixture{ 58 expectCalls: []call{{ 59 method: "PinLease", 60 args: s.pinArgs, 61 err: errors.New("boom"), 62 }}, 63 } 64 fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) { 65 err := getPinner(c, manager).Pin(s.appName, s.machine) 66 c.Check(err, gc.ErrorMatches, "boom") 67 }) 68 } 69 70 func (s *PinSuite) TestUnpinLease_Success(c *gc.C) { 71 fix := &Fixture{ 72 expectCalls: []call{{ 73 method: "UnpinLease", 74 args: s.pinArgs, 75 }}, 76 } 77 fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) { 78 err := getPinner(c, manager).Unpin(s.appName, s.machine) 79 c.Assert(err, jc.ErrorIsNil) 80 }) 81 } 82 83 func (s *PinSuite) TestUnpinLease_Error(c *gc.C) { 84 fix := &Fixture{ 85 expectCalls: []call{{ 86 method: "UnpinLease", 87 args: s.pinArgs, 88 err: errors.New("boom"), 89 }}, 90 } 91 fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) { 92 err := getPinner(c, manager).Unpin(s.appName, s.machine) 93 c.Check(err, gc.ErrorMatches, "boom") 94 }) 95 } 96 97 func (s *PinSuite) TestPinned(c *gc.C) { 98 fix := &Fixture{ 99 expectCalls: []call{{ 100 method: "Pinned", 101 }}, 102 } 103 fix.RunTest(c, func(manager *lease.Manager, _ *testclock.Clock) { 104 pinned, err := getPinner(c, manager).Pinned() 105 c.Assert(err, jc.ErrorIsNil) 106 c.Check(pinned, gc.DeepEquals, map[string][]string{"redis": {s.machine}}) 107 }) 108 } 109 110 func getPinner(c *gc.C, manager *lease.Manager) corelease.Pinner { 111 pinner, err := manager.Pinner("namespace", "modelUUID") 112 c.Assert(err, jc.ErrorIsNil) 113 return pinner 114 }