github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/runner/jujuc/unit-get_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Copyright 2014 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 package jujuc_test 6 7 import ( 8 "strings" 9 10 "io/ioutil" 11 "path/filepath" 12 13 "github.com/juju/cmd" 14 "github.com/juju/cmd/cmdtesting" 15 jc "github.com/juju/testing/checkers" 16 gc "gopkg.in/check.v1" 17 18 "github.com/juju/juju/apiserver/params" 19 "github.com/juju/juju/worker/uniter/runner/jujuc" 20 ) 21 22 type UnitGetSuite struct { 23 ContextSuite 24 } 25 26 var _ = gc.Suite(&UnitGetSuite{}) 27 28 var unitGetTests = []struct { 29 args []string 30 out string 31 }{ 32 {[]string{"private-address"}, "192.168.0.99\n"}, 33 {[]string{"private-address", "--format", "yaml"}, "192.168.0.99\n"}, 34 {[]string{"private-address", "--format", "json"}, `"192.168.0.99"` + "\n"}, 35 {[]string{"public-address"}, "gimli.minecraft.testing.invalid\n"}, 36 {[]string{"public-address", "--format", "yaml"}, "gimli.minecraft.testing.invalid\n"}, 37 {[]string{"public-address", "--format", "json"}, `"gimli.minecraft.testing.invalid"` + "\n"}, 38 } 39 40 func (s *UnitGetSuite) createCommand(c *gc.C) cmd.Command { 41 hctx := s.GetHookContext(c, -1, "") 42 com, err := jujuc.NewCommand(hctx, cmdString("unit-get")) 43 c.Assert(err, jc.ErrorIsNil) 44 return jujuc.NewJujucCommandWrappedForTest(com) 45 } 46 47 func (s *UnitGetSuite) TestOutputFormat(c *gc.C) { 48 for _, t := range unitGetTests { 49 com := s.createCommand(c) 50 ctx := cmdtesting.Context(c) 51 code := cmd.Main(com, ctx, t.args) 52 c.Check(code, gc.Equals, 0) 53 c.Check(bufferString(ctx.Stderr), gc.Equals, "") 54 c.Check(bufferString(ctx.Stdout), gc.Matches, t.out) 55 } 56 } 57 58 func (s *UnitGetSuite) TestHelp(c *gc.C) { 59 com := s.createCommand(c) 60 ctx := cmdtesting.Context(c) 61 code := cmd.Main(com, ctx, []string{"--help"}) 62 c.Assert(code, gc.Equals, 0) 63 c.Assert(strings.Split(bufferString(ctx.Stdout), "\n")[0], gc.Equals, "Usage: unit-get [options] <setting>") 64 c.Assert(bufferString(ctx.Stderr), gc.Equals, "") 65 } 66 67 func (s *UnitGetSuite) TestOutputPath(c *gc.C) { 68 com := s.createCommand(c) 69 ctx := cmdtesting.Context(c) 70 code := cmd.Main(com, ctx, []string{"--output", "some-file", "private-address"}) 71 c.Assert(code, gc.Equals, 0) 72 c.Assert(bufferString(ctx.Stderr), gc.Equals, "") 73 c.Assert(bufferString(ctx.Stdout), gc.Equals, "") 74 content, err := ioutil.ReadFile(filepath.Join(ctx.Dir, "some-file")) 75 c.Assert(err, jc.ErrorIsNil) 76 c.Assert(string(content), gc.Equals, "192.168.0.99\n") 77 } 78 79 func (s *UnitGetSuite) TestUnknownSetting(c *gc.C) { 80 com := s.createCommand(c) 81 err := cmdtesting.InitCommand(com, []string{"protected-address"}) 82 c.Assert(err, gc.ErrorMatches, `unknown setting "protected-address"`) 83 } 84 85 func (s *UnitGetSuite) TestUnknownArg(c *gc.C) { 86 com := s.createCommand(c) 87 err := cmdtesting.InitCommand(com, []string{"private-address", "blah"}) 88 c.Assert(err, gc.ErrorMatches, `unrecognized args: \["blah"\]`) 89 } 90 91 func (s *UnitGetSuite) TestNetworkInfoPrivateAddress(c *gc.C) { 92 93 // first - test with no NetworkInfoResults, should fall back 94 resultsEmpty := make(map[string]params.NetworkInfoResult) 95 resultsNoDefault := make(map[string]params.NetworkInfoResult) 96 resultsNoDefault["binding"] = params.NetworkInfoResult{ 97 Info: []params.NetworkInfo{ 98 { 99 MACAddress: "00:11:22:33:44:0", 100 InterfaceName: "eth0", 101 Addresses: []params.InterfaceAddress{ 102 { 103 104 Address: "10.20.1.42", 105 CIDR: "10.20.1.42/24", 106 }, 107 }, 108 }, 109 }, 110 } 111 resultsDefaultNoAddress := make(map[string]params.NetworkInfoResult) 112 resultsDefaultNoAddress[""] = params.NetworkInfoResult{ 113 Info: []params.NetworkInfo{ 114 { 115 MACAddress: "00:11:22:33:44:0", 116 InterfaceName: "eth0", 117 }, 118 }, 119 } 120 resultsDefaultAddress := make(map[string]params.NetworkInfoResult) 121 resultsDefaultAddress[""] = params.NetworkInfoResult{ 122 Info: []params.NetworkInfo{ 123 { 124 MACAddress: "00:11:22:33:44:0", 125 InterfaceName: "eth0", 126 Addresses: []params.InterfaceAddress{ 127 { 128 Address: "10.20.1.42", 129 CIDR: "10.20.1.42/24", 130 }, 131 { 132 Address: "fc00::1", 133 CIDR: "fc00::/64", 134 }, 135 }, 136 }, 137 }, 138 } 139 140 resultsDefaultAddressV6 := make(map[string]params.NetworkInfoResult) 141 resultsDefaultAddressV6[""] = params.NetworkInfoResult{ 142 Info: []params.NetworkInfo{ 143 { 144 MACAddress: "00:11:22:33:44:0", 145 InterfaceName: "eth0", 146 Addresses: []params.InterfaceAddress{ 147 { 148 Address: "fc00::1", 149 CIDR: "fc00::/64", 150 }, 151 }, 152 }, 153 }, 154 } 155 156 launchCommand := func(input map[string]params.NetworkInfoResult, expected string) { 157 hctx := s.GetHookContext(c, -1, "") 158 hctx.info.NetworkInterface.NetworkInfoResults = input 159 com, err := jujuc.NewCommand(hctx, cmdString("unit-get")) 160 c.Assert(err, jc.ErrorIsNil) 161 ctx := cmdtesting.Context(c) 162 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, []string{"private-address"}) 163 c.Assert(code, gc.Equals, 0) 164 c.Assert(bufferString(ctx.Stderr), gc.Equals, "") 165 c.Assert(bufferString(ctx.Stdout), gc.Equals, expected+"\n") 166 } 167 168 launchCommand(resultsEmpty, "192.168.0.99") 169 launchCommand(resultsNoDefault, "192.168.0.99") 170 launchCommand(resultsDefaultNoAddress, "192.168.0.99") 171 launchCommand(resultsDefaultAddress, "10.20.1.42") 172 launchCommand(resultsDefaultAddressV6, "fc00::1") 173 }