github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/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 "github.com/juju/names/v5" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/utils/v3" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/macaroon.v2" 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 "AuthTag", 55 func(info *migration.TargetInfo) { 56 info.AuthTag = names.UserTag{} 57 info.Macaroons = nil 58 }, 59 "empty AuthTag not valid", 60 }, { 61 "Success - empty CACert", 62 func(info *migration.TargetInfo) { 63 info.CACert = "" 64 }, 65 "", 66 }, { 67 "Password & Macaroons", 68 func(info *migration.TargetInfo) { 69 info.Password = "" 70 info.Macaroons = nil 71 }, 72 "missing Password & Macaroons not valid", 73 }, { 74 "Success - empty Password", 75 func(info *migration.TargetInfo) { 76 info.Password = "" 77 }, 78 "", 79 }, { 80 "Success - empty Macaroons", 81 func(info *migration.TargetInfo) { 82 info.Macaroons = nil 83 }, 84 "", 85 }, { 86 "Success - empty AuthTag with macaroons", 87 func(info *migration.TargetInfo) { 88 info.AuthTag = names.UserTag{} 89 }, 90 "", 91 }, { 92 "Success - all set", 93 func(*migration.TargetInfo) {}, 94 "", 95 }} 96 97 for _, test := range tests { 98 c.Logf("---- %s -----------", test.label) 99 info := makeValidTargetInfo(c) 100 test.tweakInfo(&info) 101 err := info.Validate() 102 if test.errorPattern == "" { 103 c.Check(err, jc.ErrorIsNil) 104 } else { 105 c.Check(errors.IsNotValid(err), jc.IsTrue) 106 c.Check(err, gc.ErrorMatches, test.errorPattern) 107 } 108 } 109 } 110 111 func makeValidTargetInfo(c *gc.C) migration.TargetInfo { 112 mac, err := macaroon.New([]byte("secret"), []byte("id"), "location", macaroon.LatestVersion) 113 c.Assert(err, jc.ErrorIsNil) 114 return migration.TargetInfo{ 115 ControllerTag: names.NewControllerTag(utils.MustNewUUID().String()), 116 Addrs: []string{"1.2.3.4:5555"}, 117 CACert: "cert", 118 AuthTag: names.NewUserTag("user"), 119 Password: "password", 120 Macaroons: []macaroon.Slice{{mac}}, 121 } 122 }