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 }