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 }