1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package charmrevisionmanifold_test
9
"github.com/juju/errors"
10
"github.com/juju/testing"
11
jc "github.com/juju/testing/checkers"
12
"github.com/juju/utils/clock"
13
gc "gopkg.in/check.v1"
15
"github.com/juju/juju/api/base"
16
"github.com/juju/juju/worker"
17
"github.com/juju/juju/worker/charmrevision"
18
"github.com/juju/juju/worker/charmrevision/charmrevisionmanifold"
19
"github.com/juju/juju/worker/dependency"
20
dt "github.com/juju/juju/worker/dependency/testing"
23
type ManifoldSuite struct {
24
testing.IsolationSuite
27
var _ = gc.Suite(&ManifoldSuite{})
29
func (s *ManifoldSuite) TestManifold(c *gc.C) {
30
manifold := charmrevisionmanifold.Manifold(charmrevisionmanifold.ManifoldConfig{
31
APICallerName: "billy",
35
c.Check(manifold.Inputs, jc.DeepEquals, []string{"billy", "bob"})
36
c.Check(manifold.Start, gc.NotNil)
37
c.Check(manifold.Output, gc.IsNil)
40
func (s *ManifoldSuite) TestMissingAPICaller(c *gc.C) {
41
manifold := charmrevisionmanifold.Manifold(charmrevisionmanifold.ManifoldConfig{
42
APICallerName: "api-caller",
46
_, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
47
"api-caller": dependency.ErrMissing,
50
c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
53
func (s *ManifoldSuite) TestMissingClock(c *gc.C) {
54
manifold := charmrevisionmanifold.Manifold(charmrevisionmanifold.ManifoldConfig{
55
APICallerName: "api-caller",
59
_, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
60
"api-caller": fakeAPICaller{},
61
"clock": dependency.ErrMissing,
63
c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
66
func (s *ManifoldSuite) TestNewFacadeError(c *gc.C) {
67
fakeAPICaller := &fakeAPICaller{}
69
stub := testing.Stub{}
70
manifold := charmrevisionmanifold.Manifold(charmrevisionmanifold.ManifoldConfig{
71
APICallerName: "api-caller",
73
NewFacade: func(apiCaller base.APICaller) (charmrevisionmanifold.Facade, error) {
74
stub.AddCall("NewFacade", apiCaller)
75
return nil, errors.New("blefgh")
79
_, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
80
"api-caller": fakeAPICaller,
83
c.Check(err, gc.ErrorMatches, "cannot create facade: blefgh")
84
stub.CheckCalls(c, []testing.StubCall{{
85
"NewFacade", []interface{}{fakeAPICaller},
89
func (s *ManifoldSuite) TestNewWorkerError(c *gc.C) {
90
fakeClock := &fakeClock{}
91
fakeFacade := &fakeFacade{}
92
fakeAPICaller := &fakeAPICaller{}
94
stub := testing.Stub{}
95
manifold := charmrevisionmanifold.Manifold(charmrevisionmanifold.ManifoldConfig{
96
APICallerName: "api-caller",
98
NewFacade: func(apiCaller base.APICaller) (charmrevisionmanifold.Facade, error) {
99
stub.AddCall("NewFacade", apiCaller)
100
return fakeFacade, nil
102
NewWorker: func(config charmrevision.Config) (worker.Worker, error) {
103
stub.AddCall("NewWorker", config)
104
return nil, errors.New("snrght")
108
_, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
109
"api-caller": fakeAPICaller,
112
c.Check(err, gc.ErrorMatches, "cannot create worker: snrght")
113
stub.CheckCalls(c, []testing.StubCall{{
114
"NewFacade", []interface{}{fakeAPICaller},
116
"NewWorker", []interface{}{charmrevision.Config{
117
RevisionUpdater: fakeFacade,
123
func (s *ManifoldSuite) TestSuccess(c *gc.C) {
124
fakeClock := &fakeClock{}
125
fakeFacade := &fakeFacade{}
126
fakeWorker := &fakeWorker{}
127
fakeAPICaller := &fakeAPICaller{}
129
stub := testing.Stub{}
130
manifold := charmrevisionmanifold.Manifold(charmrevisionmanifold.ManifoldConfig{
131
APICallerName: "api-caller",
133
Period: 10 * time.Minute,
134
NewFacade: func(apiCaller base.APICaller) (charmrevisionmanifold.Facade, error) {
135
stub.AddCall("NewFacade", apiCaller)
136
return fakeFacade, nil
138
NewWorker: func(config charmrevision.Config) (worker.Worker, error) {
139
stub.AddCall("NewWorker", config)
140
return fakeWorker, nil
144
w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
145
"api-caller": fakeAPICaller,
148
c.Check(w, gc.Equals, fakeWorker)
149
c.Check(err, jc.ErrorIsNil)
150
stub.CheckCalls(c, []testing.StubCall{{
151
"NewFacade", []interface{}{fakeAPICaller},
153
"NewWorker", []interface{}{charmrevision.Config{
154
Period: 10 * time.Minute,
155
RevisionUpdater: fakeFacade,
161
type fakeAPICaller struct {
165
type fakeClock struct {
169
type fakeWorker struct {
173
type fakeFacade struct {
174
charmrevisionmanifold.Facade