github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/uniter/runner/jujuc/relation-list_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 "fmt" 9 10 "github.com/juju/cmd" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/testing" 15 "github.com/juju/juju/worker/uniter/runner/jujuc" 16 ) 17 18 type RelationListSuite struct { 19 relationSuite 20 } 21 22 var _ = gc.Suite(&RelationListSuite{}) 23 24 var relationListTests = []struct { 25 summary string 26 relid int 27 members0, members1 []string 28 args []string 29 code int 30 out string 31 }{ 32 { 33 summary: "no default relation, no arg", 34 relid: -1, 35 code: 2, 36 out: "no relation id specified", 37 }, { 38 summary: "no default relation, bad arg", 39 relid: -1, 40 args: []string{"-r", "bad"}, 41 code: 2, 42 out: `invalid value "bad" for flag -r: invalid relation id`, 43 }, { 44 summary: "no default relation, unknown arg", 45 relid: -1, 46 args: []string{"-r", "unknown:123"}, 47 code: 2, 48 out: `invalid value "unknown:123" for flag -r: relation not found`, 49 }, { 50 summary: "default relation, bad arg", 51 relid: 1, 52 args: []string{"-r", "bad"}, 53 code: 2, 54 out: `invalid value "bad" for flag -r: invalid relation id`, 55 }, { 56 summary: "default relation, unknown arg", 57 relid: 1, 58 args: []string{"-r", "unknown:123"}, 59 code: 2, 60 out: `invalid value "unknown:123" for flag -r: relation not found`, 61 }, { 62 summary: "default relation, no members", 63 relid: 1, 64 }, { 65 summary: "default relation, members", 66 members1: []string{"foo", "bar", "baz"}, 67 relid: 1, 68 out: "bar\nbaz\nfoo", 69 }, { 70 summary: "alternative relation, members", 71 members0: []string{"pew", "pow", "paw"}, 72 relid: 1, 73 args: []string{"-r", "ignored:0"}, 74 out: "paw\npew\npow", 75 }, { 76 summary: "explicit smart formatting 1", 77 relid: 1, 78 args: []string{"--format", "smart"}, 79 }, { 80 summary: "explicit smart formatting 2", 81 members1: []string{"foo", "bar", "baz"}, 82 relid: 1, 83 args: []string{"--format", "smart"}, 84 out: "bar\nbaz\nfoo", 85 }, { 86 summary: "json formatting 1", 87 relid: 1, 88 args: []string{"--format", "json"}, 89 out: "[]", 90 }, { 91 summary: "json formatting 2", 92 members1: []string{"foo", "bar", "baz"}, 93 relid: 1, 94 args: []string{"--format", "json"}, 95 out: `["bar","baz","foo"]`, 96 }, { 97 summary: "yaml formatting 1", 98 relid: 1, 99 args: []string{"--format", "yaml"}, 100 out: "[]", 101 }, { 102 summary: "yaml formatting 2", 103 members1: []string{"foo", "bar", "baz"}, 104 relid: 1, 105 args: []string{"--format", "yaml"}, 106 out: "- bar\n- baz\n- foo", 107 }, 108 } 109 110 func (s *RelationListSuite) TestRelationList(c *gc.C) { 111 for i, t := range relationListTests { 112 c.Logf("test %d: %s", i, t.summary) 113 hctx, info := s.newHookContext(t.relid, "") 114 info.setRelations(0, t.members0) 115 info.setRelations(1, t.members1) 116 c.Logf("%#v %#v", info.rels[t.relid], t.members1) 117 com, err := jujuc.NewCommand(hctx, cmdString("relation-list")) 118 c.Assert(err, jc.ErrorIsNil) 119 ctx := testing.Context(c) 120 code := cmd.Main(com, ctx, t.args) 121 c.Logf(bufferString(ctx.Stderr)) 122 c.Assert(code, gc.Equals, t.code) 123 if code == 0 { 124 c.Check(bufferString(ctx.Stderr), gc.Equals, "") 125 expect := t.out 126 if expect != "" { 127 expect += "\n" 128 } 129 c.Check(bufferString(ctx.Stdout), gc.Equals, expect) 130 } else { 131 c.Check(bufferString(ctx.Stdout), gc.Equals, "") 132 expect := fmt.Sprintf(`(.|\n)*error: %s\n`, t.out) 133 c.Check(bufferString(ctx.Stderr), gc.Matches, expect) 134 } 135 } 136 } 137 138 func (s *RelationListSuite) TestRelationListHelp(c *gc.C) { 139 template := ` 140 Usage: relation-list [options] 141 142 Summary: 143 list relation units 144 145 Options: 146 --format (= smart) 147 Specify output format (json|smart|yaml) 148 -o, --output (= "") 149 Specify an output file 150 -r, --relation (= %s) 151 specify a relation by id 152 %s`[1:] 153 154 for relid, t := range map[int]struct { 155 usage, doc string 156 }{ 157 -1: {"", "\nDetails:\n-r must be specified when not in a relation hook\n"}, 158 0: {"peer0:0", ""}, 159 } { 160 c.Logf("test relid %d", relid) 161 hctx, _ := s.newHookContext(relid, "") 162 com, err := jujuc.NewCommand(hctx, cmdString("relation-list")) 163 c.Assert(err, jc.ErrorIsNil) 164 ctx := testing.Context(c) 165 code := cmd.Main(com, ctx, []string{"--help"}) 166 c.Assert(code, gc.Equals, 0) 167 expect := fmt.Sprintf(template, t.usage, t.doc) 168 c.Assert(bufferString(ctx.Stdout), gc.Equals, expect) 169 c.Assert(bufferString(ctx.Stderr), gc.Equals, "") 170 } 171 }