github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/worker/uniter/runner/jujuc/storage-get_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package jujuc_test
     5  
     6  import (
     7  	"encoding/json"
     8  	"io/ioutil"
     9  	"path/filepath"
    10  
    11  	"github.com/juju/cmd"
    12  	jc "github.com/juju/testing/checkers"
    13  	"github.com/juju/utils/featureflag"
    14  	gc "gopkg.in/check.v1"
    15  	goyaml "gopkg.in/yaml.v1"
    16  
    17  	"github.com/juju/juju/juju/osenv"
    18  	"github.com/juju/juju/testing"
    19  	"github.com/juju/juju/worker/uniter/runner/jujuc"
    20  )
    21  
    22  type storageGetSuite struct {
    23  	ContextSuite
    24  }
    25  
    26  var _ = gc.Suite(&storageGetSuite{})
    27  
    28  func (s *storageGetSuite) SetUpTest(c *gc.C) {
    29  	s.ContextSuite.SetUpTest(c)
    30  	s.PatchEnvironment(osenv.JujuFeatureFlagEnvKey, "storage")
    31  	featureflag.SetFlagsFromEnvironment(osenv.JujuFeatureFlagEnvKey)
    32  }
    33  
    34  var (
    35  	storageLocation = map[string]interface{}{"location": "/dev/sda"}
    36  )
    37  
    38  var storageGetTests = []struct {
    39  	args   []string
    40  	format int
    41  	out    interface{}
    42  }{
    43  	{[]string{"1234", "location", "--format", "yaml"}, formatYaml, storageLocation},
    44  	{[]string{"1234", "location", "--format", "json"}, formatJson, storageLocation},
    45  	{[]string{"1234", "location", "kind"}, -1, "kind: 1\nlocation: /dev/sda\n"},
    46  	{[]string{"1234", "location"}, -1, "/dev/sda\n"},
    47  }
    48  
    49  func (s *storageGetSuite) TestOutputFormatKey(c *gc.C) {
    50  	for i, t := range storageGetTests {
    51  		c.Logf("test %d: %#v", i, t.args)
    52  		hctx := s.GetHookContext(c, -1, "")
    53  		com, err := jujuc.NewCommand(hctx, cmdString("storage-get"))
    54  		c.Assert(err, jc.ErrorIsNil)
    55  		ctx := testing.Context(c)
    56  		code := cmd.Main(com, ctx, t.args)
    57  		c.Assert(code, gc.Equals, 0)
    58  		c.Assert(bufferString(ctx.Stderr), gc.Equals, "")
    59  
    60  		var out interface{}
    61  		var outMap map[string]interface{}
    62  		switch t.format {
    63  		case formatYaml:
    64  			c.Assert(goyaml.Unmarshal(bufferBytes(ctx.Stdout), &outMap), gc.IsNil)
    65  			out = outMap
    66  		case formatJson:
    67  			c.Assert(json.Unmarshal(bufferBytes(ctx.Stdout), &outMap), gc.IsNil)
    68  			out = outMap
    69  		default:
    70  			out = string(bufferBytes(ctx.Stdout))
    71  		}
    72  		c.Assert(out, gc.DeepEquals, t.out)
    73  	}
    74  }
    75  
    76  func (s *storageGetSuite) TestHelp(c *gc.C) {
    77  	hctx := s.GetHookContext(c, -1, "")
    78  	com, err := jujuc.NewCommand(hctx, cmdString("storage-get"))
    79  	c.Assert(err, jc.ErrorIsNil)
    80  	ctx := testing.Context(c)
    81  	code := cmd.Main(com, ctx, []string{"--help"})
    82  	c.Assert(code, gc.Equals, 0)
    83  	c.Assert(bufferString(ctx.Stdout), gc.Equals, `usage: storage-get [options] <storageInstanceId> <key> [<key>]*
    84  purpose: print information for storage instance with specified id
    85  
    86  options:
    87  --format  (= smart)
    88      specify output format (json|smart|yaml)
    89  -o, --output (= "")
    90      specify an output file
    91  
    92  When no <key> is supplied, all keys values are printed.
    93  `)
    94  	c.Assert(bufferString(ctx.Stderr), gc.Equals, "")
    95  }
    96  
    97  //
    98  func (s *storageGetSuite) TestOutputPath(c *gc.C) {
    99  	hctx := s.GetHookContext(c, -1, "")
   100  	com, err := jujuc.NewCommand(hctx, cmdString("storage-get"))
   101  	c.Assert(err, jc.ErrorIsNil)
   102  	ctx := testing.Context(c)
   103  	code := cmd.Main(com, ctx, []string{"--format", "yaml", "--output", "some-file", "1234", "location"})
   104  	c.Assert(code, gc.Equals, 0)
   105  	c.Assert(bufferString(ctx.Stderr), gc.Equals, "")
   106  	c.Assert(bufferString(ctx.Stdout), gc.Equals, "")
   107  	content, err := ioutil.ReadFile(filepath.Join(ctx.Dir, "some-file"))
   108  	c.Assert(err, jc.ErrorIsNil)
   109  
   110  	var out map[string]interface{}
   111  	c.Assert(goyaml.Unmarshal(content, &out), gc.IsNil)
   112  	c.Assert(out, gc.DeepEquals, storageLocation)
   113  }