From 9d3f9da5ad770231c44de17fbe70336b95f6ad0e Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin <valyala@gmail.com> Date: Thu, 15 Jul 2021 12:16:45 +0300 Subject: [PATCH] lib/storage: make sure the second call to DeduplicateSamples and deduplicateSamplesDuringMerge doesnt change samples --- lib/storage/dedup_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/storage/dedup_test.go b/lib/storage/dedup_test.go index a17813a161..a3f0d88bbb 100644 --- a/lib/storage/dedup_test.go +++ b/lib/storage/dedup_test.go @@ -68,6 +68,16 @@ func TestDeduplicateSamples(t *testing.T) { if j != len(timestampsCopy) { t.Fatalf("superfluous timestamps found starting from index %d: %v", j, timestampsCopy[j:]) } + + // Verify that the second call to DeduplicatSamples doesn't modify samples. + valuesCopy := append([]float64{}, values...) + timestampsCopy, valuesCopy = DeduplicateSamples(timestampsCopy, valuesCopy) + if !reflect.DeepEqual(timestampsCopy, timestampsExpected) { + t.Fatalf("invalid DeduplicateSamples(%v) timestamps for the second call;\ngot\n%v\nwant\n%v", timestamps, timestampsCopy, timestampsExpected) + } + if !reflect.DeepEqual(valuesCopy, values) { + t.Fatalf("invalid DeduplicateSamples(%v) values for the second call;\ngot\n%v\nwant\n%v", timestamps, values, valuesCopy) + } } f(time.Millisecond, nil, []int64{}) f(time.Millisecond, []int64{123}, []int64{123}) @@ -118,6 +128,16 @@ func TestDeduplicateSamplesDuringMerge(t *testing.T) { if j != len(timestampsCopy) { t.Fatalf("superfluous timestamps found starting from index %d: %v", j, timestampsCopy[j:]) } + + // Verify that the second call to DeduplicatSamples doesn't modify samples. + valuesCopy := append([]int64{}, values...) + timestampsCopy, valuesCopy = deduplicateSamplesDuringMerge(timestampsCopy, valuesCopy) + if !reflect.DeepEqual(timestampsCopy, timestampsExpected) { + t.Fatalf("invalid deduplicateSamplesDuringMerge(%v) timestamps for the second call;\ngot\n%v\nwant\n%v", timestamps, timestampsCopy, timestampsExpected) + } + if !reflect.DeepEqual(valuesCopy, values) { + t.Fatalf("invalid deduplicateSamplesDuringMerge(%v) values for the second call;\ngot\n%v\nwant\n%v", timestamps, values, valuesCopy) + } } f(time.Millisecond, nil, []int64{}) f(time.Millisecond, []int64{123}, []int64{123})