github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/core/migration/targetinfo_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package migration_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 "github.com/juju/utils" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/names.v2" 12 "gopkg.in/macaroon.v1" 13 14 "github.com/juju/juju/core/migration" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type TargetInfoSuite struct { 19 coretesting.BaseSuite 20 } 21 22 var _ = gc.Suite(new(TargetInfoSuite)) 23 24 func (s *TargetInfoSuite) TestValidation(c *gc.C) { 25 tests := []struct { 26 label string 27 tweakInfo func(*migration.TargetInfo) 28 errorPattern string 29 }{{ 30 "empty ControllerTag", 31 func(info *migration.TargetInfo) { 32 info.ControllerTag = names.NewControllerTag("fooo") 33 }, 34 "ControllerTag not valid", 35 }, { 36 "invalid ControllerTag", 37 func(info *migration.TargetInfo) { 38 info.ControllerTag = names.NewControllerTag("") 39 }, 40 "ControllerTag not valid", 41 }, { 42 "empty Addrs", 43 func(info *migration.TargetInfo) { 44 info.Addrs = []string{} 45 }, 46 "empty Addrs not valid", 47 }, { 48 "invalid Addrs", 49 func(info *migration.TargetInfo) { 50 info.Addrs = []string{"1.2.3.4:555", "abc"} 51 }, 52 `"abc" in Addrs not valid`, 53 }, { 54 "CACert", 55 func(info *migration.TargetInfo) { 56 info.CACert = "" 57 }, 58 "empty CACert not valid", 59 }, { 60 "AuthTag", 61 func(info *migration.TargetInfo) { 62 info.AuthTag = names.UserTag{} 63 }, 64 "empty AuthTag not valid", 65 }, { 66 "Password & Macaroons", 67 func(info *migration.TargetInfo) { 68 info.Password = "" 69 info.Macaroons = nil 70 }, 71 "missing Password & Macaroons not valid", 72 }, { 73 "Success - empty Password", 74 func(info *migration.TargetInfo) { 75 info.Password = "" 76 }, 77 "", 78 }, { 79 "Success - empty Macaroons", 80 func(info *migration.TargetInfo) { 81 info.Macaroons = nil 82 }, 83 "", 84 }, { 85 "Success - all set", 86 func(*migration.TargetInfo) {}, 87 "", 88 }} 89 90 for _, test := range tests { 91 c.Logf("---- %s -----------", test.label) 92 info := makeValidTargetInfo(c) 93 test.tweakInfo(&info) 94 err := info.Validate() 95 if test.errorPattern == "" { 96 c.Check(err, jc.ErrorIsNil) 97 } else { 98 c.Check(errors.IsNotValid(err), jc.IsTrue) 99 c.Check(err, gc.ErrorMatches, test.errorPattern) 100 } 101 } 102 } 103 104 func makeValidTargetInfo(c *gc.C) migration.TargetInfo { 105 mac, err := macaroon.New([]byte("secret"), "id", "location") 106 c.Assert(err, jc.ErrorIsNil) 107 return migration.TargetInfo{ 108 ControllerTag: names.NewControllerTag(utils.MustNewUUID().String()), 109 Addrs: []string{"1.2.3.4:5555"}, 110 CACert: "cert", 111 AuthTag: names.NewUserTag("user"), 112 Password: "password", 113 Macaroons: []macaroon.Slice{{mac}}, 114 } 115 }