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