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  }