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  }