@@ -2,6 +2,7 @@ package ring
2
2
3
3
import (
4
4
"errors"
5
+ "fmt"
5
6
"testing"
6
7
7
8
"github.com/stretchr/testify/assert"
@@ -154,6 +155,50 @@ func TestDefaultResultTracker(t *testing.T) {
154
155
assert .Equal (t , []interface {}{[]int {1 , 1 , 1 }, []int {2 , 2 , 2 }, []int {3 , 3 , 3 }}, tracker .getResults ())
155
156
},
156
157
},
158
+ "failedCompletely() should return true only if all instances have failed, regardless of max errors" : {
159
+ instances : []InstanceDesc {instance1 , instance2 , instance3 },
160
+ maxErrors : 1 ,
161
+ run : func (t * testing.T , tracker * defaultResultTracker ) {
162
+ tracker .done (& instance1 , nil , errors .New ("test" ))
163
+ assert .False (t , tracker .succeeded ())
164
+ assert .False (t , tracker .failed ())
165
+ assert .False (t , tracker .failedCompletely ())
166
+
167
+ tracker .done (& instance2 , nil , errors .New ("test" ))
168
+ assert .False (t , tracker .succeeded ())
169
+ assert .True (t , tracker .failed ())
170
+ assert .False (t , tracker .failedCompletely ())
171
+
172
+ tracker .done (& instance3 , nil , errors .New ("test" ))
173
+ assert .False (t , tracker .succeeded ())
174
+ assert .True (t , tracker .failed ())
175
+ assert .True (t , tracker .failedCompletely ())
176
+ },
177
+ },
178
+ "finished() should return true only if all instances are done" : {
179
+ instances : []InstanceDesc {instance1 , instance2 },
180
+ maxErrors : 1 ,
181
+ run : func (t * testing.T , tracker * defaultResultTracker ) {
182
+ tracker .done (& instance1 , nil , errors .New ("test" ))
183
+ assert .False (t , tracker .finished ())
184
+
185
+ tracker .done (& instance2 , nil , errors .New ("test" ))
186
+ assert .True (t , tracker .finished ())
187
+ },
188
+ },
189
+ "getErrors() should return list of all errors" : {
190
+ instances : []InstanceDesc {instance1 , instance2 },
191
+ maxErrors : 1 ,
192
+ run : func (t * testing.T , tracker * defaultResultTracker ) {
193
+ tracker .done (& instance1 , nil , errors .New ("test1" ))
194
+ err1 := fmt .Errorf ("(%s) %w" , instance1 .GetAddr (), errors .New ("test1" ))
195
+ assert .ElementsMatch (t , []error {err1 }, tracker .getErrors ())
196
+
197
+ tracker .done (& instance2 , nil , errors .New ("test2" ))
198
+ err2 := fmt .Errorf ("(%s) %w" , instance2 .GetAddr (), errors .New ("test2" ))
199
+ assert .ElementsMatch (t , []error {err1 , err2 }, tracker .getErrors ())
200
+ },
201
+ },
157
202
}
158
203
159
204
for testName , testCase := range tests {
@@ -399,27 +444,51 @@ func TestZoneAwareResultTracker(t *testing.T) {
399
444
assert .False (t , tracker .failed ())
400
445
},
401
446
},
402
- "failInAllZones should return true only if all zones have failed, regardless of max unavailable zones" : {
447
+ "failedCompletely() should return true only if all zones have failed, regardless of max unavailable zones" : {
403
448
instances : []InstanceDesc {instance1 , instance2 , instance3 , instance4 , instance5 , instance6 },
404
449
maxUnavailableZones : 1 ,
405
450
run : func (t * testing.T , tracker * zoneAwareResultTracker ) {
406
451
// Zone-a
407
452
tracker .done (& instance1 , nil , errors .New ("test" ))
408
453
assert .False (t , tracker .succeeded ())
409
454
assert .False (t , tracker .failed ())
410
- assert .False (t , tracker .failedInAllZones ())
455
+ assert .False (t , tracker .failedCompletely ())
411
456
412
457
// Zone-b
413
458
tracker .done (& instance3 , nil , errors .New ("test" ))
414
459
assert .False (t , tracker .succeeded ())
415
460
assert .True (t , tracker .failed ())
416
- assert .False (t , tracker .failedInAllZones ())
461
+ assert .False (t , tracker .failedCompletely ())
417
462
418
463
// Zone-c
419
464
tracker .done (& instance5 , nil , errors .New ("test" ))
420
465
assert .False (t , tracker .succeeded ())
421
466
assert .True (t , tracker .failed ())
422
- assert .True (t , tracker .failedInAllZones ())
467
+ assert .True (t , tracker .failedCompletely ())
468
+ },
469
+ },
470
+ "finished() should return true only if all instances are done" : {
471
+ instances : []InstanceDesc {instance1 , instance2 },
472
+ maxUnavailableZones : 1 ,
473
+ run : func (t * testing.T , tracker * zoneAwareResultTracker ) {
474
+ tracker .done (& instance1 , nil , errors .New ("test" ))
475
+ assert .False (t , tracker .finished ())
476
+
477
+ tracker .done (& instance2 , nil , errors .New ("test" ))
478
+ assert .True (t , tracker .finished ())
479
+ },
480
+ },
481
+ "getErrors() should return list of all errors" : {
482
+ instances : []InstanceDesc {instance1 , instance2 },
483
+ maxUnavailableZones : 1 ,
484
+ run : func (t * testing.T , tracker * zoneAwareResultTracker ) {
485
+ tracker .done (& instance1 , nil , errors .New ("test1" ))
486
+ err1 := fmt .Errorf ("(%s) %w" , instance1 .GetAddr (), errors .New ("test1" ))
487
+ assert .ElementsMatch (t , []error {err1 }, tracker .getErrors ())
488
+
489
+ tracker .done (& instance2 , nil , errors .New ("test2" ))
490
+ err2 := fmt .Errorf ("(%s) %w" , instance2 .GetAddr (), errors .New ("test2" ))
491
+ assert .ElementsMatch (t , []error {err1 , err2 }, tracker .getErrors ())
423
492
},
424
493
},
425
494
}
0 commit comments