github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/state/lease/store_assert_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lease_test 5 6 import ( 7 "time" // Only used for time types. 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/mgo.v2/txn" 12 13 "github.com/juju/juju/core/lease" 14 ) 15 16 // StoreAssertSuite tests that AssertOp does what it should. 17 type StoreAssertSuite struct { 18 FixtureSuite 19 fix *Fixture 20 info lease.Info 21 } 22 23 var _ = gc.Suite(&StoreAssertSuite{}) 24 25 func key(name string) lease.Key { 26 return lease.Key{ 27 Namespace: "default-namespace", 28 ModelUUID: "model-uuid", 29 Lease: name, 30 } 31 } 32 33 func (s *StoreAssertSuite) SetUpTest(c *gc.C) { 34 s.FixtureSuite.SetUpTest(c) 35 s.fix = s.EasyFixture(c) 36 key := lease.Key{"default-namespace", "model-uuid", "name"} 37 err := s.fix.Store.ClaimLease(key, lease.Request{"holder", time.Minute}) 38 c.Assert(err, jc.ErrorIsNil) 39 c.Assert(key, s.fix.Holder(), "holder") 40 } 41 42 func (s *StoreAssertSuite) TestPassesWhenLeaseHeld(c *gc.C) { 43 info := s.fix.Store.Leases()[key("name")] 44 45 var ops []txn.Op 46 err := info.Trapdoor(0, &ops) 47 c.Check(err, jc.ErrorIsNil) 48 err = s.fix.Runner.RunTransaction(ops) 49 c.Check(err, jc.ErrorIsNil) 50 } 51 52 func (s *StoreAssertSuite) TestPassesWhenLeaseStillHeldDespiteWriterChange(c *gc.C) { 53 info := s.fix.Store.Leases()[key("name")] 54 55 fix2 := s.NewFixture(c, FixtureParams{Id: "other-store"}) 56 err := fix2.Store.ExtendLease(key("name"), lease.Request{"holder", time.Hour}) 57 c.Assert(err, jc.ErrorIsNil) 58 59 var ops []txn.Op 60 err = info.Trapdoor(0, &ops) 61 c.Check(err, jc.ErrorIsNil) 62 err = s.fix.Runner.RunTransaction(ops) 63 c.Check(err, gc.IsNil) 64 } 65 66 func (s *StoreAssertSuite) TestPassesWhenLeaseStillHeldDespitePassingExpiry(c *gc.C) { 67 info := s.fix.Store.Leases()[key("name")] 68 69 s.fix.GlobalClock.Advance(time.Hour) 70 err := s.fix.Store.Refresh() 71 c.Assert(err, jc.ErrorIsNil) 72 73 var ops []txn.Op 74 err = info.Trapdoor(0, &ops) 75 c.Check(err, jc.ErrorIsNil) 76 err = s.fix.Runner.RunTransaction(ops) 77 c.Check(err, gc.IsNil) 78 } 79 80 func (s *StoreAssertSuite) TestAbortsWhenLeaseVacant(c *gc.C) { 81 info := s.fix.Store.Leases()[key("name")] 82 83 s.fix.GlobalClock.Advance(time.Hour) 84 err := s.fix.Store.ExpireLease(key("name")) 85 c.Assert(err, jc.ErrorIsNil) 86 87 var ops []txn.Op 88 err = info.Trapdoor(0, &ops) 89 c.Check(err, jc.ErrorIsNil) 90 err = s.fix.Runner.RunTransaction(ops) 91 c.Check(err, gc.Equals, txn.ErrAborted) 92 }