github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/leaseexpiry/manifold_test.go (about) 1 // Copyright 2022 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package leaseexpiry_test 5 6 import ( 7 "github.com/juju/clock" 8 "github.com/juju/errors" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/worker/v3" 11 dt "github.com/juju/worker/v3/dependency/testing" 12 gc "gopkg.in/check.v1" 13 14 coredatabase "github.com/juju/juju/core/database" 15 "github.com/juju/juju/database/testing" 16 "github.com/juju/juju/worker/leaseexpiry" 17 ) 18 19 type manifoldSuite struct { 20 testing.ControllerSuite 21 } 22 23 var _ = gc.Suite(&manifoldSuite{}) 24 25 func (s *manifoldSuite) TestInputs(c *gc.C) { 26 cfg := newManifoldConfig() 27 28 c.Check(leaseexpiry.Manifold(cfg).Inputs, jc.DeepEquals, []string{"clock-name", "db-accessor-name"}) 29 } 30 31 func (s *manifoldSuite) TestConfigValidate(c *gc.C) { 32 validCfg := newManifoldConfig() 33 34 cfg := validCfg 35 cfg.ClockName = "" 36 c.Check(errors.Is(cfg.Validate(), errors.NotValid), jc.IsTrue) 37 38 cfg = validCfg 39 cfg.DBAccessorName = "" 40 c.Check(errors.Is(cfg.Validate(), errors.NotValid), jc.IsTrue) 41 42 cfg = validCfg 43 cfg.Logger = nil 44 c.Check(errors.Is(cfg.Validate(), errors.NotValid), jc.IsTrue) 45 46 cfg = validCfg 47 cfg.NewWorker = nil 48 c.Check(errors.Is(cfg.Validate(), errors.NotValid), jc.IsTrue) 49 } 50 51 func (s *manifoldSuite) TestStartSuccess(c *gc.C) { 52 cfg := newManifoldConfig() 53 54 work, err := leaseexpiry.Manifold(cfg).Start(s.newStubContext()) 55 c.Check(work, gc.NotNil) 56 c.Check(err, jc.ErrorIsNil) 57 } 58 59 // newManifoldConfig creates and returns a new ManifoldConfig instance based on 60 // the supplied arguments. 61 func newManifoldConfig() leaseexpiry.ManifoldConfig { 62 return leaseexpiry.ManifoldConfig{ 63 ClockName: "clock-name", 64 DBAccessorName: "db-accessor-name", 65 Logger: leaseexpiry.StubLogger{}, 66 NewWorker: func(config leaseexpiry.Config) (worker.Worker, error) { return nil, nil }, 67 } 68 } 69 70 func (s *manifoldSuite) newStubContext() *dt.Context { 71 return dt.StubContext(nil, map[string]interface{}{ 72 "clock-name": clock.WallClock, 73 "db-accessor-name": stubDBGetter{s.TrackedDB()}, 74 }) 75 } 76 77 type stubDBGetter struct { 78 trackedDB coredatabase.TrackedDB 79 } 80 81 func (s stubDBGetter) GetDB(name string) (coredatabase.TrackedDB, error) { 82 if name != "controller" { 83 return nil, errors.Errorf(`expected a request for "controller" DB; got %q`, name) 84 } 85 return s.trackedDB, nil 86 }