github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/txnpruner/txnpruner_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package txnpruner_test 5 6 import ( 7 "time" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/testing" 13 "github.com/juju/juju/worker/txnpruner" 14 ) 15 16 type TxnPrunerSuite struct { 17 testing.BaseSuite 18 } 19 20 var _ = gc.Suite(&TxnPrunerSuite{}) 21 22 func (s *TxnPrunerSuite) TestPrunes(c *gc.C) { 23 fakePruner := newFakeTransactionPruner() 24 interval := 10 * time.Millisecond 25 p := txnpruner.New(fakePruner, interval) 26 defer p.Kill() 27 28 var t0 time.Time 29 for i := 0; i < 5; i++ { 30 select { 31 case <-fakePruner.pruneCh: 32 t1 := time.Now() 33 if i > 0 { 34 // Check that pruning runs at the expected interval 35 // (but not the first time around as we don't know 36 // when the worker actually started). 37 td := t1.Sub(t0) 38 c.Assert(td >= interval, jc.IsTrue, gc.Commentf("td=%s", td)) 39 } 40 t0 = t1 41 case <-time.After(testing.LongWait): 42 c.Fatal("timed out waiting for pruning to happen") 43 } 44 } 45 } 46 47 func (s *TxnPrunerSuite) TestStops(c *gc.C) { 48 success := make(chan bool) 49 check := func() { 50 p := txnpruner.New(newFakeTransactionPruner(), time.Minute) 51 p.Kill() 52 c.Assert(p.Wait(), jc.ErrorIsNil) 53 success <- true 54 } 55 go check() 56 57 select { 58 case <-success: 59 case <-time.After(testing.LongWait): 60 c.Fatal("timed out waiting for worker to stop") 61 } 62 } 63 64 func newFakeTransactionPruner() *fakeTransactionPruner { 65 return &fakeTransactionPruner{ 66 pruneCh: make(chan bool), 67 } 68 } 69 70 type fakeTransactionPruner struct { 71 pruneCh chan bool 72 } 73 74 // MaybePruneTransactions implements the txnpruner.TransactionPruner 75 // interface. 76 func (p *fakeTransactionPruner) MaybePruneTransactions() error { 77 p.pruneCh <- true 78 return nil 79 }