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  }