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  }