(t testing.TB, d *Desc, tolerance float64)
| 177 | } |
| 178 | |
| 179 | func assertDistancePerIngester(t testing.TB, d *Desc, tolerance float64) { |
| 180 | r := make(map[string]int64, len(d.Ingesters)) |
| 181 | tokensPerAz := d.getTokensByZone() |
| 182 | numberOfIngesterPerAz := map[string]int{} |
| 183 | |
| 184 | for s, desc := range d.Ingesters { |
| 185 | numberOfIngesterPerAz[desc.Zone]++ |
| 186 | for _, token := range desc.Tokens { |
| 187 | index, ok := slices.BinarySearch(tokensPerAz[desc.Zone], token) |
| 188 | if !ok { |
| 189 | t.Fatal("token not found") |
| 190 | } |
| 191 | prev := index - 1 |
| 192 | if prev < 0 { |
| 193 | prev = len(tokensPerAz[desc.Zone]) - 1 |
| 194 | } |
| 195 | r[s] += tokenDistance(tokensPerAz[desc.Zone][prev], tokensPerAz[desc.Zone][index]) |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | for s, desc := range d.Ingesters { |
| 200 | expectedDistance := float64(maxTokenValue / numberOfIngesterPerAz[desc.Zone]) |
| 201 | realDistance := float64(r[s]) |
| 202 | require.Condition(t, func() (success bool) { |
| 203 | return (1 - math.Abs(expectedDistance/realDistance)) < tolerance |
| 204 | }, "[%v] expected and real distance error is greater than %v -> %v[%v/%v]", s, tolerance, 1-math.Abs(expectedDistance/realDistance), expectedDistance, realDistance) |
| 205 | } |
| 206 | } |
no test coverage detected