github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/worker/proxyupdater/manifold_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package proxyupdater_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/testing"
     9  	jc "github.com/juju/testing/checkers"
    10  	"github.com/juju/utils/proxy"
    11  	gc "gopkg.in/check.v1"
    12  	"gopkg.in/juju/names.v2"
    13  
    14  	"github.com/juju/juju/agent"
    15  	"github.com/juju/juju/api/base"
    16  	"github.com/juju/juju/worker"
    17  	"github.com/juju/juju/worker/dependency"
    18  	dt "github.com/juju/juju/worker/dependency/testing"
    19  	"github.com/juju/juju/worker/proxyupdater"
    20  )
    21  
    22  type ManifoldSuite struct {
    23  	testing.IsolationSuite
    24  	config   proxyupdater.ManifoldConfig
    25  	startErr error
    26  }
    27  
    28  var _ = gc.Suite(&ManifoldSuite{})
    29  
    30  func OtherUpdate(proxy.Settings) error {
    31  	return nil
    32  }
    33  
    34  func (s *ManifoldSuite) SetUpTest(c *gc.C) {
    35  	s.IsolationSuite.SetUpTest(c)
    36  	s.startErr = nil
    37  	s.config = proxyupdater.ManifoldConfig{
    38  		AgentName:     "agent-name",
    39  		APICallerName: "api-caller-name",
    40  		WorkerFunc: func(cfg proxyupdater.Config) (worker.Worker, error) {
    41  			if s.startErr != nil {
    42  				return nil, s.startErr
    43  			}
    44  			return &dummyWorker{config: cfg}, nil
    45  		},
    46  		ExternalUpdate: OtherUpdate,
    47  	}
    48  }
    49  
    50  func (s *ManifoldSuite) manifold() dependency.Manifold {
    51  	return proxyupdater.Manifold(s.config)
    52  }
    53  
    54  func (s *ManifoldSuite) TestInputs(c *gc.C) {
    55  	c.Check(s.manifold().Inputs, jc.DeepEquals, []string{"agent-name", "api-caller-name"})
    56  }
    57  
    58  func (s *ManifoldSuite) TestWorkerFuncMissing(c *gc.C) {
    59  	s.config.WorkerFunc = nil
    60  	context := dt.StubContext(nil, nil)
    61  	worker, err := s.manifold().Start(context)
    62  	c.Check(worker, gc.IsNil)
    63  	c.Check(err, gc.ErrorMatches, "missing WorkerFunc not valid")
    64  }
    65  
    66  func (s *ManifoldSuite) TestStartAgentMissing(c *gc.C) {
    67  	context := dt.StubContext(nil, map[string]interface{}{
    68  		"agent-name": dependency.ErrMissing,
    69  	})
    70  
    71  	worker, err := s.manifold().Start(context)
    72  	c.Check(worker, gc.IsNil)
    73  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    74  }
    75  
    76  func (s *ManifoldSuite) TestStartAPICallerMissing(c *gc.C) {
    77  	context := dt.StubContext(nil, map[string]interface{}{
    78  		"agent-name":      &dummyAgent{},
    79  		"api-caller-name": dependency.ErrMissing,
    80  	})
    81  
    82  	worker, err := s.manifold().Start(context)
    83  	c.Check(worker, gc.IsNil)
    84  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    85  }
    86  
    87  func (s *ManifoldSuite) TestStartError(c *gc.C) {
    88  	s.startErr = errors.New("boom")
    89  	context := dt.StubContext(nil, map[string]interface{}{
    90  		"agent-name":      &dummyAgent{},
    91  		"api-caller-name": &dummyAPICaller{},
    92  	})
    93  
    94  	worker, err := s.manifold().Start(context)
    95  	c.Check(worker, gc.IsNil)
    96  	c.Check(err, gc.ErrorMatches, "boom")
    97  }
    98  
    99  func (s *ManifoldSuite) TestStartSuccess(c *gc.C) {
   100  	context := dt.StubContext(nil, map[string]interface{}{
   101  		"agent-name":      &dummyAgent{},
   102  		"api-caller-name": &dummyAPICaller{},
   103  	})
   104  
   105  	worker, err := s.manifold().Start(context)
   106  	c.Check(err, jc.ErrorIsNil)
   107  	dummy, ok := worker.(*dummyWorker)
   108  	c.Assert(ok, jc.IsTrue)
   109  	c.Check(dummy.config.Directory, gc.Equals, "/home/ubuntu")
   110  	c.Check(dummy.config.RegistryPath, gc.Equals, `HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings`)
   111  	c.Check(dummy.config.Filename, gc.Equals, ".juju-proxy")
   112  	c.Check(dummy.config.API, gc.NotNil)
   113  	// Checking function equality is problematic.
   114  	c.Check(dummy.config.ExternalUpdate, gc.NotNil)
   115  }
   116  
   117  type dummyAgent struct {
   118  	agent.Agent
   119  }
   120  
   121  func (*dummyAgent) CurrentConfig() agent.Config {
   122  	return &dummyConfig{}
   123  }
   124  
   125  type dummyConfig struct {
   126  	agent.Config
   127  }
   128  
   129  func (*dummyConfig) Tag() names.Tag {
   130  	return names.NewMachineTag("42")
   131  }
   132  
   133  type dummyAPICaller struct {
   134  	base.APICaller
   135  }
   136  
   137  func (*dummyAPICaller) BestFacadeVersion(_ string) int {
   138  	return 42
   139  }
   140  
   141  type dummyWorker struct {
   142  	worker.Worker
   143  
   144  	config proxyupdater.Config
   145  }