github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/state/lease/store_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package lease_test
     5  
     6  import (
     7  	"time"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  	"gopkg.in/mgo.v2"
    12  
    13  	corelease "github.com/juju/juju/core/lease"
    14  	statelease "github.com/juju/juju/state/lease"
    15  )
    16  
    17  type StoreSuite struct {
    18  	FixtureSuite
    19  }
    20  
    21  var _ = gc.Suite(&StoreSuite{})
    22  
    23  func (s *StoreSuite) TestLookupLeaseNotThere(c *gc.C) {
    24  	db := NewMongo(s.db)
    25  	coll, closer := db.GetCollection(defaultCollection)
    26  	defer closer()
    27  	_, err := statelease.LookupLease(coll, defaultNamespace, "bar")
    28  	c.Assert(err, gc.Equals, mgo.ErrNotFound)
    29  }
    30  
    31  func (s *StoreSuite) TestLookupLease(c *gc.C) {
    32  	fix := s.EasyFixture(c)
    33  	err := fix.Store.ClaimLease(key("name"), corelease.Request{Holder: "holder", Duration: time.Minute})
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	db := NewMongo(s.db)
    36  	coll, closer := db.GetCollection(defaultCollection)
    37  	defer closer()
    38  	doc, err := statelease.LookupLease(coll, defaultNamespace, "name")
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	c.Check(doc.Name, gc.Equals, "name")
    41  	c.Check(doc.Holder, gc.Equals, "holder")
    42  	c.Check(doc.Namespace, gc.Equals, defaultNamespace)
    43  }
    44  
    45  func (s *StoreSuite) TestLeasesNoFilter(c *gc.C) {
    46  	fix := s.EasyFixture(c)
    47  
    48  	err := fix.Store.ClaimLease(key("duck"), corelease.Request{Holder: "donald", Duration: time.Minute})
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	err = fix.Store.ClaimLease(key("mouse"), corelease.Request{Holder: "mickey", Duration: time.Minute})
    51  	c.Assert(err, jc.ErrorIsNil)
    52  
    53  	leases := fix.Store.Leases()
    54  	c.Check(len(leases), gc.Equals, 2)
    55  	c.Check(leases[key("duck")].Holder, gc.Equals, "donald")
    56  	c.Check(leases[key("mouse")].Holder, gc.Equals, "mickey")
    57  }
    58  
    59  func (s *StoreSuite) TestLeasesFilter(c *gc.C) {
    60  	fix := s.EasyFixture(c)
    61  
    62  	err := fix.Store.ClaimLease(key("duck"), corelease.Request{Holder: "donald", Duration: time.Minute})
    63  	c.Assert(err, jc.ErrorIsNil)
    64  	err = fix.Store.ClaimLease(key("mouse"), corelease.Request{Holder: "mickey", Duration: time.Minute})
    65  	c.Assert(err, jc.ErrorIsNil)
    66  
    67  	// One key with an unheld lease, one with an invalid namespace, one with an invalid model.
    68  	leases := fix.Store.Leases(
    69  		key("dog"),
    70  		corelease.Key{Lease: "duck", ModelUUID: "model-uuid", Namespace: "nope"},
    71  		corelease.Key{Lease: "mouse", ModelUUID: "nope", Namespace: defaultNamespace},
    72  	)
    73  
    74  	c.Check(len(leases), gc.Equals, 0)
    75  }