github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/migrationminion/validate_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package migrationminion_test
     5  
     6  import (
     7  	"github.com/juju/clock"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/loggo"
    10  	"github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/agent"
    15  	"github.com/juju/juju/api"
    16  	"github.com/juju/juju/api/base"
    17  	"github.com/juju/juju/worker/fortress"
    18  	"github.com/juju/juju/worker/migrationminion"
    19  )
    20  
    21  type ValidateSuite struct {
    22  	testing.IsolationSuite
    23  }
    24  
    25  var _ = gc.Suite(&ValidateSuite{})
    26  
    27  func (*ValidateSuite) TestValid(c *gc.C) {
    28  	err := validConfig().Validate()
    29  	c.Check(err, jc.ErrorIsNil)
    30  }
    31  
    32  func (*ValidateSuite) TestMissingAgent(c *gc.C) {
    33  	config := validConfig()
    34  	config.Agent = nil
    35  	checkNotValid(c, config, "nil Agent not valid")
    36  }
    37  
    38  func (*ValidateSuite) TestMissingFacade(c *gc.C) {
    39  	config := validConfig()
    40  	config.Facade = nil
    41  	checkNotValid(c, config, "nil Facade not valid")
    42  }
    43  
    44  func (*ValidateSuite) TestMissingClock(c *gc.C) {
    45  	config := validConfig()
    46  	config.Clock = nil
    47  	checkNotValid(c, config, "nil Clock not valid")
    48  }
    49  
    50  func (*ValidateSuite) TestMissingGuard(c *gc.C) {
    51  	config := validConfig()
    52  	config.Guard = nil
    53  	checkNotValid(c, config, "nil Guard not valid")
    54  }
    55  
    56  func (*ValidateSuite) TestMissingAPIOpen(c *gc.C) {
    57  	config := validConfig()
    58  	config.APIOpen = nil
    59  	checkNotValid(c, config, "nil APIOpen not valid")
    60  }
    61  
    62  func (*ValidateSuite) TestMissingValidateMigration(c *gc.C) {
    63  	config := validConfig()
    64  	config.ValidateMigration = nil
    65  	checkNotValid(c, config, "nil ValidateMigration not valid")
    66  }
    67  
    68  func (*ValidateSuite) TestMissingLogger(c *gc.C) {
    69  	config := validConfig()
    70  	config.Logger = nil
    71  	checkNotValid(c, config, "nil Logger not valid")
    72  }
    73  
    74  func validConfig() migrationminion.Config {
    75  	return migrationminion.Config{
    76  		Agent:             struct{ agent.Agent }{},
    77  		Guard:             struct{ fortress.Guard }{},
    78  		Facade:            struct{ migrationminion.Facade }{},
    79  		Clock:             struct{ clock.Clock }{},
    80  		APIOpen:           func(*api.Info, api.DialOpts) (api.Connection, error) { return nil, nil },
    81  		ValidateMigration: func(base.APICaller) error { return nil },
    82  		Logger:            loggo.GetLogger("test"),
    83  	}
    84  }
    85  
    86  func checkNotValid(c *gc.C, config migrationminion.Config, expect string) {
    87  	check := func(err error) {
    88  		c.Check(err, gc.ErrorMatches, expect)
    89  		c.Check(err, jc.Satisfies, errors.IsNotValid)
    90  	}
    91  
    92  	err := config.Validate()
    93  	check(err)
    94  
    95  	worker, err := migrationminion.New(config)
    96  	c.Check(worker, gc.IsNil)
    97  	check(err)
    98  }