github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/migrationmaster/validate_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package migrationmaster_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/testing"
     9  	jc "github.com/juju/testing/checkers"
    10  	"github.com/juju/utils/clock"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/api"
    14  	"github.com/juju/juju/migration"
    15  	"github.com/juju/juju/worker/fortress"
    16  	"github.com/juju/juju/worker/migrationmaster"
    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) TestMissingModelUUID(c *gc.C) {
    31  	config := validConfig()
    32  	config.ModelUUID = ""
    33  	checkNotValid(c, config, "empty ModelUUID not valid")
    34  }
    35  
    36  func (*ValidateSuite) TestMissingGuard(c *gc.C) {
    37  	config := validConfig()
    38  	config.Guard = nil
    39  	checkNotValid(c, config, "nil Guard not valid")
    40  }
    41  
    42  func (*ValidateSuite) TestMissingFacade(c *gc.C) {
    43  	config := validConfig()
    44  	config.Facade = nil
    45  	checkNotValid(c, config, "nil Facade 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) TestMissingUploadBinaries(c *gc.C) {
    55  	config := validConfig()
    56  	config.UploadBinaries = nil
    57  	checkNotValid(c, config, "nil UploadBinaries not valid")
    58  }
    59  
    60  func (*ValidateSuite) TestMissingCharmDownloader(c *gc.C) {
    61  	config := validConfig()
    62  	config.CharmDownloader = nil
    63  	checkNotValid(c, config, "nil CharmDownloader not valid")
    64  }
    65  
    66  func (*ValidateSuite) TestMissingToolsDownloader(c *gc.C) {
    67  	config := validConfig()
    68  	config.ToolsDownloader = nil
    69  	checkNotValid(c, config, "nil ToolsDownloader not valid")
    70  }
    71  
    72  func (*ValidateSuite) TestMissingClock(c *gc.C) {
    73  	config := validConfig()
    74  	config.Clock = nil
    75  	checkNotValid(c, config, "nil Clock not valid")
    76  }
    77  
    78  func validConfig() migrationmaster.Config {
    79  	return migrationmaster.Config{
    80  		ModelUUID:       "uuid",
    81  		Guard:           struct{ fortress.Guard }{},
    82  		Facade:          struct{ migrationmaster.Facade }{},
    83  		APIOpen:         func(*api.Info, api.DialOpts) (api.Connection, error) { return nil, nil },
    84  		UploadBinaries:  func(migration.UploadBinariesConfig) error { return nil },
    85  		CharmDownloader: struct{ migration.CharmDownloader }{},
    86  		ToolsDownloader: struct{ migration.ToolsDownloader }{},
    87  		Clock:           struct{ clock.Clock }{},
    88  	}
    89  }
    90  
    91  func checkNotValid(c *gc.C, config migrationmaster.Config, expect string) {
    92  	check := func(err error) {
    93  		c.Check(err, gc.ErrorMatches, expect)
    94  		c.Check(err, jc.Satisfies, errors.IsNotValid)
    95  	}
    96  
    97  	err := config.Validate()
    98  	check(err)
    99  
   100  	worker, err := migrationmaster.New(config)
   101  	c.Check(worker, gc.IsNil)
   102  	check(err)
   103  }