github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/state/lease/client_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" 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/state/lease" 14 ) 15 16 // ClientAssertSuite tests that AssertOp does what it should. 17 type ClientAssertSuite struct { 18 FixtureSuite 19 fix *Fixture 20 info lease.Info 21 } 22 23 var _ = gc.Suite(&ClientAssertSuite{}) 24 25 func (s *ClientAssertSuite) SetUpTest(c *gc.C) { 26 s.FixtureSuite.SetUpTest(c) 27 s.fix = s.EasyFixture(c) 28 err := s.fix.Client.ClaimLease("name", lease.Request{"holder", time.Minute}) 29 c.Assert(err, jc.ErrorIsNil) 30 c.Assert("name", s.fix.Holder(), "holder") 31 } 32 33 func (s *ClientAssertSuite) TestPassesWhenLeaseHeld(c *gc.C) { 34 info := s.fix.Client.Leases()["name"] 35 36 ops := []txn.Op{info.AssertOp} 37 err := s.fix.Runner.RunTransaction(ops) 38 c.Check(err, jc.ErrorIsNil) 39 } 40 41 func (s *ClientAssertSuite) TestPassesWhenLeaseStillHeldDespiteWriterChange(c *gc.C) { 42 info := s.fix.Client.Leases()["name"] 43 44 fix2 := s.NewFixture(c, FixtureParams{Id: "other-client"}) 45 err := fix2.Client.ExtendLease("name", lease.Request{"holder", time.Hour}) 46 c.Assert(err, jc.ErrorIsNil) 47 48 ops := []txn.Op{info.AssertOp} 49 err = s.fix.Runner.RunTransaction(ops) 50 c.Check(err, gc.IsNil) 51 } 52 53 func (s *ClientAssertSuite) TestPassesWhenLeaseStillHeldDespitePassingExpiry(c *gc.C) { 54 info := s.fix.Client.Leases()["name"] 55 56 s.fix.Clock.Advance(time.Hour) 57 err := s.fix.Client.Refresh() 58 c.Assert(err, jc.ErrorIsNil) 59 60 ops := []txn.Op{info.AssertOp} 61 err = s.fix.Runner.RunTransaction(ops) 62 c.Check(err, gc.IsNil) 63 } 64 65 func (s *ClientAssertSuite) TestAbortsWhenLeaseVacant(c *gc.C) { 66 info := s.fix.Client.Leases()["name"] 67 68 s.fix.Clock.Advance(time.Hour) 69 err := s.fix.Client.ExpireLease("name") 70 c.Assert(err, jc.ErrorIsNil) 71 72 ops := []txn.Op{info.AssertOp} 73 err = s.fix.Runner.RunTransaction(ops) 74 c.Check(err, gc.Equals, txn.ErrAborted) 75 }