~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/worker/worker_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}