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  }