github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/jujud/agent/unit/manifolds_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package unit_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/unit" 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 := unit.Manifolds(unit.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 := unit.ManifoldsConfig{} 36 manifolds := unit.Manifolds(config) 37 expectedKeys := []string{ 38 "agent", 39 "api-config-watcher", 40 "api-caller", 41 "log-sender", 42 "upgrader", 43 "migration-fortress", 44 "migration-minion", 45 "migration-inactive-flag", 46 "logging-config-updater", 47 "proxy-config-updater", 48 "api-address-updater", 49 "charm-dir", 50 "leadership-tracker", 51 "hook-retry-strategy", 52 "uniter", 53 "metric-spool", 54 "meter-status", 55 "metric-collect", 56 "metric-sender", 57 "upgrade-steps-flag", 58 "upgrade-steps-runner", 59 "upgrade-steps-gate", 60 "upgrade-check-gate", 61 "upgrade-check-flag", 62 } 63 keys := make([]string, 0, len(manifolds)) 64 for k := range manifolds { 65 keys = append(keys, k) 66 } 67 c.Assert(expectedKeys, jc.SameContents, keys) 68 } 69 70 func (*ManifoldsSuite) TestMigrationGuards(c *gc.C) { 71 exempt := set.NewStrings( 72 "agent", 73 "machine-lock", 74 "api-config-watcher", 75 "api-caller", 76 "log-sender", 77 "upgrader", 78 "migration-fortress", 79 "migration-minion", 80 "migration-inactive-flag", 81 "upgrade-steps-gate", 82 "upgrade-check-flag", 83 "upgrade-steps-runner", 84 "upgrade-steps-flag", 85 "upgrade-check-gate", 86 ) 87 config := unit.ManifoldsConfig{} 88 manifolds := unit.Manifolds(config) 89 for name, manifold := range manifolds { 90 c.Logf("%v [%v]", name, manifold.Inputs) 91 if !exempt.Contains(name) { 92 checkContains(c, manifold.Inputs, "migration-inactive-flag") 93 checkContains(c, manifold.Inputs, "migration-fortress") 94 } 95 } 96 } 97 98 func (s *ManifoldsSuite) TestManifoldsDependencies(c *gc.C) { 99 agenttest.AssertManifoldsDependencies(c, 100 unit.Manifolds(unit.ManifoldsConfig{ 101 Agent: fakeAgent{}, 102 }), 103 expectedUnitManifoldsWithDependencies, 104 ) 105 } 106 107 func checkContains(c *gc.C, names []string, seek string) { 108 for _, name := range names { 109 if name == seek { 110 return 111 } 112 } 113 c.Errorf("%q not present in %v", seek, names) 114 } 115 116 type fakeAgent struct { 117 agent.Agent 118 } 119 120 var expectedUnitManifoldsWithDependencies = map[string][]string{ 121 122 "agent": {}, 123 124 "api-address-updater": { 125 "agent", 126 "api-caller", 127 "api-config-watcher", 128 "migration-fortress", 129 "migration-inactive-flag", 130 "upgrade-check-flag", 131 "upgrade-check-gate", 132 "upgrade-steps-flag", 133 "upgrade-steps-gate"}, 134 135 "api-caller": {"agent", "api-config-watcher"}, 136 137 "api-config-watcher": {"agent"}, 138 139 "charm-dir": { 140 "agent", 141 "api-caller", 142 "api-config-watcher", 143 "migration-fortress", 144 "migration-inactive-flag", 145 "upgrade-check-flag", 146 "upgrade-check-gate", 147 "upgrade-steps-flag", 148 "upgrade-steps-gate"}, 149 150 "hook-retry-strategy": { 151 "agent", 152 "api-caller", 153 "api-config-watcher", 154 "migration-fortress", 155 "migration-inactive-flag", 156 "upgrade-check-flag", 157 "upgrade-check-gate", 158 "upgrade-steps-flag", 159 "upgrade-steps-gate"}, 160 161 "leadership-tracker": { 162 "agent", 163 "api-caller", 164 "api-config-watcher", 165 "migration-fortress", 166 "migration-inactive-flag", 167 "upgrade-check-flag", 168 "upgrade-check-gate", 169 "upgrade-steps-flag", 170 "upgrade-steps-gate"}, 171 172 "log-sender": {"agent", "api-caller", "api-config-watcher"}, 173 174 "logging-config-updater": { 175 "agent", 176 "api-caller", 177 "api-config-watcher", 178 "migration-fortress", 179 "migration-inactive-flag", 180 "upgrade-check-flag", 181 "upgrade-check-gate", 182 "upgrade-steps-flag", 183 "upgrade-steps-gate"}, 184 185 "meter-status": { 186 "agent", 187 "api-caller", 188 "api-config-watcher", 189 "migration-fortress", 190 "migration-inactive-flag", 191 "upgrade-check-flag", 192 "upgrade-check-gate", 193 "upgrade-steps-flag", 194 "upgrade-steps-gate"}, 195 196 "metric-collect": { 197 "agent", 198 "api-caller", 199 "api-config-watcher", 200 "charm-dir", 201 "metric-spool", 202 "migration-fortress", 203 "migration-inactive-flag", 204 "upgrade-check-flag", 205 "upgrade-check-gate", 206 "upgrade-steps-flag", 207 "upgrade-steps-gate"}, 208 209 "metric-sender": { 210 "agent", 211 "api-caller", 212 "api-config-watcher", 213 "metric-spool", 214 "migration-fortress", 215 "migration-inactive-flag", 216 "upgrade-check-flag", 217 "upgrade-check-gate", 218 "upgrade-steps-flag", 219 "upgrade-steps-gate"}, 220 221 "metric-spool": { 222 "agent", 223 "api-caller", 224 "api-config-watcher", 225 "migration-fortress", 226 "migration-inactive-flag", 227 "upgrade-check-flag", 228 "upgrade-check-gate", 229 "upgrade-steps-flag", 230 "upgrade-steps-gate"}, 231 232 "migration-fortress": { 233 "upgrade-check-flag", 234 "upgrade-check-gate", 235 "upgrade-steps-flag", 236 "upgrade-steps-gate"}, 237 238 "migration-inactive-flag": { 239 "agent", 240 "api-caller", 241 "api-config-watcher"}, 242 243 "migration-minion": { 244 "agent", 245 "api-caller", 246 "api-config-watcher", 247 "migration-fortress", 248 "upgrade-check-flag", 249 "upgrade-check-gate", 250 "upgrade-steps-flag", 251 "upgrade-steps-gate"}, 252 253 "proxy-config-updater": { 254 "agent", 255 "api-caller", 256 "api-config-watcher", 257 "migration-fortress", 258 "migration-inactive-flag", 259 "upgrade-check-flag", 260 "upgrade-check-gate", 261 "upgrade-steps-flag", 262 "upgrade-steps-gate"}, 263 264 "uniter": { 265 "agent", 266 "api-caller", 267 "api-config-watcher", 268 "charm-dir", 269 "hook-retry-strategy", 270 "leadership-tracker", 271 "migration-fortress", 272 "migration-inactive-flag", 273 "upgrade-check-flag", 274 "upgrade-check-gate", 275 "upgrade-steps-flag", 276 "upgrade-steps-gate"}, 277 278 "upgrade-check-flag": {"upgrade-check-gate"}, 279 280 "upgrade-check-gate": {}, 281 282 "upgrade-steps-flag": {"upgrade-steps-gate"}, 283 284 "upgrade-steps-gate": {}, 285 286 "upgrade-steps-runner": { 287 "agent", 288 "api-caller", 289 "api-config-watcher", 290 "upgrade-steps-gate"}, 291 292 "upgrader": { 293 "agent", 294 "api-caller", 295 "api-config-watcher", 296 "upgrade-check-gate", 297 "upgrade-steps-gate"}, 298 }