github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/clock" 8 "github.com/juju/collections/set" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/worker.v1/workertest" 12 13 "github.com/juju/juju/cmd/jujud/agent/agenttest" 14 "github.com/juju/juju/cmd/jujud/agent/model" 15 "github.com/juju/juju/testing" 16 ) 17 18 type ManifoldsSuite struct { 19 testing.BaseSuite 20 } 21 22 var _ = gc.Suite(&ManifoldsSuite{}) 23 24 func (s *ManifoldsSuite) TestIAASNames(c *gc.C) { 25 actual := set.NewStrings() 26 manifolds := model.IAASManifolds(model.ManifoldsConfig{ 27 Agent: &mockAgent{}, 28 }) 29 for name := range manifolds { 30 actual.Add(name) 31 } 32 // NOTE: if this test failed, the cmd/jujud/agent tests will 33 // also fail. Search for 'ModelWorkers' to find affected vars. 34 c.Check(actual.SortedValues(), jc.DeepEquals, []string{ 35 "action-pruner", 36 "agent", 37 "api-caller", 38 "api-config-watcher", 39 "application-scaler", 40 "charm-revision-updater", 41 "clock", 42 "compute-provisioner", 43 "environ-tracker", 44 "firewaller", 45 "instance-poller", 46 "is-responsible-flag", 47 "log-forwarder", 48 "machine-undertaker", 49 "metric-worker", 50 "migration-fortress", 51 "migration-inactive-flag", 52 "migration-master", 53 "model-upgrade-gate", 54 "model-upgraded-flag", 55 "model-upgrader", 56 "not-alive-flag", 57 "not-dead-flag", 58 "remote-relations", 59 "state-cleaner", 60 "status-history-pruner", 61 "storage-provisioner", 62 "undertaker", 63 "unit-assigner", 64 "valid-credential-flag", 65 }) 66 } 67 68 func (s *ManifoldsSuite) TestCAASNames(c *gc.C) { 69 actual := set.NewStrings() 70 manifolds := model.CAASManifolds(model.ManifoldsConfig{ 71 Agent: &mockAgent{}, 72 }) 73 for name := range manifolds { 74 actual.Add(name) 75 } 76 // NOTE: if this test failed, the cmd/jujud/agent tests will 77 // also fail. Search for 'ModelWorkers' to find affected vars. 78 c.Check(actual.SortedValues(), jc.DeepEquals, []string{ 79 "action-pruner", 80 "agent", 81 "api-caller", 82 "api-config-watcher", 83 "caas-broker-tracker", 84 "caas-firewaller", 85 "caas-operator-provisioner", 86 "caas-storage-provisioner", 87 "caas-unit-provisioner", 88 "charm-revision-updater", 89 "clock", 90 "is-responsible-flag", 91 "log-forwarder", 92 "migration-fortress", 93 "migration-inactive-flag", 94 "migration-master", 95 "model-upgrade-gate", 96 "model-upgraded-flag", 97 "model-upgrader", 98 "not-alive-flag", 99 "not-dead-flag", 100 "remote-relations", 101 "state-cleaner", 102 "status-history-pruner", 103 "undertaker", 104 "valid-credential-flag", 105 }) 106 } 107 108 func (s *ManifoldsSuite) TestFlagDependencies(c *gc.C) { 109 exclusions := set.NewStrings( 110 "agent", 111 "api-caller", 112 "api-config-watcher", 113 "clock", 114 "is-responsible-flag", 115 "not-alive-flag", 116 "not-dead-flag", 117 // model upgrade manifolds are run on all 118 // controller agents, "responsible" or not. 119 "model-upgrade-gate", 120 "model-upgraded-flag", 121 "model-upgrader", 122 "valid-credential-flag", 123 ) 124 manifolds := model.IAASManifolds(model.ManifoldsConfig{ 125 Agent: &mockAgent{}, 126 }) 127 for name, manifold := range manifolds { 128 c.Logf("checking %s", name) 129 if exclusions.Contains(name) { 130 continue 131 } 132 inputs := set.NewStrings(manifold.Inputs...) 133 if !inputs.Contains("is-responsible-flag") { 134 c.Check(inputs.Contains("migration-fortress"), jc.IsTrue) 135 c.Check(inputs.Contains("migration-inactive-flag"), jc.IsTrue) 136 } 137 } 138 } 139 140 func (s *ManifoldsSuite) TestStateCleanerIgnoresLifeFlags(c *gc.C) { 141 manifolds := model.IAASManifolds(model.ManifoldsConfig{ 142 Agent: &mockAgent{}, 143 }) 144 manifold, found := manifolds["state-cleaner"] 145 c.Assert(found, jc.IsTrue) 146 147 inputs := set.NewStrings(manifold.Inputs...) 148 c.Check(inputs.Contains("not-alive-flag"), jc.IsFalse) 149 c.Check(inputs.Contains("not-dead-flag"), jc.IsFalse) 150 } 151 152 func (s *ManifoldsSuite) TestClockWrapper(c *gc.C) { 153 expectClock := &fakeClock{} 154 manifolds := model.IAASManifolds(model.ManifoldsConfig{ 155 Agent: &mockAgent{}, 156 Clock: expectClock, 157 }) 158 manifold, ok := manifolds["clock"] 159 c.Assert(ok, jc.IsTrue) 160 worker, err := manifold.Start(nil) 161 c.Assert(err, jc.ErrorIsNil) 162 defer workertest.CheckKill(c, worker) 163 164 var aClock clock.Clock 165 err = manifold.Output(worker, &aClock) 166 c.Assert(err, jc.ErrorIsNil) 167 c.Check(aClock, gc.Equals, expectClock) 168 } 169 170 type fakeClock struct{ clock.Clock } 171 172 func (s *ManifoldsSuite) TestIAASManifold(c *gc.C) { 173 agenttest.AssertManifoldsDependencies(c, 174 model.IAASManifolds(model.ManifoldsConfig{ 175 Agent: &mockAgent{}, 176 }), 177 expectedIAASModelManifoldsWithDependencies, 178 ) 179 } 180 181 func (s *ManifoldsSuite) TestCAASManifold(c *gc.C) { 182 agenttest.AssertManifoldsDependencies(c, 183 model.CAASManifolds(model.ManifoldsConfig{ 184 Agent: &mockAgent{}, 185 }), 186 expectedCAASModelManifoldsWithDependencies, 187 ) 188 } 189 190 var expectedCAASModelManifoldsWithDependencies = map[string][]string{ 191 "action-pruner": { 192 "agent", 193 "api-caller", 194 "clock", 195 "environ-tracker", 196 "is-responsible-flag", 197 "migration-fortress", 198 "migration-inactive-flag", 199 "model-upgrade-gate", 200 "model-upgraded-flag", 201 "not-dead-flag"}, 202 203 "agent": {}, 204 205 "api-caller": {"agent"}, 206 207 "api-config-watcher": {"agent"}, 208 209 "caas-broker-tracker": {"agent", "api-caller", "clock", "is-responsible-flag"}, 210 211 "caas-firewaller": { 212 "agent", 213 "api-caller", 214 "caas-broker-tracker", 215 "clock", 216 "is-responsible-flag", 217 "migration-fortress", 218 "migration-inactive-flag", 219 "model-upgrade-gate", 220 "model-upgraded-flag", 221 "not-dead-flag"}, 222 223 "caas-operator-provisioner": { 224 "agent", 225 "api-caller", 226 "caas-broker-tracker", 227 "clock", 228 "is-responsible-flag", 229 "migration-fortress", 230 "migration-inactive-flag", 231 "model-upgrade-gate", 232 "model-upgraded-flag", 233 "not-dead-flag"}, 234 235 "caas-storage-provisioner": { 236 "agent", 237 "api-caller", 238 "caas-broker-tracker", 239 "clock", 240 "is-responsible-flag", 241 "migration-fortress", 242 "migration-inactive-flag", 243 "model-upgrade-gate", 244 "model-upgraded-flag", 245 "not-dead-flag", 246 "valid-credential-flag"}, 247 248 "caas-unit-provisioner": { 249 "agent", 250 "api-caller", 251 "caas-broker-tracker", 252 "clock", 253 "is-responsible-flag", 254 "migration-fortress", 255 "migration-inactive-flag", 256 "model-upgrade-gate", 257 "model-upgraded-flag", 258 "not-dead-flag"}, 259 260 "charm-revision-updater": { 261 "agent", 262 "api-caller", 263 "clock", 264 "is-responsible-flag", 265 "migration-fortress", 266 "migration-inactive-flag", 267 "model-upgrade-gate", 268 "model-upgraded-flag", 269 "not-dead-flag"}, 270 271 "clock": {}, 272 273 "is-responsible-flag": {"agent", "api-caller", "clock"}, 274 275 "log-forwarder": { 276 "agent", 277 "api-caller", 278 "clock", 279 "is-responsible-flag", 280 "not-dead-flag"}, 281 282 "migration-fortress": { 283 "agent", 284 "api-caller", 285 "clock", 286 "is-responsible-flag", 287 "model-upgrade-gate", 288 "model-upgraded-flag", 289 "not-dead-flag"}, 290 291 "migration-inactive-flag": { 292 "agent", 293 "api-caller", 294 "clock", 295 "is-responsible-flag", 296 "model-upgrade-gate", 297 "model-upgraded-flag", 298 "not-dead-flag"}, 299 300 "migration-master": { 301 "agent", 302 "api-caller", 303 "clock", 304 "is-responsible-flag", 305 "migration-fortress", 306 "model-upgrade-gate", 307 "model-upgraded-flag", 308 "not-dead-flag"}, 309 310 "model-upgrade-gate": {}, 311 312 "model-upgraded-flag": {"model-upgrade-gate"}, 313 314 "model-upgrader": {"agent", "api-caller", "model-upgrade-gate"}, 315 316 "not-alive-flag": {"agent", "api-caller"}, 317 318 "not-dead-flag": {"agent", "api-caller"}, 319 320 "remote-relations": { 321 "agent", 322 "api-caller", 323 "clock", 324 "is-responsible-flag", 325 "migration-fortress", 326 "migration-inactive-flag", 327 "model-upgrade-gate", 328 "model-upgraded-flag", 329 "not-dead-flag"}, 330 331 "state-cleaner": { 332 "agent", 333 "api-caller", 334 "clock", 335 "is-responsible-flag", 336 "migration-fortress", 337 "migration-inactive-flag", 338 "model-upgrade-gate", 339 "model-upgraded-flag", 340 "not-dead-flag"}, 341 342 "status-history-pruner": { 343 "agent", 344 "api-caller", 345 "clock", 346 "environ-tracker", 347 "is-responsible-flag", 348 "migration-fortress", 349 "migration-inactive-flag", 350 "model-upgrade-gate", 351 "model-upgraded-flag", 352 "not-dead-flag"}, 353 354 "undertaker": { 355 "agent", 356 "api-caller", 357 "caas-broker-tracker", 358 "clock", 359 "is-responsible-flag", 360 "model-upgrade-gate", 361 "model-upgraded-flag", 362 "not-alive-flag", 363 "valid-credential-flag", 364 }, 365 366 "valid-credential-flag": {"agent", "api-caller"}, 367 } 368 369 var expectedIAASModelManifoldsWithDependencies = map[string][]string{ 370 371 "action-pruner": { 372 "agent", 373 "api-caller", 374 "clock", 375 "environ-tracker", 376 "is-responsible-flag", 377 "migration-fortress", 378 "migration-inactive-flag", 379 "model-upgrade-gate", 380 "model-upgraded-flag", 381 "not-dead-flag", 382 "valid-credential-flag", 383 }, 384 385 "agent": {}, 386 387 "api-caller": {"agent"}, 388 389 "api-config-watcher": {"agent"}, 390 391 "application-scaler": { 392 "agent", 393 "api-caller", 394 "clock", 395 "is-responsible-flag", 396 "migration-fortress", 397 "migration-inactive-flag", 398 "model-upgrade-gate", 399 "model-upgraded-flag", 400 "not-dead-flag"}, 401 402 "charm-revision-updater": { 403 "agent", 404 "api-caller", 405 "clock", 406 "is-responsible-flag", 407 "migration-fortress", 408 "migration-inactive-flag", 409 "model-upgrade-gate", 410 "model-upgraded-flag", 411 "not-dead-flag"}, 412 413 "clock": {}, 414 415 "compute-provisioner": { 416 "agent", 417 "api-caller", 418 "clock", 419 "environ-tracker", 420 "is-responsible-flag", 421 "migration-fortress", 422 "migration-inactive-flag", 423 "model-upgrade-gate", 424 "model-upgraded-flag", 425 "not-dead-flag", 426 "valid-credential-flag", 427 }, 428 429 "environ-tracker": { 430 "agent", 431 "api-caller", 432 "clock", 433 "is-responsible-flag", 434 "valid-credential-flag", 435 }, 436 437 "firewaller": { 438 "agent", 439 "api-caller", 440 "clock", 441 "environ-tracker", 442 "is-responsible-flag", 443 "migration-fortress", 444 "migration-inactive-flag", 445 "model-upgrade-gate", 446 "model-upgraded-flag", 447 "not-dead-flag", 448 "valid-credential-flag", 449 }, 450 451 "instance-poller": { 452 "agent", 453 "api-caller", 454 "clock", 455 "environ-tracker", 456 "is-responsible-flag", 457 "migration-fortress", 458 "migration-inactive-flag", 459 "model-upgrade-gate", 460 "model-upgraded-flag", 461 "not-dead-flag", 462 "valid-credential-flag", 463 }, 464 465 "is-responsible-flag": {"agent", "api-caller", "clock"}, 466 467 "log-forwarder": { 468 "agent", 469 "api-caller", 470 "clock", 471 "is-responsible-flag", 472 "not-dead-flag"}, 473 474 "machine-undertaker": { 475 "agent", 476 "api-caller", 477 "clock", 478 "environ-tracker", 479 "is-responsible-flag", 480 "migration-fortress", 481 "migration-inactive-flag", 482 "model-upgrade-gate", 483 "model-upgraded-flag", 484 "not-dead-flag", 485 "valid-credential-flag", 486 }, 487 488 "metric-worker": { 489 "agent", 490 "api-caller", 491 "clock", 492 "is-responsible-flag", 493 "migration-fortress", 494 "migration-inactive-flag", 495 "model-upgrade-gate", 496 "model-upgraded-flag", 497 "not-dead-flag"}, 498 499 "migration-fortress": { 500 "agent", 501 "api-caller", 502 "clock", 503 "is-responsible-flag", 504 "model-upgrade-gate", 505 "model-upgraded-flag", 506 "not-dead-flag"}, 507 508 "migration-inactive-flag": { 509 "agent", 510 "api-caller", 511 "clock", 512 "is-responsible-flag", 513 "model-upgrade-gate", 514 "model-upgraded-flag", 515 "not-dead-flag"}, 516 517 "migration-master": { 518 "agent", 519 "api-caller", 520 "clock", 521 "is-responsible-flag", 522 "migration-fortress", 523 "model-upgrade-gate", 524 "model-upgraded-flag", 525 "not-dead-flag"}, 526 527 "model-upgrade-gate": {}, 528 529 "model-upgraded-flag": {"model-upgrade-gate"}, 530 531 "model-upgrader": { 532 "agent", 533 "api-caller", 534 "clock", 535 "environ-tracker", 536 "is-responsible-flag", 537 "model-upgrade-gate", 538 "valid-credential-flag", 539 }, 540 541 "not-alive-flag": {"agent", "api-caller"}, 542 543 "not-dead-flag": {"agent", "api-caller"}, 544 545 "remote-relations": { 546 "agent", 547 "api-caller", 548 "clock", 549 "is-responsible-flag", 550 "migration-fortress", 551 "migration-inactive-flag", 552 "model-upgrade-gate", 553 "model-upgraded-flag", 554 "not-dead-flag"}, 555 556 "state-cleaner": { 557 "agent", 558 "api-caller", 559 "clock", 560 "is-responsible-flag", 561 "migration-fortress", 562 "migration-inactive-flag", 563 "model-upgrade-gate", 564 "model-upgraded-flag", 565 "not-dead-flag"}, 566 567 "status-history-pruner": { 568 "agent", 569 "api-caller", 570 "clock", 571 "environ-tracker", 572 "is-responsible-flag", 573 "migration-fortress", 574 "migration-inactive-flag", 575 "model-upgrade-gate", 576 "model-upgraded-flag", 577 "not-dead-flag", 578 "valid-credential-flag", 579 }, 580 581 "storage-provisioner": { 582 "agent", 583 "api-caller", 584 "clock", 585 "environ-tracker", 586 "is-responsible-flag", 587 "migration-fortress", 588 "migration-inactive-flag", 589 "model-upgrade-gate", 590 "model-upgraded-flag", 591 "not-dead-flag", 592 "valid-credential-flag", 593 }, 594 595 "undertaker": { 596 "agent", 597 "api-caller", 598 "clock", 599 "environ-tracker", 600 "is-responsible-flag", 601 "model-upgrade-gate", 602 "model-upgraded-flag", 603 "not-alive-flag", 604 "valid-credential-flag", 605 }, 606 607 "unit-assigner": { 608 "agent", 609 "api-caller", 610 "clock", 611 "is-responsible-flag", 612 "migration-fortress", 613 "migration-inactive-flag", 614 "model-upgrade-gate", 615 "model-upgraded-flag", 616 "not-dead-flag"}, 617 618 "valid-credential-flag": {"agent", "api-caller"}, 619 }