(t *testing.T)
| 209 | } |
| 210 | |
| 211 | func TestZoneAwareResultTracker(t *testing.T) { |
| 212 | instance1 := InstanceDesc{Addr: "127.0.0.1", Zone: "zone-a"} |
| 213 | instance2 := InstanceDesc{Addr: "127.0.0.2", Zone: "zone-a"} |
| 214 | instance3 := InstanceDesc{Addr: "127.0.0.3", Zone: "zone-b"} |
| 215 | instance4 := InstanceDesc{Addr: "127.0.0.4", Zone: "zone-b"} |
| 216 | instance5 := InstanceDesc{Addr: "127.0.0.5", Zone: "zone-c"} |
| 217 | instance6 := InstanceDesc{Addr: "127.0.0.6", Zone: "zone-c"} |
| 218 | |
| 219 | tests := map[string]struct { |
| 220 | instances []InstanceDesc |
| 221 | maxUnavailableZones int |
| 222 | zoneResultsQuorum bool |
| 223 | run func(t *testing.T, tracker *zoneAwareResultTracker) |
| 224 | }{ |
| 225 | "should succeed on no instances to track": { |
| 226 | instances: nil, |
| 227 | maxUnavailableZones: 0, |
| 228 | run: func(t *testing.T, tracker *zoneAwareResultTracker) { |
| 229 | assert.True(t, tracker.succeeded()) |
| 230 | assert.False(t, tracker.failed()) |
| 231 | }, |
| 232 | }, |
| 233 | "should succeed once all instances succeed on max unavailable zones = 0": { |
| 234 | instances: []InstanceDesc{instance1, instance2, instance3}, |
| 235 | maxUnavailableZones: 0, |
| 236 | run: func(t *testing.T, tracker *zoneAwareResultTracker) { |
| 237 | assert.False(t, tracker.succeeded()) |
| 238 | assert.False(t, tracker.failed()) |
| 239 | |
| 240 | tracker.done(&instance1, 1, nil) |
| 241 | assert.False(t, tracker.succeeded()) |
| 242 | assert.False(t, tracker.failed()) |
| 243 | |
| 244 | tracker.done(&instance2, 1, nil) |
| 245 | assert.False(t, tracker.succeeded()) |
| 246 | assert.False(t, tracker.failed()) |
| 247 | |
| 248 | tracker.done(&instance3, 1, nil) |
| 249 | assert.True(t, tracker.succeeded()) |
| 250 | assert.False(t, tracker.failed()) |
| 251 | |
| 252 | assert.Equal(t, []any{1, 1, 1}, tracker.getResults()) |
| 253 | }, |
| 254 | }, |
| 255 | "should succeed once all 6 instances succeed on max unavailable zones = 0": { |
| 256 | instances: []InstanceDesc{instance1, instance2, instance3, instance4, instance5, instance6}, |
| 257 | maxUnavailableZones: 0, |
| 258 | run: func(t *testing.T, tracker *zoneAwareResultTracker) { |
| 259 | assert.False(t, tracker.succeeded()) |
| 260 | assert.False(t, tracker.failed()) |
| 261 | |
| 262 | tracker.done(&instance1, 1, nil) |
| 263 | assert.False(t, tracker.succeeded()) |
| 264 | assert.False(t, tracker.failed()) |
| 265 | |
| 266 | tracker.done(&instance2, 1, nil) |
| 267 | assert.False(t, tracker.succeeded()) |
| 268 | assert.False(t, tracker.failed()) |
nothing calls this directly
no test coverage detected