github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/jujud/agent/model/manifolds_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package model_test 5 6 import ( 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" 12 13 "github.com/juju/juju/cmd/jujud/agent/model" 14 "github.com/juju/juju/worker/workertest" 15 ) 16 17 type ManifoldsSuite struct { 18 testing.IsolationSuite 19 } 20 21 var _ = gc.Suite(&ManifoldsSuite{}) 22 23 func (s *ManifoldsSuite) TestNames(c *gc.C) { 24 actual := set.NewStrings() 25 manifolds := model.Manifolds(model.ManifoldsConfig{ 26 Agent: &mockAgent{}, 27 }) 28 for name := range manifolds { 29 actual.Add(name) 30 } 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{ 34 "agent", 35 "api-caller", 36 "api-config-watcher", 37 "application-scaler", 38 "charm-revision-updater", 39 "clock", 40 "compute-provisioner", 41 "environ-tracker", 42 "firewaller", 43 "instance-poller", 44 "is-responsible-flag", 45 "machine-undertaker", 46 "metric-worker", 47 "migration-fortress", 48 "migration-inactive-flag", 49 "migration-master", 50 "not-alive-flag", 51 "not-dead-flag", 52 "space-importer", 53 "spaces-imported-gate", 54 "state-cleaner", 55 "status-history-pruner", 56 "storage-provisioner", 57 "undertaker", 58 "unit-assigner", 59 }) 60 } 61 62 func (s *ManifoldsSuite) TestFlagDependencies(c *gc.C) { 63 exclusions := set.NewStrings( 64 "agent", 65 "api-caller", 66 "api-config-watcher", 67 "clock", 68 "spaces-imported-gate", 69 "is-responsible-flag", 70 "not-alive-flag", 71 "not-dead-flag", 72 ) 73 manifolds := model.Manifolds(model.ManifoldsConfig{ 74 Agent: &mockAgent{}, 75 }) 76 for name, manifold := range manifolds { 77 c.Logf("checking %s", name) 78 if exclusions.Contains(name) { 79 continue 80 } 81 inputs := set.NewStrings(manifold.Inputs...) 82 if !inputs.Contains("is-responsible-flag") { 83 c.Check(inputs.Contains("migration-fortress"), jc.IsTrue) 84 c.Check(inputs.Contains("migration-inactive-flag"), jc.IsTrue) 85 } 86 } 87 } 88 89 func (s *ManifoldsSuite) TestStateCleanerIgnoresLifeFlags(c *gc.C) { 90 manifolds := model.Manifolds(model.ManifoldsConfig{ 91 Agent: &mockAgent{}, 92 }) 93 manifold, found := manifolds["state-cleaner"] 94 c.Assert(found, jc.IsTrue) 95 96 inputs := set.NewStrings(manifold.Inputs...) 97 c.Check(inputs.Contains("not-alive-flag"), jc.IsFalse) 98 c.Check(inputs.Contains("not-dead-flag"), jc.IsFalse) 99 } 100 101 func (s *ManifoldsSuite) TestClockWrapper(c *gc.C) { 102 expectClock := &fakeClock{} 103 manifolds := model.Manifolds(model.ManifoldsConfig{ 104 Agent: &mockAgent{}, 105 Clock: expectClock, 106 }) 107 manifold, ok := manifolds["clock"] 108 c.Assert(ok, jc.IsTrue) 109 worker, err := manifold.Start(nil) 110 c.Assert(err, jc.ErrorIsNil) 111 defer workertest.CheckKill(c, worker) 112 113 var clock clock.Clock 114 err = manifold.Output(worker, &clock) 115 c.Assert(err, jc.ErrorIsNil) 116 c.Check(clock, gc.Equals, expectClock) 117 } 118 119 type fakeClock struct{ clock.Clock }