From e003453941e0d664caa093970a06d0f03368c179 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin <valyala@gmail.com> Date: Sun, 28 Feb 2021 14:10:17 +0200 Subject: [PATCH] lib/promscrape/discovery/kubernetes: compare sorted sets of labels in tests This should deflake tests where the order of labels isn't stable --- .../discovery/kubernetes/node_test.go | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/promscrape/discovery/kubernetes/node_test.go b/lib/promscrape/discovery/kubernetes/node_test.go index e63cbe4b47..5b957e2f31 100644 --- a/lib/promscrape/discovery/kubernetes/node_test.go +++ b/lib/promscrape/discovery/kubernetes/node_test.go @@ -2,6 +2,8 @@ package kubernetes import ( "reflect" + "sort" + "strconv" "testing" "github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal" @@ -276,7 +278,7 @@ func TestParseNodeListSuccess(t *testing.T) { "__meta_kubernetes_node_address_Hostname": "m01", }), } - if !reflect.DeepEqual(sortedLabelss, expectedLabelss) { + if !areEqualLabelss(sortedLabelss, expectedLabelss) { t.Fatalf("unexpected labels:\ngot\n%v\nwant\n%v", sortedLabelss, expectedLabelss) } } @@ -291,3 +293,26 @@ func getSortedLabelss(objectsByKey map[string]object) [][]prompbmarshal.Label { } return result } + +func areEqualLabelss(a, b [][]prompbmarshal.Label) bool { + sortLabelss(a) + sortLabelss(b) + return reflect.DeepEqual(a, b) +} + +func sortLabelss(a [][]prompbmarshal.Label) { + sort.Slice(a, func(i, j int) bool { + return marshalLabels(a[i]) < marshalLabels(a[j]) + }) +} + +func marshalLabels(a []prompbmarshal.Label) string { + var b []byte + for _, label := range a { + b = strconv.AppendQuote(b, label.Name) + b = append(b, ':') + b = strconv.AppendQuote(b, label.Value) + b = append(b, ',') + } + return string(b) +}