github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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  	gc "gopkg.in/check.v1"
     8  
     9  	"github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	"github.com/juju/utils/clock"
    12  	"github.com/juju/utils/set"
    13  
    14  	"github.com/juju/juju/cmd/jujud/agent/model"
    15  	"github.com/juju/juju/worker/workertest"
    16  )
    17  
    18  type ManifoldsSuite struct {
    19  	testing.IsolationSuite
    20  }
    21  
    22  var _ = gc.Suite(&ManifoldsSuite{})
    23  
    24  func (s *ManifoldsSuite) TestNames(c *gc.C) {
    25  	actual := set.NewStrings()
    26  	manifolds := model.Manifolds(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.Values(), jc.SameContents, []string{
    35  		"address-cleaner",
    36  		"agent",
    37  		"api-caller",
    38  		"api-config-watcher",
    39  		"charm-revision-updater",
    40  		"clock",
    41  		"compute-provisioner",
    42  		"environ-tracker",
    43  		"firewaller",
    44  		"instance-poller",
    45  		"is-responsible-flag",
    46  		"metric-worker",
    47  		"migration-fortress",
    48  		"migration-master",
    49  		"not-alive-flag",
    50  		"not-dead-flag",
    51  		"service-scaler",
    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) TestResponsibleFlagDependencies(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  		c.Check(inputs.Contains("is-responsible-flag"), jc.IsTrue)
    83  	}
    84  }
    85  
    86  func (s *ManifoldsSuite) TestClockWrapper(c *gc.C) {
    87  	expectClock := &fakeClock{}
    88  	manifolds := model.Manifolds(model.ManifoldsConfig{
    89  		Agent: &mockAgent{},
    90  		Clock: expectClock,
    91  	})
    92  	manifold, ok := manifolds["clock"]
    93  	c.Assert(ok, jc.IsTrue)
    94  	worker, err := manifold.Start(nil)
    95  	c.Assert(err, jc.ErrorIsNil)
    96  	defer workertest.CheckKill(c, worker)
    97  
    98  	var clock clock.Clock
    99  	err = manifold.Output(worker, &clock)
   100  	c.Assert(err, jc.ErrorIsNil)
   101  	c.Check(clock, gc.Equals, expectClock)
   102  }
   103  
   104  type fakeClock struct{ clock.Clock }