~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/worker/metrics/sender/manifold_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 sender_test
 
5
 
 
6
import (
 
7
        "net/url"
 
8
        "os"
 
9
        "path/filepath"
 
10
 
 
11
        "github.com/juju/testing"
 
12
        jc "github.com/juju/testing/checkers"
 
13
        gc "gopkg.in/check.v1"
 
14
        "gopkg.in/juju/names.v2"
 
15
 
 
16
        "github.com/juju/httprequest"
 
17
        "github.com/juju/juju/agent"
 
18
        "github.com/juju/juju/api/base"
 
19
        "github.com/juju/juju/api/metricsadder"
 
20
        "github.com/juju/juju/worker"
 
21
        "github.com/juju/juju/worker/dependency"
 
22
        dt "github.com/juju/juju/worker/dependency/testing"
 
23
        "github.com/juju/juju/worker/metrics/sender"
 
24
        "github.com/juju/juju/worker/metrics/spool"
 
25
)
 
26
 
 
27
type ManifoldSuite struct {
 
28
        testing.IsolationSuite
 
29
        factory   spool.MetricFactory
 
30
        client    metricsadder.MetricsAdderClient
 
31
        manifold  dependency.Manifold
 
32
        resources dt.StubResources
 
33
}
 
34
 
 
35
var _ = gc.Suite(&ManifoldSuite{})
 
36
 
 
37
func (s *ManifoldSuite) SetUpTest(c *gc.C) {
 
38
        spoolDir := c.MkDir()
 
39
        s.IsolationSuite.SetUpTest(c)
 
40
        s.factory = &stubMetricFactory{
 
41
                &testing.Stub{},
 
42
                spoolDir,
 
43
        }
 
44
 
 
45
        testAPIClient := func(apiCaller base.APICaller) metricsadder.MetricsAdderClient {
 
46
                return newTestAPIMetricSender()
 
47
        }
 
48
        s.PatchValue(&sender.NewMetricAdderClient, testAPIClient)
 
49
 
 
50
        s.manifold = sender.Manifold(sender.ManifoldConfig{
 
51
                AgentName:       "agent",
 
52
                APICallerName:   "api-caller",
 
53
                MetricSpoolName: "metric-spool",
 
54
        })
 
55
 
 
56
        dataDir := c.MkDir()
 
57
        // create unit agent base dir so that hooks can run.
 
58
        err := os.MkdirAll(filepath.Join(dataDir, "agents", "unit-u-0"), 0777)
 
59
        c.Assert(err, jc.ErrorIsNil)
 
60
 
 
61
        s.resources = dt.StubResources{
 
62
                "agent":        dt.StubResource{Output: &dummyAgent{dataDir: dataDir}},
 
63
                "api-caller":   dt.StubResource{Output: &stubAPICaller{&testing.Stub{}}},
 
64
                "metric-spool": dt.StubResource{Output: s.factory},
 
65
        }
 
66
}
 
67
 
 
68
func (s *ManifoldSuite) TestInputs(c *gc.C) {
 
69
        c.Check(s.manifold.Inputs, jc.DeepEquals, []string{"agent", "api-caller", "metric-spool"})
 
70
}
 
71
 
 
72
func (s *ManifoldSuite) TestStartMissingAPICaller(c *gc.C) {
 
73
        context := dt.StubContext(nil, map[string]interface{}{
 
74
                "api-caller":   dependency.ErrMissing,
 
75
                "metric-spool": s.factory,
 
76
        })
 
77
        worker, err := s.manifold.Start(context)
 
78
        c.Check(worker, gc.IsNil)
 
79
        c.Check(err, gc.ErrorMatches, dependency.ErrMissing.Error())
 
80
}
 
81
 
 
82
func (s *ManifoldSuite) TestStartMissingAgent(c *gc.C) {
 
83
        context := dt.StubContext(nil, map[string]interface{}{
 
84
                "agent":        dependency.ErrMissing,
 
85
                "api-caller":   &stubAPICaller{&testing.Stub{}},
 
86
                "metric-spool": s.factory,
 
87
        })
 
88
        worker, err := s.manifold.Start(context)
 
89
        c.Check(worker, gc.IsNil)
 
90
        c.Check(err, gc.ErrorMatches, dependency.ErrMissing.Error())
 
91
}
 
92
 
 
93
func (s *ManifoldSuite) TestStartSuccess(c *gc.C) {
 
94
        s.setupWorkerTest(c)
 
95
}
 
96
 
 
97
func (s *ManifoldSuite) setupWorkerTest(c *gc.C) worker.Worker {
 
98
        worker, err := s.manifold.Start(s.resources.Context())
 
99
        c.Check(err, jc.ErrorIsNil)
 
100
        s.AddCleanup(func(c *gc.C) {
 
101
                worker.Kill()
 
102
                err := worker.Wait()
 
103
                c.Check(err, jc.ErrorIsNil)
 
104
        })
 
105
        return worker
 
106
}
 
107
 
 
108
var _ base.APICaller = (*stubAPICaller)(nil)
 
109
 
 
110
type stubAPICaller struct {
 
111
        *testing.Stub
 
112
}
 
113
 
 
114
func (s *stubAPICaller) APICall(objType string, version int, id, request string, params, response interface{}) error {
 
115
        s.MethodCall(s, "APICall", objType, version, id, request, params, response)
 
116
        return nil
 
117
}
 
118
 
 
119
func (s *stubAPICaller) BestFacadeVersion(facade string) int {
 
120
        s.MethodCall(s, "BestFacadeVersion", facade)
 
121
        return 42
 
122
}
 
123
 
 
124
func (s *stubAPICaller) ModelTag() (names.ModelTag, error) {
 
125
        s.MethodCall(s, "ModelTag")
 
126
        return names.NewModelTag("foobar"), nil
 
127
}
 
128
 
 
129
func (s *stubAPICaller) ConnectStream(string, url.Values) (base.Stream, error) {
 
130
        panic("should not be called")
 
131
}
 
132
 
 
133
func (s *stubAPICaller) HTTPClient() (*httprequest.Client, error) {
 
134
        panic("should not be called")
 
135
}
 
136
 
 
137
type dummyAgent struct {
 
138
        agent.Agent
 
139
        dataDir string
 
140
}
 
141
 
 
142
func (a dummyAgent) CurrentConfig() agent.Config {
 
143
        return &dummyAgentConfig{dataDir: a.dataDir}
 
144
}
 
145
 
 
146
type dummyAgentConfig struct {
 
147
        agent.Config
 
148
        dataDir string
 
149
}
 
150
 
 
151
// Tag implements agent.AgentConfig.
 
152
func (ac dummyAgentConfig) Tag() names.Tag {
 
153
        return names.NewUnitTag("u/0")
 
154
}
 
155
 
 
156
// DataDir implements agent.AgentConfig.
 
157
func (ac dummyAgentConfig) DataDir() string {
 
158
        return ac.dataDir
 
159
}