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)
+}