github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/machineundertaker/manifold_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package machineundertaker_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/loggo" 9 "github.com/juju/names/v5" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 "github.com/juju/worker/v3" 13 "github.com/juju/worker/v3/dependency" 14 dt "github.com/juju/worker/v3/dependency/testing" 15 gc "gopkg.in/check.v1" 16 17 "github.com/juju/juju/api/base" 18 apitesting "github.com/juju/juju/api/base/testing" 19 "github.com/juju/juju/environs" 20 "github.com/juju/juju/worker/common" 21 "github.com/juju/juju/worker/machineundertaker" 22 ) 23 24 type manifoldSuite struct { 25 testing.IsolationSuite 26 } 27 28 var _ = gc.Suite(&manifoldSuite{}) 29 30 func (*manifoldSuite) TestMissingCaller(c *gc.C) { 31 manifold := makeManifold(nil, nil) 32 result, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 33 "the-caller": dependency.ErrMissing, 34 "the-environ": &fakeEnviron{}, 35 })) 36 c.Assert(result, gc.IsNil) 37 c.Assert(errors.Cause(err), gc.Equals, dependency.ErrMissing) 38 } 39 40 func (*manifoldSuite) TestMissingEnviron(c *gc.C) { 41 manifold := makeManifold(nil, nil) 42 result, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 43 "the-caller": &fakeAPICaller{}, 44 "the-environ": dependency.ErrMissing, 45 })) 46 c.Assert(result, gc.IsNil) 47 c.Assert(errors.Cause(err), gc.Equals, dependency.ErrMissing) 48 } 49 50 func (*manifoldSuite) TestAPIError(c *gc.C) { 51 manifold := makeManifold(nil, nil) 52 result, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 53 "the-caller": &fakeAPICaller{}, 54 "the-environ": &fakeEnviron{}, 55 })) 56 c.Assert(result, gc.IsNil) 57 c.Assert(err, gc.ErrorMatches, "machine undertaker client requires a model API connection") 58 } 59 60 func (*manifoldSuite) TestWorkerError(c *gc.C) { 61 manifold := makeManifold(nil, errors.New("boglodite")) 62 result, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 63 "the-caller": apitesting.APICallerFunc(nil), 64 "the-environ": &fakeEnviron{}, 65 })) 66 c.Assert(result, gc.IsNil) 67 c.Assert(err, gc.ErrorMatches, "boglodite") 68 } 69 70 func (*manifoldSuite) TestSuccess(c *gc.C) { 71 w := fakeWorker{name: "Boris"} 72 manifold := makeManifold(&w, nil) 73 result, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 74 "the-caller": apitesting.APICallerFunc(nil), 75 "the-environ": &fakeEnviron{}, 76 })) 77 c.Assert(err, jc.ErrorIsNil) 78 c.Assert(result, gc.DeepEquals, &w) 79 } 80 81 func makeManifold(workerResult worker.Worker, workerError error) dependency.Manifold { 82 return machineundertaker.Manifold(machineundertaker.ManifoldConfig{ 83 APICallerName: "the-caller", 84 EnvironName: "the-environ", 85 Logger: loggo.GetLogger("test"), 86 NewWorker: func(machineundertaker.Facade, environs.Environ, common.CredentialAPI, machineundertaker.Logger) (worker.Worker, error) { 87 return workerResult, workerError 88 }, 89 NewCredentialValidatorFacade: func(base.APICaller) (common.CredentialAPI, error) { 90 return &fakeCredentialAPI{}, nil 91 }, 92 }) 93 } 94 95 type fakeAPICaller struct { 96 base.APICaller 97 } 98 99 func (c *fakeAPICaller) ModelTag() (names.ModelTag, bool) { 100 return names.ModelTag{}, false 101 } 102 103 type fakeWorker struct { 104 worker.Worker 105 name string 106 }