github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/singular/flag_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package singular_test 5 6 import ( 7 "time" 8 9 "github.com/juju/clock/testclock" 10 "github.com/juju/errors" 11 "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 "gopkg.in/juju/worker.v1/workertest" 15 16 "github.com/juju/juju/worker/singular" 17 ) 18 19 type FlagSuite struct { 20 testing.IsolationSuite 21 } 22 23 var _ = gc.Suite(&FlagSuite{}) 24 25 func (s *FlagSuite) TestClaimError(c *gc.C) { 26 var stub testing.Stub 27 stub.SetErrors(errors.New("squish")) 28 29 worker, err := singular.NewFlagWorker(singular.FlagConfig{ 30 Facade: newStubFacade(&stub), 31 Clock: &fakeClock{}, 32 Duration: time.Hour, 33 }) 34 c.Check(worker, gc.IsNil) 35 c.Check(err, gc.ErrorMatches, "squish") 36 } 37 38 func (s *FlagSuite) TestClaimFailure(c *gc.C) { 39 fix := newFixture(c, errClaimDenied, nil) 40 fix.Run(c, func(flag *singular.FlagWorker, _ *testclock.Clock, _ func()) { 41 c.Check(flag.Check(), jc.IsFalse) 42 workertest.CheckAlive(c, flag) 43 }) 44 fix.CheckClaimWait(c) 45 } 46 47 func (s *FlagSuite) TestClaimFailureWaitError(c *gc.C) { 48 fix := newFixture(c, errClaimDenied, errors.New("glug")) 49 fix.Run(c, func(flag *singular.FlagWorker, _ *testclock.Clock, unblock func()) { 50 c.Check(flag.Check(), jc.IsFalse) 51 unblock() 52 err := workertest.CheckKilled(c, flag) 53 c.Check(err, gc.ErrorMatches, "glug") 54 }) 55 fix.CheckClaimWait(c) 56 } 57 58 func (s *FlagSuite) TestClaimFailureWaitSuccess(c *gc.C) { 59 fix := newFixture(c, errClaimDenied, nil) 60 fix.Run(c, func(flag *singular.FlagWorker, _ *testclock.Clock, unblock func()) { 61 c.Check(flag.Check(), jc.IsFalse) 62 unblock() 63 err := workertest.CheckKilled(c, flag) 64 c.Check(errors.Cause(err), gc.Equals, singular.ErrRefresh) 65 }) 66 fix.CheckClaimWait(c) 67 } 68 69 func (s *FlagSuite) TestClaimSuccess(c *gc.C) { 70 fix := newFixture(c, nil, errors.New("should not happen")) 71 fix.Run(c, func(flag *singular.FlagWorker, clock *testclock.Clock, unblock func()) { 72 <-clock.Alarms() 73 clock.Advance(29 * time.Second) 74 workertest.CheckAlive(c, flag) 75 }) 76 fix.CheckClaims(c, 1) 77 } 78 79 func (s *FlagSuite) TestClaimSuccessThenFailure(c *gc.C) { 80 fix := newFixture(c, nil, errClaimDenied) 81 fix.Run(c, func(flag *singular.FlagWorker, clock *testclock.Clock, unblock func()) { 82 <-clock.Alarms() 83 clock.Advance(30 * time.Second) 84 err := workertest.CheckKilled(c, flag) 85 c.Check(errors.Cause(err), gc.Equals, singular.ErrRefresh) 86 }) 87 fix.CheckClaims(c, 2) 88 } 89 90 func (s *FlagSuite) TestClaimSuccessesThenError(c *gc.C) { 91 fix := newFixture(c) 92 fix.Run(c, func(flag *singular.FlagWorker, clock *testclock.Clock, unblock func()) { 93 <-clock.Alarms() 94 clock.Advance(time.Minute) 95 <-clock.Alarms() 96 clock.Advance(time.Minute) 97 workertest.CheckAlive(c, flag) 98 }) 99 fix.CheckClaims(c, 3) 100 }