github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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/testing"
     8  	jc "github.com/juju/testing/checkers"
     9  	"github.com/juju/utils/clock"
    10  	"github.com/juju/utils/set"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/cmd/jujud/agent/model"
    14  	"github.com/juju/juju/worker/workertest"
    15  )
    16  
    17  type ManifoldsSuite struct {
    18  	testing.IsolationSuite
    19  }
    20  
    21  var _ = gc.Suite(&ManifoldsSuite{})
    22  
    23  func (s *ManifoldsSuite) TestNames(c *gc.C) {
    24  	actual := set.NewStrings()
    25  	manifolds := model.Manifolds(model.ManifoldsConfig{
    26  		Agent: &mockAgent{},
    27  	})
    28  	for name := range manifolds {
    29  		actual.Add(name)
    30  	}
    31  	// NOTE: if this test failed, the cmd/jujud/agent tests will
    32  	// also fail. Search for 'ModelWorkers' to find affected vars.
    33  	c.Check(actual.SortedValues(), jc.DeepEquals, []string{
    34  		"agent",
    35  		"api-caller",
    36  		"api-config-watcher",
    37  		"application-scaler",
    38  		"charm-revision-updater",
    39  		"clock",
    40  		"compute-provisioner",
    41  		"environ-tracker",
    42  		"firewaller",
    43  		"instance-poller",
    44  		"is-responsible-flag",
    45  		"machine-undertaker",
    46  		"metric-worker",
    47  		"migration-fortress",
    48  		"migration-inactive-flag",
    49  		"migration-master",
    50  		"not-alive-flag",
    51  		"not-dead-flag",
    52  		"space-importer",
    53  		"spaces-imported-gate",
    54  		"state-cleaner",
    55  		"status-history-pruner",
    56  		"storage-provisioner",
    57  		"undertaker",
    58  		"unit-assigner",
    59  	})
    60  }
    61  
    62  func (s *ManifoldsSuite) TestFlagDependencies(c *gc.C) {
    63  	exclusions := set.NewStrings(
    64  		"agent",
    65  		"api-caller",
    66  		"api-config-watcher",
    67  		"clock",
    68  		"spaces-imported-gate",
    69  		"is-responsible-flag",
    70  		"not-alive-flag",
    71  		"not-dead-flag",
    72  	)
    73  	manifolds := model.Manifolds(model.ManifoldsConfig{
    74  		Agent: &mockAgent{},
    75  	})
    76  	for name, manifold := range manifolds {
    77  		c.Logf("checking %s", name)
    78  		if exclusions.Contains(name) {
    79  			continue
    80  		}
    81  		inputs := set.NewStrings(manifold.Inputs...)
    82  		if !inputs.Contains("is-responsible-flag") {
    83  			c.Check(inputs.Contains("migration-fortress"), jc.IsTrue)
    84  			c.Check(inputs.Contains("migration-inactive-flag"), jc.IsTrue)
    85  		}
    86  	}
    87  }
    88  
    89  func (s *ManifoldsSuite) TestStateCleanerIgnoresLifeFlags(c *gc.C) {
    90  	manifolds := model.Manifolds(model.ManifoldsConfig{
    91  		Agent: &mockAgent{},
    92  	})
    93  	manifold, found := manifolds["state-cleaner"]
    94  	c.Assert(found, jc.IsTrue)
    95  
    96  	inputs := set.NewStrings(manifold.Inputs...)
    97  	c.Check(inputs.Contains("not-alive-flag"), jc.IsFalse)
    98  	c.Check(inputs.Contains("not-dead-flag"), jc.IsFalse)
    99  }
   100  
   101  func (s *ManifoldsSuite) TestClockWrapper(c *gc.C) {
   102  	expectClock := &fakeClock{}
   103  	manifolds := model.Manifolds(model.ManifoldsConfig{
   104  		Agent: &mockAgent{},
   105  		Clock: expectClock,
   106  	})
   107  	manifold, ok := manifolds["clock"]
   108  	c.Assert(ok, jc.IsTrue)
   109  	worker, err := manifold.Start(nil)
   110  	c.Assert(err, jc.ErrorIsNil)
   111  	defer workertest.CheckKill(c, worker)
   112  
   113  	var clock clock.Clock
   114  	err = manifold.Output(worker, &clock)
   115  	c.Assert(err, jc.ErrorIsNil)
   116  	c.Check(clock, gc.Equals, expectClock)
   117  }
   118  
   119  type fakeClock struct{ clock.Clock }