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 }