github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/jujud/agent/engine_test.go (about) 1 // Copyright 2012-2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package agent 5 6 import ( 7 gc "gopkg.in/check.v1" 8 "gopkg.in/juju/worker.v1/dependency" 9 10 "github.com/juju/juju/cmd/jujud/agent/agenttest" 11 "github.com/juju/juju/cmd/jujud/agent/machine" 12 "github.com/juju/juju/cmd/jujud/agent/model" 13 "github.com/juju/juju/cmd/jujud/agent/unit" 14 coretesting "github.com/juju/juju/testing" 15 ) 16 17 var ( 18 // These vars hold the per-model workers we expect to run in 19 // various circumstances. Note the absence of worker lists for 20 // dying/dead states, because those states are not stable: if 21 // they're working correctly the engine will be shut down. 22 alwaysModelWorkers = []string{ 23 "agent", 24 "api-caller", 25 "api-config-watcher", 26 "clock", 27 "is-responsible-flag", 28 "model-upgrade-gate", 29 "model-upgraded-flag", 30 "not-alive-flag", 31 "not-dead-flag", 32 "valid-credential-flag", 33 } 34 requireValidCredentialModelWorkers = []string{ 35 "action-pruner", // tertiary dependency: will be inactive because migration workers will be inactive 36 "application-scaler", // tertiary dependency: will be inactive because migration workers will be inactive 37 "charm-revision-updater", // tertiary dependency: will be inactive because migration workers will be inactive 38 "compute-provisioner", 39 "environ-tracker", 40 "firewaller", 41 "instance-poller", 42 "machine-undertaker", // tertiary dependency: will be inactive because migration workers will be inactive 43 "metric-worker", // tertiary dependency: will be inactive because migration workers will be inactive 44 "migration-fortress", // secondary dependency: will be inactive because depends on model-upgrader 45 "migration-inactive-flag", // secondary dependency: will be inactive because depends on model-upgrader 46 "migration-master", // secondary dependency: will be inactive because depends on model-upgrader 47 "model-upgrader", 48 "remote-relations", // tertiary dependency: will be inactive because migration workers will be inactive 49 "state-cleaner", // tertiary dependency: will be inactive because migration workers will be inactive 50 "status-history-pruner", // tertiary dependency: will be inactive because migration workers will be inactive 51 "storage-provisioner", // tertiary dependency: will be inactive because migration workers will be inactive 52 "undertaker", 53 "unit-assigner", // tertiary dependency: will be inactive because migration workers will be inactive 54 } 55 aliveModelWorkers = []string{ 56 "action-pruner", 57 "application-scaler", 58 "charm-revision-updater", 59 "compute-provisioner", 60 "environ-tracker", 61 "firewaller", 62 "instance-poller", 63 "log-forwarder", 64 "machine-undertaker", 65 "metric-worker", 66 "migration-fortress", 67 "migration-inactive-flag", 68 "migration-master", 69 "remote-relations", 70 "state-cleaner", 71 "status-history-pruner", 72 "storage-provisioner", 73 "unit-assigner", 74 } 75 migratingModelWorkers = []string{ 76 "environ-tracker", 77 "migration-fortress", 78 "migration-inactive-flag", 79 "migration-master", 80 "model-upgrade-gate", 81 "model-upgraded-flag", 82 "log-forwarder", 83 } 84 // ReallyLongTimeout should be long enough for the model-tracker 85 // tests that depend on a hosted model; its backing state is not 86 // accessible for StartSyncs, so we generally have to wait for at 87 // least two 5s ticks to pass, and should expect rare circumstances 88 // to take even longer. 89 ReallyLongWait = coretesting.LongWait * 3 90 91 alwaysUnitWorkers = []string{ 92 "agent", 93 "api-caller", 94 "api-config-watcher", 95 "log-sender", 96 "migration-fortress", 97 "migration-inactive-flag", 98 "migration-minion", 99 "upgrader", 100 "upgrade-steps-flag", 101 "upgrade-steps-gate", 102 "upgrade-check-gate", 103 "upgrade-check-flag", 104 } 105 notMigratingUnitWorkers = []string{ 106 "api-address-updater", 107 "charm-dir", 108 "hook-retry-strategy", 109 "leadership-tracker", 110 "logging-config-updater", 111 "meter-status", 112 "metric-collect", 113 "metric-sender", 114 "metric-spool", 115 "proxy-config-updater", 116 "uniter", 117 } 118 119 alwaysMachineWorkers = []string{ 120 "agent", 121 "api-caller", 122 "api-config-watcher", 123 "clock", 124 "migration-fortress", 125 "migration-inactive-flag", 126 "migration-minion", 127 "state-config-watcher", 128 "termination-signal-handler", 129 "upgrade-check-flag", 130 "upgrade-check-gate", 131 "upgrade-steps-flag", 132 "upgrade-steps-gate", 133 "upgrader", 134 "valid-credential-flag", 135 } 136 notMigratingMachineWorkers = []string{ 137 "api-address-updater", 138 "disk-manager", 139 "fan-configurer", 140 // "host-key-reporter", not stable, exits when done 141 "log-sender", 142 "logging-config-updater", 143 "machine-action-runner", 144 "machiner", 145 "proxy-config-updater", 146 "reboot-executor", 147 "ssh-authkeys-updater", 148 "storage-provisioner", 149 "upgrade-series", 150 "unconverted-api-workers", 151 "unit-agent-deployer", 152 } 153 ) 154 155 type ModelManifoldsFunc func(config model.ManifoldsConfig) dependency.Manifolds 156 157 func TrackModels(c *gc.C, tracker *agenttest.EngineTracker, inner ModelManifoldsFunc) ModelManifoldsFunc { 158 return func(config model.ManifoldsConfig) dependency.Manifolds { 159 raw := inner(config) 160 id := config.Agent.CurrentConfig().Model().Id() 161 if err := tracker.Install(raw, id); err != nil { 162 c.Errorf("cannot install tracker: %v", err) 163 } 164 return raw 165 } 166 } 167 168 type MachineManifoldsFunc func(config machine.ManifoldsConfig) dependency.Manifolds 169 170 func TrackMachines(c *gc.C, tracker *agenttest.EngineTracker, inner MachineManifoldsFunc) MachineManifoldsFunc { 171 return func(config machine.ManifoldsConfig) dependency.Manifolds { 172 raw := inner(config) 173 id := config.Agent.CurrentConfig().Tag().String() 174 if err := tracker.Install(raw, id); err != nil { 175 c.Errorf("cannot install tracker: %v", err) 176 } 177 return raw 178 } 179 } 180 181 type UnitManifoldsFunc func(config unit.ManifoldsConfig) dependency.Manifolds 182 183 func TrackUnits(c *gc.C, tracker *agenttest.EngineTracker, inner UnitManifoldsFunc) UnitManifoldsFunc { 184 return func(config unit.ManifoldsConfig) dependency.Manifolds { 185 raw := inner(config) 186 id := config.Agent.CurrentConfig().Tag().String() 187 if err := tracker.Install(raw, id); err != nil { 188 c.Errorf("cannot install tracker: %v", err) 189 } 190 return raw 191 } 192 }