Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 // Copyright 2014 Canonical Ltd. | 1 // Copyright 2014 Canonical Ltd. |
2 // Licensed under the AGPLv3, see LICENCE file for details. | 2 // Licensed under the AGPLv3, see LICENCE file for details. |
3 | 3 |
4 package peergrouper | 4 package peergrouper |
5 | 5 |
6 import ( | 6 import ( |
7 "errors" | 7 "errors" |
8 "fmt" | 8 "fmt" |
9 "time" | 9 "time" |
10 | 10 |
(...skipping 29 matching lines...) Expand all Loading... | |
40 func (s *workerSuite) SetUpTest(c *gc.C) { | 40 func (s *workerSuite) SetUpTest(c *gc.C) { |
41 s.LoggingSuite.SetUpTest(c) | 41 s.LoggingSuite.SetUpTest(c) |
42 resetErrors() | 42 resetErrors() |
43 } | 43 } |
44 | 44 |
45 // initState initializes the fake state with a single | 45 // initState initializes the fake state with a single |
46 // replicaset member and numMachines machines | 46 // replicaset member and numMachines machines |
47 // primed to vote. | 47 // primed to vote. |
48 func initState(c *gc.C, st *fakeState, numMachines int) { | 48 func initState(c *gc.C, st *fakeState, numMachines int) { |
49 var ids []string | 49 var ids []string |
50 » for i := 10; i < 13; i++ { | 50 » for i := 10; i < 10+numMachines; i++ { |
51 id := fmt.Sprint(i) | 51 id := fmt.Sprint(i) |
52 m := st.addMachine(id, true) | 52 m := st.addMachine(id, true) |
53 m.setStateHostPort(fmt.Sprintf("0.1.2.%d:%d", i, mongoPort)) | 53 m.setStateHostPort(fmt.Sprintf("0.1.2.%d:%d", i, mongoPort)) |
54 ids = append(ids, id) | 54 ids = append(ids, id) |
55 } | 55 } |
56 st.machine("10").SetHasVote(true) | 56 st.machine("10").SetHasVote(true) |
57 st.setStateServers(ids...) | 57 st.setStateServers(ids...) |
58 st.session.Set(mkMembers("0v")) | 58 st.session.Set(mkMembers("0v")) |
59 st.session.setStatus(mkStatuses("0p")) | 59 st.session.setStatus(mkStatuses("0p")) |
60 st.check = checkInvariants | 60 st.check = checkInvariants |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
146 // members. | 146 // members. |
147 st.machine("11").setStateHostPort("0.1.99.99:9876") | 147 st.machine("11").setStateHostPort("0.1.99.99:9876") |
148 | 148 |
149 mustNext(c, memberWatcher) | 149 mustNext(c, memberWatcher) |
150 expectMembers := mkMembers("0v 1 2") | 150 expectMembers := mkMembers("0v 1 2") |
151 expectMembers[1].Address = "0.1.99.99:9876" | 151 expectMembers[1].Address = "0.1.99.99:9876" |
152 c.Assert(memberWatcher.Value(), jc.DeepEquals, expectMembers) | 152 c.Assert(memberWatcher.Value(), jc.DeepEquals, expectMembers) |
153 } | 153 } |
154 | 154 |
155 var fatalErrorsTests = []struct { | 155 var fatalErrorsTests = []struct { |
156 » errPat string | 156 » errPattern string |
dimitern
2014/02/26 15:50:00
s/errPat/pattern/ ?
rog
2014/02/26 16:58:09
Done.
| |
157 » err error | 157 » err error |
dimitern
2014/02/26 15:50:00
Do you really need err here when it's always the s
rog
2014/02/26 16:58:09
Done.
| |
158 » expectErr string | 158 » expectErr string |
159 }{{ | 159 }{{ |
160 » errPat: "State.StateServerInfo", | 160 » errPattern: "State.StateServerInfo", |
161 » err: errors.New("sample"), | 161 » expectErr: "cannot get state server info: sample", |
162 » expectErr: "cannot get state server info: sample", | 162 }, { |
163 }, { | 163 » errPattern: "Machine.SetHasVote 11 true", |
164 » errPat: "Machine.SetHasVote 11 true", | 164 » expectErr: `cannot set voting status of "11" to true: sample`, |
165 » err: errors.New("sample"), | 165 }, { |
166 » expectErr: `cannot set voting status of "11" to true: sample`, | 166 » errPattern: "Session.CurrentStatus", |
167 }, { | 167 » expectErr: "cannot get replica set status: sample", |
168 » errPat: "Session.CurrentStatus", | 168 }, { |
169 » err: errors.New("sample"), | 169 » errPattern: "Session.CurrentMembers", |
170 » expectErr: "cannot get replica set status: sample", | 170 » expectErr: "cannot get replica set members: sample", |
171 }, { | 171 }, { |
172 » errPat: "Session.CurrentMembers", | 172 » errPattern: "State.Machine *", |
173 » err: errors.New("sample"), | 173 » expectErr: `cannot get machine "10": sample`, |
174 » expectErr: "cannot get replica set members: sample", | |
175 }} | 174 }} |
176 | 175 |
177 func (s *workerSuite) TestFatalErrors(c *gc.C) { | 176 func (s *workerSuite) TestFatalErrors(c *gc.C) { |
178 testbase.PatchValue(&pollInterval, 5*time.Millisecond) | 177 testbase.PatchValue(&pollInterval, 5*time.Millisecond) |
179 for i, test := range fatalErrorsTests { | 178 for i, test := range fatalErrorsTests { |
180 » » c.Logf("test %d: %s -> %s", i, test.errPat, test.expectErr) | 179 » » c.Logf("test %d: %s -> %s", i, test.errPattern, test.expectErr) |
181 resetErrors() | 180 resetErrors() |
182 st := newFakeState() | 181 st := newFakeState() |
183 st.session.InstantlyReady = true | 182 st.session.InstantlyReady = true |
184 initState(c, st, 3) | 183 initState(c, st, 3) |
185 » » setErrorFor(test.errPat, test.err) | 184 » » setErrorFor(test.errPattern, errors.New("sample")) |
186 w := newWorker(st) | 185 w := newWorker(st) |
187 done := make(chan error) | 186 done := make(chan error) |
188 go func() { | 187 go func() { |
189 done <- w.Wait() | 188 done <- w.Wait() |
190 }() | 189 }() |
191 select { | 190 select { |
192 case err := <-done: | 191 case err := <-done: |
193 c.Assert(err, gc.ErrorMatches, test.expectErr) | 192 c.Assert(err, gc.ErrorMatches, test.expectErr) |
194 case <-time.After(coretesting.LongWait): | 193 case <-time.After(coretesting.LongWait): |
195 c.Fatalf("timed out waiting for error") | 194 c.Fatalf("timed out waiting for error") |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
231 val = w.Value() | 230 val = w.Value() |
232 c.Logf("mustNext done %p, ok %v", w, ok) | 231 c.Logf("mustNext done %p, ok %v", w, ok) |
233 done <- struct{}{} | 232 done <- struct{}{} |
234 }() | 233 }() |
235 select { | 234 select { |
236 case <-done: | 235 case <-done: |
237 return | 236 return |
238 case <-time.After(coretesting.LongWait): | 237 case <-time.After(coretesting.LongWait): |
239 c.Fatalf("timed out waiting for value to be set") | 238 c.Fatalf("timed out waiting for value to be set") |
240 } | 239 } |
241 panic("unreachable") | 240 panic("unreachable") |
dimitern
2014/02/26 15:50:00
no need for this?
rog
2014/02/26 16:58:09
we do need it because the go compiler doesn't
know
| |
242 } | 241 } |
LEFT | RIGHT |