github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/worker_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package worker_test 5 6 import ( 7 "time" 8 9 "github.com/juju/errors" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 coretesting "github.com/juju/juju/testing" 15 "github.com/juju/juju/worker" 16 "github.com/juju/juju/worker/workertest" 17 ) 18 19 type WorkerSuite struct { 20 testing.IsolationSuite 21 } 22 23 var _ = gc.Suite(&WorkerSuite{}) 24 25 func (*WorkerSuite) TestStopReturnsNoError(c *gc.C) { 26 w := workertest.NewDeadWorker(nil) 27 28 err := worker.Stop(w) 29 c.Check(err, jc.ErrorIsNil) 30 } 31 32 func (*WorkerSuite) TestStopReturnsError(c *gc.C) { 33 w := workertest.NewDeadWorker(errors.New("pow")) 34 35 err := worker.Stop(w) 36 c.Check(err, gc.ErrorMatches, "pow") 37 } 38 39 func (*WorkerSuite) TestStopKills(c *gc.C) { 40 w := workertest.NewErrorWorker(nil) 41 defer workertest.CleanKill(c, w) 42 43 worker.Stop(w) 44 workertest.CheckKilled(c, w) 45 } 46 47 func (*WorkerSuite) TestStopWaits(c *gc.C) { 48 w := workertest.NewForeverWorker(nil) 49 defer workertest.CheckKilled(c, w) 50 defer w.ReallyKill() 51 52 done := make(chan struct{}) 53 go func() { 54 defer close(done) 55 worker.Stop(w) 56 }() 57 58 select { 59 case <-time.After(coretesting.ShortWait): 60 case <-done: 61 c.Fatalf("Stop returned early") 62 } 63 64 w.ReallyKill() 65 66 select { 67 case <-done: 68 case <-time.After(coretesting.LongWait): 69 c.Fatalf("Stop never returned") 70 } 71 } 72 73 func (*WorkerSuite) TestDeadAlready(c *gc.C) { 74 w := workertest.NewDeadWorker(nil) 75 76 select { 77 case _, ok := <-worker.Dead(w): 78 c.Check(ok, jc.IsFalse) 79 case <-time.After(coretesting.LongWait): 80 c.Fatalf("Dead never sent") 81 } 82 } 83 84 func (*WorkerSuite) TestDeadWaits(c *gc.C) { 85 w := workertest.NewErrorWorker(nil) 86 defer workertest.CleanKill(c, w) 87 88 dead := worker.Dead(w) 89 select { 90 case <-time.After(coretesting.ShortWait): 91 case _, ok := <-dead: 92 if !ok { 93 c.Fatalf("Dead closed early") 94 } else { 95 c.Fatalf("Dead sent unexpectedly") 96 } 97 } 98 99 w.Kill() 100 select { 101 case _, ok := <-dead: 102 c.Check(ok, jc.IsFalse) 103 case <-time.After(coretesting.LongWait): 104 c.Fatalf("Dead never closed") 105 } 106 }