github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/errors"
     8  	"github.com/juju/testing"
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/agent"
    13  	"github.com/juju/juju/api"
    14  	"github.com/juju/juju/api/base"
    15  	"github.com/juju/juju/worker/fortress"
    16  	"github.com/juju/juju/worker/migrationminion"
    17  )
    18  
    19  type ValidateSuite struct {
    20  	testing.IsolationSuite
    21  }
    22  
    23  var _ = gc.Suite(&ValidateSuite{})
    24  
    25  func (*ValidateSuite) TestValid(c *gc.C) {
    26  	err := validConfig().Validate()
    27  	c.Check(err, jc.ErrorIsNil)
    28  }
    29  
    30  func (*ValidateSuite) TestMissingAgent(c *gc.C) {
    31  	config := validConfig()
    32  	config.Agent = nil
    33  	checkNotValid(c, config, "nil Agent not valid")
    34  }
    35  
    36  func (*ValidateSuite) TestMissingFacade(c *gc.C) {
    37  	config := validConfig()
    38  	config.Facade = nil
    39  	checkNotValid(c, config, "nil Facade not valid")
    40  }
    41  
    42  func (*ValidateSuite) TestMissingGuard(c *gc.C) {
    43  	config := validConfig()
    44  	config.Guard = nil
    45  	checkNotValid(c, config, "nil Guard not valid")
    46  }
    47  
    48  func (*ValidateSuite) TestMissingAPIOpen(c *gc.C) {
    49  	config := validConfig()
    50  	config.APIOpen = nil
    51  	checkNotValid(c, config, "nil APIOpen not valid")
    52  }
    53  
    54  func (*ValidateSuite) TestMissingValidateMigration(c *gc.C) {
    55  	config := validConfig()
    56  	config.ValidateMigration = nil
    57  	checkNotValid(c, config, "nil ValidateMigration not valid")
    58  }
    59  
    60  func validConfig() migrationminion.Config {
    61  	return migrationminion.Config{
    62  		Agent:             struct{ agent.Agent }{},
    63  		Guard:             struct{ fortress.Guard }{},
    64  		Facade:            struct{ migrationminion.Facade }{},
    65  		APIOpen:           func(*api.Info, api.DialOpts) (api.Connection, error) { return nil, nil },
    66  		ValidateMigration: func(base.APICaller) error { return nil },
    67  	}
    68  }
    69  
    70  func checkNotValid(c *gc.C, config migrationminion.Config, expect string) {
    71  	check := func(err error) {
    72  		c.Check(err, gc.ErrorMatches, expect)
    73  		c.Check(err, jc.Satisfies, errors.IsNotValid)
    74  	}
    75  
    76  	err := config.Validate()
    77  	check(err)
    78  
    79  	worker, err := migrationminion.New(config)
    80  	c.Check(worker, gc.IsNil)
    81  	check(err)
    82  }