github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/cloud/remove_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  	"io/ioutil"
     8  
     9  	"github.com/juju/cmd/cmdtesting"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	jujucloud "github.com/juju/juju/cloud"
    14  	"github.com/juju/juju/cmd/juju/cloud"
    15  	"github.com/juju/juju/juju/osenv"
    16  	"github.com/juju/juju/testing"
    17  )
    18  
    19  type removeSuite struct {
    20  	testing.FakeJujuXDGDataHomeSuite
    21  }
    22  
    23  var _ = gc.Suite(&removeSuite{})
    24  
    25  func (s *removeSuite) TestRemoveBadArgs(c *gc.C) {
    26  	cmd := cloud.NewRemoveCloudCommand()
    27  	_, err := cmdtesting.RunCommand(c, cmd)
    28  	c.Assert(err, gc.ErrorMatches, "Usage: juju remove-cloud <cloud name>")
    29  	_, err = cmdtesting.RunCommand(c, cmd, "cloud", "extra")
    30  	c.Assert(err, gc.ErrorMatches, `unrecognized args: \["extra"\]`)
    31  }
    32  
    33  func (s *removeSuite) TestRemoveNotFound(c *gc.C) {
    34  	cmd := cloud.NewRemoveCloudCommand()
    35  	ctx, err := cmdtesting.RunCommand(c, cmd, "fnord")
    36  	c.Assert(err, jc.ErrorIsNil)
    37  	c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "No personal cloud called \"fnord\" exists\n")
    38  }
    39  
    40  func (s *removeSuite) createTestCloudData(c *gc.C) {
    41  	err := ioutil.WriteFile(osenv.JujuXDGDataHomePath("public-clouds.yaml"), []byte(`
    42  clouds:
    43    prodstack:
    44      type: openstack
    45      auth-types: [userpass, access-key]
    46      endpoint: http://homestack
    47  `[1:]), 0600)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	err = ioutil.WriteFile(osenv.JujuXDGDataHomePath("clouds.yaml"), []byte(`
    51  clouds:
    52    homestack:
    53      type: openstack
    54      auth-types: [userpass, access-key]
    55      endpoint: http://homestack
    56    homestack2:
    57      type: openstack
    58      auth-types: [userpass, access-key]
    59      endpoint: http://homestack2
    60  `[1:]), 0600)
    61  	c.Assert(err, jc.ErrorIsNil)
    62  }
    63  
    64  func (s *removeSuite) TestRemoveCloud(c *gc.C) {
    65  	s.createTestCloudData(c)
    66  	assertPersonalClouds(c, "homestack", "homestack2")
    67  	ctx, err := cmdtesting.RunCommand(c, cloud.NewRemoveCloudCommand(), "homestack")
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "Removed details of personal cloud \"homestack\"\n")
    70  	assertPersonalClouds(c, "homestack2")
    71  }
    72  
    73  func (s *removeSuite) TestCannotRemovePublicCloud(c *gc.C) {
    74  	s.createTestCloudData(c)
    75  	ctx, err := cmdtesting.RunCommand(c, cloud.NewRemoveCloudCommand(), "prodstack")
    76  	c.Assert(err, jc.ErrorIsNil)
    77  	c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "No personal cloud called \"prodstack\" exists\n")
    78  }
    79  
    80  func assertPersonalClouds(c *gc.C, names ...string) {
    81  	personalClouds, err := jujucloud.PersonalCloudMetadata()
    82  	c.Assert(err, jc.ErrorIsNil)
    83  	actual := make([]string, 0, len(personalClouds))
    84  	for name := range personalClouds {
    85  		actual = append(actual, name)
    86  	}
    87  	c.Assert(actual, jc.SameContents, names)
    88  }