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  }