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  }