github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/cmd/jujud/agent/caasoperator/manifolds_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasoperator_test 5 6 import ( 7 "github.com/juju/collections/set" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/agent" 12 "github.com/juju/juju/cmd/jujud/agent/agenttest" 13 "github.com/juju/juju/cmd/jujud/agent/caasoperator" 14 "github.com/juju/juju/testing" 15 ) 16 17 type ManifoldsSuite struct { 18 testing.BaseSuite 19 } 20 21 var _ = gc.Suite(&ManifoldsSuite{}) 22 23 func (s *ManifoldsSuite) TestStartFuncs(c *gc.C) { 24 manifolds := caasoperator.Manifolds(caasoperator.ManifoldsConfig{ 25 Agent: fakeAgent{}, 26 }) 27 28 for name, manifold := range manifolds { 29 c.Logf("checking %q manifold", name) 30 c.Check(manifold.Start, gc.NotNil) 31 } 32 } 33 34 func (s *ManifoldsSuite) TestManifoldNames(c *gc.C) { 35 config := caasoperator.ManifoldsConfig{} 36 manifolds := caasoperator.Manifolds(config) 37 expectedKeys := []string{ 38 "agent", 39 "api-address-updater", 40 "api-caller", 41 "api-config-watcher", 42 "charm-dir", 43 "clock", 44 "hook-retry-strategy", 45 "operator", 46 "logging-config-updater", 47 "log-sender", 48 "migration-fortress", 49 "migration-minion", 50 "migration-inactive-flag", 51 "proxy-config-updater", 52 "upgrade-steps-flag", 53 "upgrade-steps-gate", 54 "upgrade-steps-runner", 55 "upgrader", 56 "caas-units-manager", 57 "secret-drain-worker", 58 // TODO(caas) 59 //"metric-spool", 60 //"meter-status", 61 //"metric-collect", 62 //"metric-sender", 63 } 64 keys := make([]string, 0, len(manifolds)) 65 for k := range manifolds { 66 keys = append(keys, k) 67 } 68 c.Assert(keys, jc.SameContents, expectedKeys) 69 } 70 71 func (*ManifoldsSuite) TestMigrationGuards(c *gc.C) { 72 exempt := set.NewStrings( 73 "agent", 74 "clock", 75 "machine-lock", 76 "api-config-watcher", 77 "api-caller", 78 "log-sender", 79 "upgrader", 80 "migration-fortress", 81 "migration-minion", 82 "migration-inactive-flag", 83 "upgrade-steps-gate", 84 "upgrade-check-flag", 85 "upgrade-steps-runner", 86 "upgrade-steps-flag", 87 "upgrade-check-gate", 88 "caas-units-manager", 89 ) 90 config := caasoperator.ManifoldsConfig{} 91 manifolds := caasoperator.Manifolds(config) 92 for name, manifold := range manifolds { 93 c.Logf("%v [%v]", name, manifold.Inputs) 94 if !exempt.Contains(name) { 95 checkContains(c, manifold.Inputs, "migration-inactive-flag") 96 checkContains(c, manifold.Inputs, "migration-fortress") 97 } 98 } 99 } 100 101 func (s *ManifoldsSuite) TestManifoldsDependencies(c *gc.C) { 102 agenttest.AssertManifoldsDependencies(c, 103 caasoperator.Manifolds(caasoperator.ManifoldsConfig{ 104 Agent: fakeAgent{}, 105 }), 106 expectedOperatorManifoldsWithDependencies, 107 ) 108 } 109 110 func checkContains(c *gc.C, names []string, seek string) { 111 for _, name := range names { 112 if name == seek { 113 return 114 } 115 } 116 c.Errorf("%q not present in %v", seek, names) 117 } 118 119 type fakeAgent struct { 120 agent.Agent 121 } 122 123 var expectedOperatorManifoldsWithDependencies = map[string][]string{ 124 125 "agent": {}, 126 127 "api-address-updater": { 128 "agent", 129 "api-caller", 130 "api-config-watcher", 131 "migration-fortress", 132 "migration-inactive-flag", 133 "upgrade-steps-flag", 134 "upgrade-steps-gate"}, 135 136 "api-caller": {"agent", "api-config-watcher"}, 137 138 "api-config-watcher": {"agent"}, 139 140 "charm-dir": { 141 "agent", 142 "api-caller", 143 "api-config-watcher", 144 "migration-fortress", 145 "migration-inactive-flag", 146 "upgrade-steps-flag", 147 "upgrade-steps-gate"}, 148 149 "hook-retry-strategy": { 150 "agent", 151 "api-caller", 152 "api-config-watcher", 153 "migration-fortress", 154 "migration-inactive-flag", 155 "upgrade-steps-flag", 156 "upgrade-steps-gate"}, 157 158 "log-sender": {"agent", "api-caller", "api-config-watcher"}, 159 160 "logging-config-updater": { 161 "agent", 162 "api-caller", 163 "api-config-watcher", 164 "migration-fortress", 165 "migration-inactive-flag", 166 "upgrade-steps-flag", 167 "upgrade-steps-gate"}, 168 169 "migration-fortress": { 170 "upgrade-steps-flag", 171 "upgrade-steps-gate"}, 172 173 "migration-inactive-flag": { 174 "agent", 175 "api-caller", 176 "api-config-watcher"}, 177 178 "migration-minion": { 179 "agent", 180 "api-caller", 181 "api-config-watcher", 182 "migration-fortress", 183 "upgrade-steps-flag", 184 "upgrade-steps-gate"}, 185 186 "proxy-config-updater": { 187 "agent", 188 "api-caller", 189 "api-config-watcher", 190 "migration-fortress", 191 "migration-inactive-flag", 192 "upgrade-steps-flag", 193 "upgrade-steps-gate"}, 194 195 "upgrade-steps-flag": {"upgrade-steps-gate"}, 196 197 "upgrade-steps-gate": {}, 198 199 "upgrade-steps-runner": { 200 "agent", 201 "api-caller", 202 "api-config-watcher", 203 "upgrade-steps-gate", 204 }, 205 206 "upgrader": { 207 "agent", 208 "api-caller", 209 "api-config-watcher", 210 "upgrade-steps-gate", 211 }, 212 213 "clock": {}, 214 215 "operator": { 216 "agent", 217 "api-caller", 218 "api-config-watcher", 219 "charm-dir", 220 "clock", 221 "hook-retry-strategy", 222 "migration-fortress", 223 "migration-inactive-flag", 224 "upgrade-steps-flag", 225 "upgrade-steps-gate", 226 }, 227 "caas-units-manager": { 228 "agent", 229 "api-caller", 230 "api-config-watcher", 231 }, 232 "secret-drain-worker": { 233 "agent", 234 "api-caller", 235 "api-config-watcher", 236 "migration-fortress", 237 "migration-inactive-flag", 238 "upgrade-steps-flag", 239 "upgrade-steps-gate", 240 }, 241 }