github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/cmd/jujud/agent/caasoperator/manifolds_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package caasoperator_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/caasoperator"
    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 := caasoperator.Manifolds(caasoperator.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 := caasoperator.ManifoldsConfig{}
    36  	manifolds := caasoperator.Manifolds(config)
    37  	expectedKeys := []string{
    38  		"agent",
    39  		"api-address-updater",
    40  		"api-caller",
    41  		"api-config-watcher",
    42  		"charm-dir",
    43  		"clock",
    44  		"hook-retry-strategy",
    45  		"operator",
    46  		"logging-config-updater",
    47  		"log-sender",
    48  		"migration-fortress",
    49  		"migration-minion",
    50  		"migration-inactive-flag",
    51  		"proxy-config-updater",
    52  		"upgrade-steps-flag",
    53  		"upgrade-steps-gate",
    54  		"upgrade-steps-runner",
    55  		"upgrader",
    56  		"caas-units-manager",
    57  		"secret-drain-worker",
    58  		// TODO(caas)
    59  		//"metric-spool",
    60  		//"meter-status",
    61  		//"metric-collect",
    62  		//"metric-sender",
    63  	}
    64  	keys := make([]string, 0, len(manifolds))
    65  	for k := range manifolds {
    66  		keys = append(keys, k)
    67  	}
    68  	c.Assert(keys, jc.SameContents, expectedKeys)
    69  }
    70  
    71  func (*ManifoldsSuite) TestMigrationGuards(c *gc.C) {
    72  	exempt := set.NewStrings(
    73  		"agent",
    74  		"clock",
    75  		"machine-lock",
    76  		"api-config-watcher",
    77  		"api-caller",
    78  		"log-sender",
    79  		"upgrader",
    80  		"migration-fortress",
    81  		"migration-minion",
    82  		"migration-inactive-flag",
    83  		"upgrade-steps-gate",
    84  		"upgrade-check-flag",
    85  		"upgrade-steps-runner",
    86  		"upgrade-steps-flag",
    87  		"upgrade-check-gate",
    88  		"caas-units-manager",
    89  	)
    90  	config := caasoperator.ManifoldsConfig{}
    91  	manifolds := caasoperator.Manifolds(config)
    92  	for name, manifold := range manifolds {
    93  		c.Logf("%v [%v]", name, manifold.Inputs)
    94  		if !exempt.Contains(name) {
    95  			checkContains(c, manifold.Inputs, "migration-inactive-flag")
    96  			checkContains(c, manifold.Inputs, "migration-fortress")
    97  		}
    98  	}
    99  }
   100  
   101  func (s *ManifoldsSuite) TestManifoldsDependencies(c *gc.C) {
   102  	agenttest.AssertManifoldsDependencies(c,
   103  		caasoperator.Manifolds(caasoperator.ManifoldsConfig{
   104  			Agent: fakeAgent{},
   105  		}),
   106  		expectedOperatorManifoldsWithDependencies,
   107  	)
   108  }
   109  
   110  func checkContains(c *gc.C, names []string, seek string) {
   111  	for _, name := range names {
   112  		if name == seek {
   113  			return
   114  		}
   115  	}
   116  	c.Errorf("%q not present in %v", seek, names)
   117  }
   118  
   119  type fakeAgent struct {
   120  	agent.Agent
   121  }
   122  
   123  var expectedOperatorManifoldsWithDependencies = map[string][]string{
   124  
   125  	"agent": {},
   126  
   127  	"api-address-updater": {
   128  		"agent",
   129  		"api-caller",
   130  		"api-config-watcher",
   131  		"migration-fortress",
   132  		"migration-inactive-flag",
   133  		"upgrade-steps-flag",
   134  		"upgrade-steps-gate"},
   135  
   136  	"api-caller": {"agent", "api-config-watcher"},
   137  
   138  	"api-config-watcher": {"agent"},
   139  
   140  	"charm-dir": {
   141  		"agent",
   142  		"api-caller",
   143  		"api-config-watcher",
   144  		"migration-fortress",
   145  		"migration-inactive-flag",
   146  		"upgrade-steps-flag",
   147  		"upgrade-steps-gate"},
   148  
   149  	"hook-retry-strategy": {
   150  		"agent",
   151  		"api-caller",
   152  		"api-config-watcher",
   153  		"migration-fortress",
   154  		"migration-inactive-flag",
   155  		"upgrade-steps-flag",
   156  		"upgrade-steps-gate"},
   157  
   158  	"log-sender": {"agent", "api-caller", "api-config-watcher"},
   159  
   160  	"logging-config-updater": {
   161  		"agent",
   162  		"api-caller",
   163  		"api-config-watcher",
   164  		"migration-fortress",
   165  		"migration-inactive-flag",
   166  		"upgrade-steps-flag",
   167  		"upgrade-steps-gate"},
   168  
   169  	"migration-fortress": {
   170  		"upgrade-steps-flag",
   171  		"upgrade-steps-gate"},
   172  
   173  	"migration-inactive-flag": {
   174  		"agent",
   175  		"api-caller",
   176  		"api-config-watcher"},
   177  
   178  	"migration-minion": {
   179  		"agent",
   180  		"api-caller",
   181  		"api-config-watcher",
   182  		"migration-fortress",
   183  		"upgrade-steps-flag",
   184  		"upgrade-steps-gate"},
   185  
   186  	"proxy-config-updater": {
   187  		"agent",
   188  		"api-caller",
   189  		"api-config-watcher",
   190  		"migration-fortress",
   191  		"migration-inactive-flag",
   192  		"upgrade-steps-flag",
   193  		"upgrade-steps-gate"},
   194  
   195  	"upgrade-steps-flag": {"upgrade-steps-gate"},
   196  
   197  	"upgrade-steps-gate": {},
   198  
   199  	"upgrade-steps-runner": {
   200  		"agent",
   201  		"api-caller",
   202  		"api-config-watcher",
   203  		"upgrade-steps-gate",
   204  	},
   205  
   206  	"upgrader": {
   207  		"agent",
   208  		"api-caller",
   209  		"api-config-watcher",
   210  		"upgrade-steps-gate",
   211  	},
   212  
   213  	"clock": {},
   214  
   215  	"operator": {
   216  		"agent",
   217  		"api-caller",
   218  		"api-config-watcher",
   219  		"charm-dir",
   220  		"clock",
   221  		"hook-retry-strategy",
   222  		"migration-fortress",
   223  		"migration-inactive-flag",
   224  		"upgrade-steps-flag",
   225  		"upgrade-steps-gate",
   226  	},
   227  	"caas-units-manager": {
   228  		"agent",
   229  		"api-caller",
   230  		"api-config-watcher",
   231  	},
   232  	"secret-drain-worker": {
   233  		"agent",
   234  		"api-caller",
   235  		"api-config-watcher",
   236  		"migration-fortress",
   237  		"migration-inactive-flag",
   238  		"upgrade-steps-flag",
   239  		"upgrade-steps-gate",
   240  	},
   241  }