github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/state/singular_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package state_test 5 6 import ( 7 "time" 8 9 jujutesting "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/core/lease" 14 coretesting "github.com/juju/juju/testing" 15 ) 16 17 type SingularSuite struct { 18 ConnSuite 19 clock *jujutesting.Clock 20 } 21 22 var _ = gc.Suite(&SingularSuite{}) 23 24 func (s *SingularSuite) SetUpTest(c *gc.C) { 25 s.ConnSuite.SetUpTest(c) 26 s.clock = jujutesting.NewClock(time.Now()) 27 err := s.State.SetClockForTesting(s.clock) 28 c.Assert(err, jc.ErrorIsNil) 29 } 30 31 func (s *SingularSuite) TestClaimBadLease(c *gc.C) { 32 claimer := s.State.SingularClaimer() 33 err := claimer.Claim("xxx", "machine-123", time.Minute) 34 c.Check(err, gc.ErrorMatches, `cannot claim lease "xxx": expected environ UUID`) 35 } 36 37 func (s *SingularSuite) TestClaimBadHolder(c *gc.C) { 38 claimer := s.State.SingularClaimer() 39 err := claimer.Claim(s.modelTag.Id(), "unit-foo-1", time.Minute) 40 c.Check(err, gc.ErrorMatches, `cannot claim lease for holder "unit-foo-1": expected machine tag`) 41 } 42 43 func (s *SingularSuite) TestClaimBadDuration(c *gc.C) { 44 claimer := s.State.SingularClaimer() 45 err := claimer.Claim(s.modelTag.Id(), "machine-123", 0) 46 c.Check(err, gc.ErrorMatches, `cannot claim lease for 0s?: non-positive`) 47 } 48 49 func (s *SingularSuite) TestClaim(c *gc.C) { 50 claimer := s.State.SingularClaimer() 51 err := claimer.Claim(s.modelTag.Id(), "machine-123", time.Minute) 52 c.Assert(err, jc.ErrorIsNil) 53 54 err = claimer.Claim(s.modelTag.Id(), "machine-123", time.Minute) 55 c.Assert(err, jc.ErrorIsNil) 56 57 err = claimer.Claim(s.modelTag.Id(), "machine-456", time.Minute) 58 c.Assert(err, gc.Equals, lease.ErrClaimDenied) 59 } 60 61 func (s *SingularSuite) TestExpire(c *gc.C) { 62 claimer := s.State.SingularClaimer() 63 err := claimer.Claim(s.modelTag.Id(), "machine-123", time.Minute) 64 c.Assert(err, jc.ErrorIsNil) 65 66 wait := make(chan error) 67 go func() { 68 wait <- claimer.WaitUntilExpired(s.modelTag.Id()) 69 }() 70 select { 71 case err := <-wait: 72 c.Fatalf("expired early with %v", err) 73 case <-time.After(coretesting.ShortWait): 74 } 75 76 s.clock.Advance(time.Hour) 77 select { 78 case err := <-wait: 79 c.Check(err, jc.ErrorIsNil) 80 case <-time.After(coretesting.LongWait): 81 c.Fatalf("never expired") 82 } 83 84 err = claimer.Claim(s.modelTag.Id(), "machine-456", time.Minute) 85 c.Assert(err, jc.ErrorIsNil) 86 }