github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/cloud/defaultregion_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cloud_test 5 6 import ( 7 "fmt" 8 "strings" 9 10 "github.com/juju/cmd" 11 "github.com/juju/cmd/cmdtesting" 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 jujucloud "github.com/juju/juju/cloud" 16 "github.com/juju/juju/cmd/juju/cloud" 17 "github.com/juju/juju/jujuclient" 18 "github.com/juju/juju/testing" 19 ) 20 21 type defaultRegionSuite struct { 22 testing.FakeJujuXDGDataHomeSuite 23 } 24 25 var _ = gc.Suite(&defaultRegionSuite{}) 26 27 func (s *defaultRegionSuite) TestBadArgs(c *gc.C) { 28 cmd := cloud.NewSetDefaultRegionCommand() 29 _, err := cmdtesting.RunCommand(c, cmd) 30 c.Assert(err, gc.ErrorMatches, "Usage: juju set-default-region <cloud-name> <region>") 31 _, err = cmdtesting.RunCommand(c, cmd, "cloud", "region", "extra") 32 c.Assert(err, gc.ErrorMatches, `unrecognized args: \["extra"\]`) 33 } 34 35 func (s *defaultRegionSuite) TestBadRegion(c *gc.C) { 36 cmd := cloud.NewSetDefaultRegionCommand() 37 _, err := cmdtesting.RunCommand(c, cmd, "aws", "foo") 38 c.Assert(err, gc.ErrorMatches, `region "foo" for cloud aws not valid, valid regions are .*`) 39 } 40 41 func (s *defaultRegionSuite) TestBadCloudName(c *gc.C) { 42 cmd := cloud.NewSetDefaultRegionCommand() 43 _, err := cmdtesting.RunCommand(c, cmd, "somecloud", "us-west-1") 44 c.Assert(err, gc.ErrorMatches, `cloud somecloud not valid`) 45 } 46 47 func (s *defaultRegionSuite) assertSetDefaultRegion(c *gc.C, cmd cmd.Command, store *jujuclient.MemStore, cloud, errStr string) { 48 s.assertSetCustomDefaultRegion(c, cmd, store, cloud, "us-west-1", errStr) 49 } 50 51 func (s *defaultRegionSuite) assertSetCustomDefaultRegion(c *gc.C, cmd cmd.Command, store *jujuclient.MemStore, cloud, desiredDefault, errStr string) { 52 ctx, err := cmdtesting.RunCommand(c, cmd, cloud, desiredDefault) 53 output := cmdtesting.Stderr(ctx) 54 output = strings.Replace(output, "\n", "", -1) 55 if errStr != "" { 56 c.Assert(err, gc.ErrorMatches, errStr) 57 c.Assert(output, gc.Equals, "") 58 c.Assert(store.Credentials[cloud].DefaultRegion, gc.Equals, "") 59 return 60 } 61 c.Assert(err, jc.ErrorIsNil) 62 c.Assert(output, gc.Equals, fmt.Sprintf(`Default region in %s set to %q.`, cloud, desiredDefault)) 63 c.Assert(store.Credentials[cloud].DefaultRegion, gc.Equals, desiredDefault) 64 } 65 66 func (s *defaultRegionSuite) TestSetDefaultRegion(c *gc.C) { 67 store := jujuclient.NewMemStore() 68 store.Credentials["aws"] = jujucloud.CloudCredential{ 69 AuthCredentials: map[string]jujucloud.Credential{ 70 "one": {}, 71 }} 72 cmd := cloud.NewSetDefaultRegionCommandForTest(store) 73 s.assertSetDefaultRegion(c, cmd, store, "aws", "") 74 } 75 76 func (s *defaultRegionSuite) TestSetDefaultRegionBuiltIn(c *gc.C) { 77 store := jujuclient.NewMemStore() 78 store.Credentials["localhost"] = jujucloud.CloudCredential{ 79 AuthCredentials: map[string]jujucloud.Credential{ 80 "one": {}, 81 }} 82 cmd := cloud.NewSetDefaultRegionCommandForTest(store) 83 // Cloud 'localhost' is of type lxd. 84 s.assertSetCustomDefaultRegion(c, cmd, store, "localhost", "localhost", "") 85 } 86 87 func (s *defaultRegionSuite) TestOverwriteDefaultRegion(c *gc.C) { 88 store := jujuclient.NewMemStore() 89 store.Credentials["aws"] = jujucloud.CloudCredential{ 90 AuthCredentials: map[string]jujucloud.Credential{ 91 "one": {}, 92 }, 93 DefaultRegion: "us-east-1"} 94 cmd := cloud.NewSetDefaultRegionCommandForTest(store) 95 s.assertSetDefaultRegion(c, cmd, store, "aws", "") 96 } 97 98 func (s *defaultRegionSuite) TestCaseInsensitiveRegionSpecification(c *gc.C) { 99 store := jujuclient.NewMemStore() 100 store.Credentials["aws"] = jujucloud.CloudCredential{ 101 AuthCredentials: map[string]jujucloud.Credential{ 102 "one": {}, 103 }, 104 DefaultRegion: "us-east-1"} 105 106 cmd := cloud.NewSetDefaultRegionCommandForTest(store) 107 _, err := cmdtesting.RunCommand(c, cmd, "aws", "us-WEST-1") 108 c.Assert(err, jc.ErrorIsNil) 109 c.Assert(store.Credentials["aws"].DefaultRegion, gc.Equals, "us-west-1") 110 }