1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package toolsversionchecker_test
7
"github.com/juju/names"
8
"github.com/juju/testing"
9
jc "github.com/juju/testing/checkers"
10
gc "gopkg.in/check.v1"
12
"github.com/juju/juju/agent"
13
apitesting "github.com/juju/juju/api/base/testing"
14
"github.com/juju/juju/apiserver/params"
15
"github.com/juju/juju/state/multiwatcher"
16
"github.com/juju/juju/worker"
17
"github.com/juju/juju/worker/dependency"
18
workertesting "github.com/juju/juju/worker/testing"
19
"github.com/juju/juju/worker/toolsversionchecker"
22
type ManifoldSuite struct {
23
testing.IsolationSuite
27
var _ = gc.Suite(&ManifoldSuite{})
29
func (s *ManifoldSuite) SetUpTest(c *gc.C) {
31
s.PatchValue(&toolsversionchecker.New,
32
func(api toolsversionchecker.Facade, params *toolsversionchecker.VersionCheckerParams) worker.Worker {
39
func (s *ManifoldSuite) TestMachine(c *gc.C) {
40
config := toolsversionchecker.ManifoldConfig(workertesting.PostUpgradeManifoldTestConfig())
41
_, err := workertesting.RunPostUpgradeManifold(
42
toolsversionchecker.Manifold(config),
43
&fakeAgent{tag: names.NewMachineTag("42")},
44
mockAPICaller(multiwatcher.JobManageModel))
45
c.Assert(err, jc.ErrorIsNil)
46
c.Assert(s.newCalled, jc.IsTrue)
49
func (s *ManifoldSuite) TestMachineNotModelManagerErrors(c *gc.C) {
50
config := toolsversionchecker.ManifoldConfig(workertesting.PostUpgradeManifoldTestConfig())
51
_, err := workertesting.RunPostUpgradeManifold(
52
toolsversionchecker.Manifold(config),
53
&fakeAgent{tag: names.NewMachineTag("42")},
54
mockAPICaller(multiwatcher.JobHostUnits))
55
c.Assert(err, gc.Equals, dependency.ErrMissing)
56
c.Assert(s.newCalled, jc.IsFalse)
59
func (s *ManifoldSuite) TestNonMachineAgent(c *gc.C) {
60
config := toolsversionchecker.ManifoldConfig(workertesting.PostUpgradeManifoldTestConfig())
61
_, err := workertesting.RunPostUpgradeManifold(
62
toolsversionchecker.Manifold(config),
63
&fakeAgent{tag: names.NewUnitTag("foo/0")},
65
c.Assert(err, gc.ErrorMatches, "this manifold may only be used inside a machine agent")
66
c.Assert(s.newCalled, jc.IsFalse)
69
type fakeAgent struct {
74
func (a *fakeAgent) CurrentConfig() agent.Config {
75
return &fakeConfig{tag: a.tag}
78
type fakeConfig struct {
83
func (c *fakeConfig) Tag() names.Tag {
87
func mockAPICaller(job multiwatcher.MachineJob) apitesting.APICallerFunc {
88
return apitesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
89
if res, ok := result.(*params.AgentGetEntitiesResults); ok {
90
res.Entities = []params.AgentGetEntitiesResult{
91
{Jobs: []multiwatcher.MachineJob{