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  }