1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/testing"
8
jc "github.com/juju/testing/checkers"
9
"github.com/juju/utils/clock"
10
"github.com/juju/utils/set"
11
gc "gopkg.in/check.v1"
13
"github.com/juju/juju/cmd/jujud/agent/model"
14
"github.com/juju/juju/worker/workertest"
17
type ManifoldsSuite struct {
18
testing.IsolationSuite
21
var _ = gc.Suite(&ManifoldsSuite{})
23
func (s *ManifoldsSuite) TestNames(c *gc.C) {
24
actual := set.NewStrings()
25
manifolds := model.Manifolds(model.ManifoldsConfig{
28
for name := range manifolds {
31
// NOTE: if this test failed, the cmd/jujud/agent tests will
32
// also fail. Search for 'ModelWorkers' to find affected vars.
33
c.Check(actual.SortedValues(), jc.DeepEquals, []string{
38
"charm-revision-updater",
40
"compute-provisioner",
44
"is-responsible-flag",
47
"migration-inactive-flag",
52
"spaces-imported-gate",
54
"status-history-pruner",
55
"storage-provisioner",
61
func (s *ManifoldsSuite) TestFlagDependencies(c *gc.C) {
62
exclusions := set.NewStrings(
67
"spaces-imported-gate",
68
"is-responsible-flag",
72
manifolds := model.Manifolds(model.ManifoldsConfig{
75
for name, manifold := range manifolds {
76
c.Logf("checking %s", name)
77
if exclusions.Contains(name) {
80
inputs := set.NewStrings(manifold.Inputs...)
81
if !inputs.Contains("is-responsible-flag") {
82
c.Check(inputs.Contains("migration-fortress"), jc.IsTrue)
83
c.Check(inputs.Contains("migration-inactive-flag"), jc.IsTrue)
88
func (s *ManifoldsSuite) TestStateCleanerIgnoresLifeFlags(c *gc.C) {
89
manifolds := model.Manifolds(model.ManifoldsConfig{
92
manifold, found := manifolds["state-cleaner"]
93
c.Assert(found, jc.IsTrue)
95
inputs := set.NewStrings(manifold.Inputs...)
96
c.Check(inputs.Contains("not-alive-flag"), jc.IsFalse)
97
c.Check(inputs.Contains("not-dead-flag"), jc.IsFalse)
100
func (s *ManifoldsSuite) TestClockWrapper(c *gc.C) {
101
expectClock := &fakeClock{}
102
manifolds := model.Manifolds(model.ManifoldsConfig{
106
manifold, ok := manifolds["clock"]
107
c.Assert(ok, jc.IsTrue)
108
worker, err := manifold.Start(nil)
109
c.Assert(err, jc.ErrorIsNil)
110
defer workertest.CheckKill(c, worker)
112
var clock clock.Clock
113
err = manifold.Output(worker, &clock)
114
c.Assert(err, jc.ErrorIsNil)
115
c.Check(clock, gc.Equals, expectClock)
118
type fakeClock struct{ clock.Clock }