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 }