github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/cmd/juju/commands/bootstrap_interactive_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package commands 5 6 import ( 7 "bufio" 8 "bytes" 9 "io/ioutil" 10 "strings" 11 12 "github.com/juju/testing" 13 jc "github.com/juju/testing/checkers" 14 gc "gopkg.in/check.v1" 15 16 jujucloud "github.com/juju/juju/cloud" 17 jujutesting "github.com/juju/juju/testing" 18 "github.com/juju/juju/version" 19 ) 20 21 type BSInteractSuite struct { 22 testing.IsolationSuite 23 } 24 25 var _ = gc.Suite(BSInteractSuite{}) 26 27 func (BSInteractSuite) TestInitEmpty(c *gc.C) { 28 cmd := &bootstrapCommand{} 29 err := jujutesting.InitCommand(cmd, nil) 30 c.Assert(err, jc.ErrorIsNil) 31 c.Assert(cmd.interactive, jc.IsTrue) 32 } 33 34 func (BSInteractSuite) TestInitBuildAgent(c *gc.C) { 35 cmd := &bootstrapCommand{} 36 err := jujutesting.InitCommand(cmd, []string{"--build-agent"}) 37 c.Assert(err, jc.ErrorIsNil) 38 c.Assert(cmd.interactive, jc.IsTrue) 39 c.Assert(cmd.BuildAgent, jc.IsTrue) 40 } 41 42 func (BSInteractSuite) TestInitArg(c *gc.C) { 43 cmd := &bootstrapCommand{} 44 err := jujutesting.InitCommand(cmd, []string{"foo"}) 45 c.Assert(err, gc.ErrorMatches, "controller name and cloud name are required") 46 c.Assert(cmd.interactive, jc.IsFalse) 47 } 48 49 func (BSInteractSuite) TestInitTwoArgs(c *gc.C) { 50 cmd := &bootstrapCommand{} 51 err := jujutesting.InitCommand(cmd, []string{"foo", "bar"}) 52 c.Assert(err, jc.ErrorIsNil) 53 c.Assert(cmd.interactive, jc.IsFalse) 54 } 55 56 func (BSInteractSuite) TestInitInfoOnlyFlag(c *gc.C) { 57 cmd := &bootstrapCommand{} 58 err := jujutesting.InitCommand(cmd, []string{"--clouds"}) 59 c.Assert(err, jc.ErrorIsNil) 60 c.Assert(cmd.interactive, jc.IsFalse) 61 } 62 63 func (BSInteractSuite) TestInitVariousFlags(c *gc.C) { 64 cmd := &bootstrapCommand{} 65 err := jujutesting.InitCommand(cmd, []string{"--keep-broken", "--agent-version", version.Current.String()}) 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(cmd.interactive, jc.IsTrue) 68 } 69 70 func (BSInteractSuite) TestQueryCloud(c *gc.C) { 71 input := "search\n" 72 73 scanner := bufio.NewScanner(strings.NewReader(input)) 74 clouds := []string{"books", "books-china", "search", "local"} 75 76 buf := bytes.Buffer{} 77 cloud, err := queryCloud(clouds, "local", scanner, &buf) 78 c.Assert(err, jc.ErrorIsNil) 79 c.Assert(cloud, gc.Equals, "search") 80 81 // clouds should be printed out in the same order as they're given. 82 expected := ` 83 Clouds 84 books 85 books-china 86 search 87 local 88 89 Select a cloud [local]: 90 `[1:] 91 c.Assert(buf.String(), gc.Equals, expected) 92 } 93 94 func (BSInteractSuite) TestQueryCloudDefault(c *gc.C) { 95 input := "\n" 96 97 scanner := bufio.NewScanner(strings.NewReader(input)) 98 clouds := []string{"books", "local"} 99 100 cloud, err := queryCloud(clouds, "local", scanner, ioutil.Discard) 101 c.Assert(err, jc.ErrorIsNil) 102 c.Assert(cloud, gc.Equals, "local") 103 } 104 105 func (BSInteractSuite) TestQueryRegion(c *gc.C) { 106 input := "mars-west1\n" 107 108 scanner := bufio.NewScanner(strings.NewReader(input)) 109 regions := []jujucloud.Region{ 110 {Name: "mars-east1"}, 111 {Name: "mars-west1"}, 112 {Name: "jupiter-central"}, 113 } 114 115 buf := bytes.Buffer{} 116 region, err := queryRegion("goggles", regions, scanner, &buf) 117 c.Assert(err, jc.ErrorIsNil) 118 c.Assert(region, gc.Equals, "mars-west1") 119 120 // regions should be alphabetized, and the first one in the original list 121 // should be the default. 122 expected := ` 123 Regions in goggles: 124 jupiter-central 125 mars-east1 126 mars-west1 127 128 Select a region in goggles [mars-east1]: 129 `[1:] 130 c.Assert(buf.String(), gc.Equals, expected) 131 } 132 133 func (BSInteractSuite) TestQueryRegionDefault(c *gc.C) { 134 input := "\n" 135 136 scanner := bufio.NewScanner(strings.NewReader(input)) 137 regions := []jujucloud.Region{ 138 {Name: "mars-east1"}, 139 {Name: "jupiter-central"}, 140 } 141 142 region, err := queryRegion("goggles", regions, scanner, ioutil.Discard) 143 c.Assert(err, jc.ErrorIsNil) 144 c.Assert(region, gc.Equals, regions[0].Name) 145 } 146 147 func (BSInteractSuite) TestQueryName(c *gc.C) { 148 input := "awesome-cloud\n" 149 150 scanner := bufio.NewScanner(strings.NewReader(input)) 151 buf := bytes.Buffer{} 152 name, err := queryName("default-cloud", scanner, &buf) 153 c.Assert(err, jc.ErrorIsNil) 154 c.Assert(name, gc.Equals, "awesome-cloud") 155 156 expected := ` 157 Enter a name for the Controller [default-cloud]: 158 `[1:] 159 c.Assert(buf.String(), gc.Equals, expected) 160 } 161 162 func (BSInteractSuite) TestQueryNameDefault(c *gc.C) { 163 input := "\n" 164 165 scanner := bufio.NewScanner(strings.NewReader(input)) 166 name, err := queryName("default-cloud", scanner, ioutil.Discard) 167 c.Assert(err, jc.ErrorIsNil) 168 c.Assert(name, gc.Equals, "default-cloud") 169 }