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  }