From be940a0550e30d84066764c789216ddb9b6ecaff Mon Sep 17 00:00:00 2001 From: Danny Kopping Date: Wed, 13 Mar 2024 12:28:20 +0200 Subject: [PATCH 1/2] fix: data race in TestLabelsAggregation tests Signed-off-by: Danny Kopping --- coderd/prometheusmetrics/aggregator_test.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/coderd/prometheusmetrics/aggregator_test.go b/coderd/prometheusmetrics/aggregator_test.go index 412dfae1e7559..6ff79877b7bdd 100644 --- a/coderd/prometheusmetrics/aggregator_test.go +++ b/coderd/prometheusmetrics/aggregator_test.go @@ -204,14 +204,23 @@ func verifyCollectedMetrics(t *testing.T, expected []*agentproto.Stats_Metric, a require.Failf(t, "unsupported type: %s", string(e.Type)) } + // make a copy of the expected labels because tests run in parallel and can cause data races + var expectedLabels []*agentproto.Stats_Metric_Label + for _, l := range e.Labels { + expectedLabels = append(expectedLabels, &agentproto.Stats_Metric_Label{ + Name: l.Name, + Value: l.Value, + }) + } + dtoLabels := asMetricAgentLabels(d.GetLabel()) // dto labels are sorted in alphabetical order. sortFn := func(i, j int) bool { - return e.Labels[i].Name < e.Labels[j].Name + return expectedLabels[i].Name < expectedLabels[j].Name } - sort.Slice(e.Labels, sortFn) + sort.Slice(expectedLabels, sortFn) sort.Slice(dtoLabels, sortFn) - require.Equal(t, e.Labels, dtoLabels, d.String()) + require.Equal(t, expectedLabels, dtoLabels, d.String()) } return true } From 9113c015ee1d937707451836172eca47d987e1ab Mon Sep 17 00:00:00 2001 From: Danny Kopping Date: Wed, 13 Mar 2024 12:45:59 +0200 Subject: [PATCH 2/2] Using copy instead Signed-off-by: Danny Kopping --- coderd/prometheusmetrics/aggregator_test.go | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/coderd/prometheusmetrics/aggregator_test.go b/coderd/prometheusmetrics/aggregator_test.go index 6ff79877b7bdd..59a4b629bf5a5 100644 --- a/coderd/prometheusmetrics/aggregator_test.go +++ b/coderd/prometheusmetrics/aggregator_test.go @@ -204,14 +204,8 @@ func verifyCollectedMetrics(t *testing.T, expected []*agentproto.Stats_Metric, a require.Failf(t, "unsupported type: %s", string(e.Type)) } - // make a copy of the expected labels because tests run in parallel and can cause data races - var expectedLabels []*agentproto.Stats_Metric_Label - for _, l := range e.Labels { - expectedLabels = append(expectedLabels, &agentproto.Stats_Metric_Label{ - Name: l.Name, - Value: l.Value, - }) - } + expectedLabels := make([]*agentproto.Stats_Metric_Label, len(e.Labels)) + copy(expectedLabels, e.Labels) dtoLabels := asMetricAgentLabels(d.GetLabel()) // dto labels are sorted in alphabetical order.