Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(489)

Delta Between Two Patch Sets: cmd/jujuc/server/relation-set_test.go

Issue 6446067: implement relation-set
Left Patch Set: Created 12 years, 8 months ago
Right Patch Set: implement relation-set Created 12 years, 8 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « cmd/jujuc/server/relation-set.go ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 package server_test 1 package server_test
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 . "launchpad.net/gocheck" 5 . "launchpad.net/gocheck"
6 "launchpad.net/juju-core/cmd" 6 "launchpad.net/juju-core/cmd"
7 "launchpad.net/juju-core/cmd/jujuc/server" 7 "launchpad.net/juju-core/cmd/jujuc/server"
8 "launchpad.net/juju-core/state" 8 "launchpad.net/juju-core/state"
9 ) 9 )
10 10
(...skipping 11 matching lines...) Expand all
22 func (s *RelationSetSuite) TestHelp(c *C) { 22 func (s *RelationSetSuite) TestHelp(c *C) {
23 for i, t := range helpTests { 23 for i, t := range helpTests {
24 c.Logf("test %d", i) 24 c.Logf("test %d", i)
25 hctx := s.GetHookContext(c, t.relid, "") 25 hctx := s.GetHookContext(c, t.relid, "")
26 com, err := hctx.NewCommand("relation-set") 26 com, err := hctx.NewCommand("relation-set")
27 c.Assert(err, IsNil) 27 c.Assert(err, IsNil)
28 ctx := dummyContext(c) 28 ctx := dummyContext(c)
29 code := cmd.Main(com, ctx, []string{"--help"}) 29 code := cmd.Main(com, ctx, []string{"--help"})
30 c.Assert(code, Equals, 0) 30 c.Assert(code, Equals, 0)
31 c.Assert(bufferString(ctx.Stdout), Equals, "") 31 c.Assert(bufferString(ctx.Stdout), Equals, "")
32 » » c.Assert(bufferString(ctx.Stderr), Equals, fmt.Sprintf(`usage: r elation-set [options] <key=value> [, ...] 32 » » c.Assert(bufferString(ctx.Stderr), Equals, fmt.Sprintf(`
33 usage: relation-set [options] key=value [key=value ...]
33 purpose: set relation settings 34 purpose: set relation settings
34 35
35 options: 36 options:
36 -r (= "%s") 37 -r (= "%s")
37 relation id 38 relation id
38 `, t.expect)) 39 `[1:], t.expect))
39 } 40 }
40 } 41 }
41 42
42 var relationSetInitTests = []struct { 43 var relationSetInitTests = []struct {
43 ctxrelid int 44 ctxrelid int
44 args []string 45 args []string
45 err string 46 err string
46 relid int 47 relid int
47 » settings map[string]interface{} 48 » settings map[string]string
48 }{ 49 }{
49 » {-1, nil, `no relation specified`, 0, nil}, 50 » {
50 » {1, nil, `no settings specified`, 0, nil}, 51 » » ctxrelid: -1,
51 » {-1, []string{"-r", "one"}, `invalid relation id "one"`, 0, nil}, 52 » » err: `no relation specified`,
52 » {1, []string{"-r", "one"}, `invalid relation id "one"`, 0, nil}, 53 » }, {
53 » {-1, []string{"-r", "ignored:one"}, `invalid relation id "ignored:one"`, 0, nil}, 54 » » ctxrelid: 1,
54 » {1, []string{"-r", "ignored:one"}, `invalid relation id "ignored:one"`, 0, nil}, 55 » » err: `expected "key=value" parameters, got nothing`,
55 » {-1, []string{"-r", "2"}, `unknown relation id "2"`, 0, nil}, 56 » }, {
56 » {1, []string{"-r", "ignored:2"}, `unknown relation id "ignored:2"`, 0, n il}, 57 » » ctxrelid: -1,
57 » {-1, []string{"-r", "ignored:0"}, `no settings specified`, 0, nil}, 58 » » args: []string{"-r", "one"},
58 » {1, []string{"-r", "ignored:0"}, `no settings specified`, 0, nil}, 59 » » err: `invalid relation id "one"`,
59 » {-1, []string{"-r", "0"}, `no settings specified`, 0, nil}, 60 » }, {
60 » {1, []string{"-r", "0"}, `no settings specified`, 0, nil}, 61 » » ctxrelid: 1,
61 » {-1, []string{"-r", "1"}, `no settings specified`, 0, nil}, 62 » » args: []string{"-r", "one"},
62 » {0, []string{"-r", "1"}, `no settings specified`, 0, nil}, 63 » » err: `invalid relation id "one"`,
63 » {1, []string{"foo='"}, `cannot parse "foo='": YAML error: .*`, 0, nil}, 64 » },
64 » {1, []string{"=haha"}, `cannot parse "=haha": no key specified`, 0, nil} , 65 » {
65 » {1, []string{"foo=bar"}, ``, 1, map[string]interface{}{"foo": "bar"}}, 66 » » ctxrelid: -1,
66 » {0, []string{"-r", "1", "foo=bar"}, ``, 1, map[string]interface{}{"foo": "bar"}}, 67 » » args: []string{"-r", "ignored:one"},
67 » {1, []string{"foo=123", "bar=true", "baz=4.5", "qux="}, ``, 1, map[strin g]interface{}{ 68 » » err: `invalid relation id "ignored:one"`,
68 » » "foo": 123, "bar": true, "baz": 4.5, "qux": nil, 69 » }, {
69 » }}, 70 » » ctxrelid: 1,
71 » » args: []string{"-r", "ignored:one"}, err: `invalid relation id "ignored:one"`,
72 » }, {
73 » » ctxrelid: -1,
74 » » args: []string{"-r", "2"},
75 » » err: `unknown relation id "2"`,
76 » }, {
77 » » ctxrelid: 1,
78 » » args: []string{"-r", "ignored:2"},
79 » » err: `unknown relation id "ignored:2"`,
80 » },
81 » {
82 » » ctxrelid: -1,
83 » » args: []string{"-r", "ignored:0"},
84 » » err: `expected "key=value" parameters, got nothing`,
85 » }, {
86 » » ctxrelid: 1,
87 » » args: []string{"-r", "ignored:0"},
88 » » err: `expected "key=value" parameters, got nothing`,
89 » }, {
90 » » ctxrelid: -1,
91 » » args: []string{"-r", "0"},
92 » » err: `expected "key=value" parameters, got nothing`,
93 » }, {
94 » » ctxrelid: 1,
95 » » args: []string{"-r", "0"},
96 » » err: `expected "key=value" parameters, got nothing`,
97 » }, {
98 » » ctxrelid: -1,
99 » » args: []string{"-r", "1"},
100 » » err: `expected "key=value" parameters, got nothing`,
101 » }, {
102 » » ctxrelid: 0,
103 » » args: []string{"-r", "1"},
104 » » err: `expected "key=value" parameters, got nothing`,
105 » }, {
106 » » ctxrelid: 1,
107 » » args: []string{"haha"},
108 » » err: `expected "key=value", got "haha"`,
109 » }, {
110 » » ctxrelid: 1,
111 » » args: []string{"=haha"},
112 » » err: `expected "key=value", got "=haha"`,
113 » }, {
114 » » ctxrelid: 1,
115 » » args: []string{"foo="},
116 » » relid: 1,
117 » » settings: map[string]string{"foo": ""},
118 » }, {
119 » » ctxrelid: 1,
120 » » args: []string{"foo='"},
121 » » relid: 1,
122 » » settings: map[string]string{"foo": "'"},
123 » }, {
124 » » ctxrelid: 1,
125 » » args: []string{"foo=bar"},
126 » » relid: 1,
127 » » settings: map[string]string{"foo": "bar"},
128 » }, {
129 » » ctxrelid: 1,
130 » » args: []string{"foo=bar=baz=qux"},
131 » » relid: 1,
132 » » settings: map[string]string{"foo": "bar=baz=qux"},
133 » }, {
134 » » ctxrelid: 1,
135 » » args: []string{"foo=foo: bar"},
136 » » relid: 1,
137 » » settings: map[string]string{"foo": "foo: bar"},
138 » }, {
139 » » ctxrelid: 0,
140 » » args: []string{"-r", "1", "foo=bar"},
141 » » relid: 1,
142 » » settings: map[string]string{"foo": "bar"},
143 » }, {
144 » » ctxrelid: 1,
145 » » args: []string{"foo=123", "bar=true", "baz=4.5", "qux="},
146 » » relid: 1,
147 » » settings: map[string]string{"foo": "123", "bar": "true", "baz": "4.5", "qux": ""},
148 » },
70 } 149 }
71 150
72 func (s *RelationSetSuite) TestInit(c *C) { 151 func (s *RelationSetSuite) TestInit(c *C) {
73 for i, t := range relationSetInitTests { 152 for i, t := range relationSetInitTests {
74 c.Logf("test %d", i) 153 c.Logf("test %d", i)
75 hctx := s.GetHookContext(c, t.ctxrelid, "") 154 hctx := s.GetHookContext(c, t.ctxrelid, "")
76 com, err := hctx.NewCommand("relation-set") 155 com, err := hctx.NewCommand("relation-set")
77 c.Assert(err, IsNil) 156 c.Assert(err, IsNil)
78 err = com.Init(dummyFlagSet(), t.args) 157 err = com.Init(dummyFlagSet(), t.args)
79 if t.err == "" { 158 if t.err == "" {
80 c.Assert(err, IsNil) 159 c.Assert(err, IsNil)
81 rset := com.(*server.RelationSetCommand) 160 rset := com.(*server.RelationSetCommand)
82 c.Assert(rset.RelationId, Equals, t.relid) 161 c.Assert(rset.RelationId, Equals, t.relid)
83 c.Assert(rset.Settings, DeepEquals, t.settings) 162 c.Assert(rset.Settings, DeepEquals, t.settings)
84 } else { 163 } else {
85 c.Assert(err, ErrorMatches, t.err) 164 c.Assert(err, ErrorMatches, t.err)
86 } 165 }
87 } 166 }
88 } 167 }
89 168
169 // Tests start with a relation with the settings {"base": "value"}
90 var relationSetRunTests = []struct { 170 var relationSetRunTests = []struct {
91 » settings map[string]interface{} 171 » change map[string]string
92 » expect map[string]interface{} 172 » expect map[string]interface{}
93 }{ 173 }{
94 » {map[string]interface{}{ 174 » {
95 » » "base": nil, 175 » » map[string]string{"base": ""},
96 » }, map[string]interface{}{}}, 176 » » map[string]interface{}{},
97 » {map[string]interface{}{ 177 » }, {
98 » » "foo": "bar", 178 » » map[string]string{"foo": "bar"},
99 » }, map[string]interface{}{ 179 » » map[string]interface{}{"base": "value", "foo": "bar"},
100 » » "base": "value", 180 » }, {
101 » » "foo": "bar", 181 » » map[string]string{"base": "changed"},
102 » }}, 182 » » map[string]interface{}{"base": "changed"},
103 » {map[string]interface{}{ 183 » },
104 » » "base": "changed",
105 » }, map[string]interface{}{
106 » » "base": "changed",
107 » }},
108 } 184 }
109 185
110 func (s *RelationSetSuite) TestRun(c *C) { 186 func (s *RelationSetSuite) TestRun(c *C) {
111 hctx := s.GetHookContext(c, 0, "") 187 hctx := s.GetHookContext(c, 0, "")
112 for i, t := range relationSetRunTests { 188 for i, t := range relationSetRunTests {
113 c.Logf("test %d", i) 189 c.Logf("test %d", i)
114 190
115 // Set base settings for this test's relations. 191 // Set base settings for this test's relations.
116 » » err := hctx.Relations[1].Flush(false) 192 » » hctx.Relations[1].ClearCache()
117 pristine := map[string]interface{}{"pristine": "untouched"} 193 pristine := map[string]interface{}{"pristine": "untouched"}
118 setSettings(c, s.relunits[0], pristine) 194 setSettings(c, s.relunits[0], pristine)
119 basic := map[string]interface{}{"base": "value"} 195 basic := map[string]interface{}{"base": "value"}
120 setSettings(c, s.relunits[1], basic) 196 setSettings(c, s.relunits[1], basic)
121 settings, err := s.relunits[1].ReadSettings("u/0") 197 settings, err := s.relunits[1].ReadSettings("u/0")
122 198
123 // Run the command. 199 // Run the command.
124 c.Assert(err, IsNil) 200 c.Assert(err, IsNil)
125 com, err := hctx.NewCommand("relation-set") 201 com, err := hctx.NewCommand("relation-set")
126 c.Assert(err, IsNil) 202 c.Assert(err, IsNil)
127 rset := com.(*server.RelationSetCommand) 203 rset := com.(*server.RelationSetCommand)
128 rset.RelationId = 1 204 rset.RelationId = 1
129 » » rset.Settings = t.settings 205 » » rset.Settings = t.change
130 ctx := dummyContext(c) 206 ctx := dummyContext(c)
131 err = com.Run(ctx) 207 err = com.Run(ctx)
132 c.Assert(err, IsNil) 208 c.Assert(err, IsNil)
133 209
134 // Check that the changes are present in the RelationContext's 210 // Check that the changes are present in the RelationContext's
135 // settings... 211 // settings...
136 node, err := hctx.Relations[1].Settings() 212 node, err := hctx.Relations[1].Settings()
137 c.Assert(err, IsNil) 213 c.Assert(err, IsNil)
138 c.Assert(node.Map(), DeepEquals, t.expect) 214 c.Assert(node.Map(), DeepEquals, t.expect)
139 215
140 // ...but are not persisted to state... 216 // ...but are not persisted to state...
141 settings, err = s.relunits[1].ReadSettings("u/0") 217 settings, err = s.relunits[1].ReadSettings("u/0")
142 c.Assert(err, IsNil) 218 c.Assert(err, IsNil)
143 c.Assert(settings, DeepEquals, basic) 219 c.Assert(settings, DeepEquals, basic)
144 220
145 » » // ...until the relation context is flushed. 221 » » // ...until we ask for it.
146 » » err = hctx.Relations[1].Flush(true) 222 » » err = hctx.Relations[1].WriteSettings()
147 c.Assert(err, IsNil) 223 c.Assert(err, IsNil)
148 settings, err = s.relunits[1].ReadSettings("u/0") 224 settings, err = s.relunits[1].ReadSettings("u/0")
149 c.Assert(settings, DeepEquals, t.expect) 225 c.Assert(settings, DeepEquals, t.expect)
150 226
151 // For paranoia's sake, check that the other relation's settings have 227 // For paranoia's sake, check that the other relation's settings have
152 // not been touched... 228 // not been touched...
153 settings, err = s.relunits[0].ReadSettings("u/0") 229 settings, err = s.relunits[0].ReadSettings("u/0")
154 c.Assert(err, IsNil) 230 c.Assert(err, IsNil)
155 c.Assert(settings, DeepEquals, pristine) 231 c.Assert(settings, DeepEquals, pristine)
156 232
157 // ...even when flushed. 233 // ...even when flushed.
158 » » err = hctx.Relations[0].Flush(true) 234 » » err = hctx.Relations[0].WriteSettings()
159 c.Assert(err, IsNil) 235 c.Assert(err, IsNil)
160 settings, err = s.relunits[0].ReadSettings("u/0") 236 settings, err = s.relunits[0].ReadSettings("u/0")
161 c.Assert(err, IsNil) 237 c.Assert(err, IsNil)
162 c.Assert(settings, DeepEquals, pristine) 238 c.Assert(settings, DeepEquals, pristine)
163 } 239 }
164 } 240 }
165 241
166 func setSettings(c *C, ru *state.RelationUnit, settings map[string]interface{}) { 242 func setSettings(c *C, ru *state.RelationUnit, settings map[string]interface{}) {
167 node, err := ru.Settings() 243 node, err := ru.Settings()
168 c.Assert(err, IsNil) 244 c.Assert(err, IsNil)
169 for _, k := range node.Keys() { 245 for _, k := range node.Keys() {
170 node.Delete(k) 246 node.Delete(k)
171 } 247 }
172 node.Update(settings) 248 node.Update(settings)
173 _, err = node.Write() 249 _, err = node.Write()
174 c.Assert(err, IsNil) 250 c.Assert(err, IsNil)
175 } 251 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b