(t *testing.T)
| 506 | } |
| 507 | |
| 508 | func TestRing_Get_Stability(t *testing.T) { |
| 509 | const numOfInvocations = 10 |
| 510 | const numOfTokensToTest = 10 |
| 511 | g := NewRandomTokenGenerator() |
| 512 | |
| 513 | tests := map[string]struct { |
| 514 | numOfZones int |
| 515 | replicationFactor int |
| 516 | }{ |
| 517 | "should return same set for same operation when zone awareness is disabled": { |
| 518 | numOfZones: 0, |
| 519 | replicationFactor: 3, |
| 520 | }, |
| 521 | "should return same set when RF is equal to number of zones": { |
| 522 | numOfZones: 3, |
| 523 | replicationFactor: 3, |
| 524 | }, |
| 525 | "should return same set when RF is less than number of zones": { |
| 526 | numOfZones: 3, |
| 527 | replicationFactor: 2, |
| 528 | }, |
| 529 | "should return same set when RF is greater than number of zones": { |
| 530 | numOfZones: 3, |
| 531 | replicationFactor: 9, |
| 532 | }, |
| 533 | "should return same set when number of instances in each zone is inconsistent": { |
| 534 | numOfZones: 3, |
| 535 | replicationFactor: 8, |
| 536 | }, |
| 537 | } |
| 538 | |
| 539 | for testName, testData := range tests { |
| 540 | t.Run(testName, func(t *testing.T) { |
| 541 | testValues := g.GenerateTokens(NewDesc(), "", "", numOfInvocations, true) |
| 542 | bufDescs, bufHosts, bufZones := MakeBuffersForGet() |
| 543 | |
| 544 | ringDesc := &Desc{Ingesters: generateRingInstances(16, testData.numOfZones, 128)} |
| 545 | ring := Ring{ |
| 546 | cfg: Config{ |
| 547 | HeartbeatTimeout: time.Hour, |
| 548 | ZoneAwarenessEnabled: testData.numOfZones > 0, |
| 549 | ReplicationFactor: testData.replicationFactor, |
| 550 | }, |
| 551 | ringDesc: ringDesc, |
| 552 | ringTokens: ringDesc.GetTokens(), |
| 553 | ringTokensByZone: ringDesc.getTokensByZone(), |
| 554 | ringInstanceByToken: ringDesc.getTokensInfo(), |
| 555 | ringZones: getZones(ringDesc.getTokensByZone()), |
| 556 | strategy: NewDefaultReplicationStrategy(), |
| 557 | KVClient: &MockClient{}, |
| 558 | } |
| 559 | |
| 560 | for i := range numOfTokensToTest { |
| 561 | expectedSet, err := ring.Get(testValues[i], Write, bufDescs, bufHosts, bufZones) |
| 562 | assert.NoError(t, err) |
| 563 | assert.Equal(t, testData.replicationFactor, len(expectedSet.Instances)) |
| 564 | |
| 565 | for range numOfInvocations { |
nothing calls this directly
no test coverage detected