~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/cmd/jujud/agent/engine/valueworker_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 engine_test
 
5
 
 
6
import (
 
7
        "github.com/juju/testing"
 
8
        jc "github.com/juju/testing/checkers"
 
9
        gc "gopkg.in/check.v1"
 
10
 
 
11
        "github.com/juju/juju/cmd/jujud/agent/engine"
 
12
        "github.com/juju/juju/worker"
 
13
)
 
14
 
 
15
type ValueWorkerSuite struct {
 
16
        testing.IsolationSuite
 
17
}
 
18
 
 
19
var _ = gc.Suite(&ValueWorkerSuite{})
 
20
 
 
21
func (s *ValueWorkerSuite) TestNewValueWorker_Success(c *gc.C) {
 
22
        w, err := engine.NewValueWorker("cheese")
 
23
        c.Assert(err, jc.ErrorIsNil)
 
24
 
 
25
        err = worker.Stop(w)
 
26
        c.Check(err, jc.ErrorIsNil)
 
27
}
 
28
 
 
29
func (s *ValueWorkerSuite) TestNewValueWorker_NilValue(c *gc.C) {
 
30
        w, err := engine.NewValueWorker(nil)
 
31
        c.Check(err, gc.ErrorMatches, "NewValueWorker expects a value")
 
32
        c.Check(w, gc.IsNil)
 
33
}
 
34
 
 
35
func (s *ValueWorkerSuite) TestValueWorkerOutput_Success(c *gc.C) {
 
36
        value := &testType{}
 
37
        w, err := engine.NewValueWorker(value)
 
38
        c.Assert(err, jc.ErrorIsNil)
 
39
 
 
40
        var outVal testInterface
 
41
        err = engine.ValueWorkerOutput(w, &outVal)
 
42
        c.Check(err, jc.ErrorIsNil)
 
43
        c.Check(outVal, gc.DeepEquals, value)
 
44
}
 
45
 
 
46
func (s *ValueWorkerSuite) TestValueWorkerOutput_BadInput(c *gc.C) {
 
47
        var outVal testInterface
 
48
        err := engine.ValueWorkerOutput(&testType{}, &outVal)
 
49
        c.Check(err, gc.ErrorMatches, "in should be a \\*valueWorker; is .*")
 
50
        c.Check(outVal, gc.IsNil)
 
51
}
 
52
 
 
53
func (s *ValueWorkerSuite) TestValueWorkerOutput_BadOutputIndirection(c *gc.C) {
 
54
        value := &testType{}
 
55
        w, err := engine.NewValueWorker(value)
 
56
        c.Assert(err, jc.ErrorIsNil)
 
57
 
 
58
        var outVal string
 
59
        err = engine.ValueWorkerOutput(w, outVal)
 
60
        c.Check(err, gc.ErrorMatches, "out should be a pointer; is .*")
 
61
        c.Check(outVal, gc.Equals, "")
 
62
}
 
63
 
 
64
func (s *ValueWorkerSuite) TestValueWorkerOutput_BadOutputType(c *gc.C) {
 
65
        value := &testType{}
 
66
        w, err := engine.NewValueWorker(value)
 
67
        c.Assert(err, jc.ErrorIsNil)
 
68
 
 
69
        var outVal string
 
70
        err = engine.ValueWorkerOutput(w, &outVal)
 
71
        c.Check(err, gc.ErrorMatches, "cannot output into \\*string")
 
72
        c.Check(outVal, gc.Equals, "")
 
73
}
 
74
 
 
75
type testInterface interface {
 
76
        worker.Worker
 
77
        Foobar()
 
78
}
 
79
 
 
80
type testType struct {
 
81
        testInterface
 
82
}