mirror of https://github.com/prometheus/prometheus
Marco Pracucci
3 years ago
committed by
GitHub
5 changed files with 131 additions and 14 deletions
@ -0,0 +1,66 @@
|
||||
package tsdb |
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
func TestAddJitterToChunkEndTime_ShouldHonorMaxVarianceAndMaxNextAt(t *testing.T) { |
||||
chunkMinTime := int64(10) |
||||
nextAt := int64(95) |
||||
maxNextAt := int64(100) |
||||
variance := 0.2 |
||||
|
||||
// Compute the expected max variance.
|
||||
expectedMaxVariance := int64(float64(nextAt-chunkMinTime) * variance) |
||||
|
||||
for seriesHash := uint64(0); seriesHash < 1000; seriesHash++ { |
||||
actual := addJitterToChunkEndTime(seriesHash, chunkMinTime, nextAt, maxNextAt, variance) |
||||
require.GreaterOrEqual(t, actual, nextAt-(expectedMaxVariance/2)) |
||||
require.LessOrEqual(t, actual, maxNextAt) |
||||
} |
||||
} |
||||
|
||||
func TestAddJitterToChunkEndTime_Distribution(t *testing.T) { |
||||
chunkMinTime := int64(0) |
||||
nextAt := int64(50) |
||||
maxNextAt := int64(100) |
||||
variance := 0.2 |
||||
numSeries := uint64(1000) |
||||
|
||||
// Compute the expected max variance.
|
||||
expectedMaxVariance := int64(float64(nextAt-chunkMinTime) * variance) |
||||
|
||||
// Keep track of the distribution of the applied variance.
|
||||
varianceDistribution := map[int64]int64{} |
||||
|
||||
for seriesHash := uint64(0); seriesHash < numSeries; seriesHash++ { |
||||
actual := addJitterToChunkEndTime(seriesHash, chunkMinTime, nextAt, maxNextAt, variance) |
||||
require.GreaterOrEqual(t, actual, nextAt-(expectedMaxVariance/2)) |
||||
require.LessOrEqual(t, actual, nextAt+(expectedMaxVariance/2)) |
||||
require.LessOrEqual(t, actual, maxNextAt) |
||||
|
||||
variance := nextAt - actual |
||||
varianceDistribution[variance]++ |
||||
} |
||||
|
||||
// Ensure a uniform distribution.
|
||||
for variance, count := range varianceDistribution { |
||||
require.Equalf(t, int64(numSeries)/expectedMaxVariance, count, "variance = %d", variance) |
||||
} |
||||
} |
||||
|
||||
func TestAddJitterToChunkEndTime_ShouldNotApplyJitterToTheLastChunkOfTheRange(t *testing.T) { |
||||
// Since the jitter could also be 0, we try it for multiple series.
|
||||
for seriesHash := uint64(0); seriesHash < 10; seriesHash++ { |
||||
require.Equal(t, int64(200), addJitterToChunkEndTime(seriesHash, 150, 200, 200, 0.2)) |
||||
} |
||||
} |
||||
|
||||
func TestAddJitterToChunkEndTime_ShouldNotApplyJitterIfDisabled(t *testing.T) { |
||||
// Since the jitter could also be 0, we try it for multiple series.
|
||||
for seriesHash := uint64(0); seriesHash < 10; seriesHash++ { |
||||
require.Equal(t, int64(130), addJitterToChunkEndTime(seriesHash, 100, 130, 200, 0)) |
||||
} |
||||
} |
Loading…
Reference in new issue