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 }