labels: add a test for JSON and YAML marshalling
package labels
import (
+ "encoding/json"
"fmt"
"strings"
"testing"
"github.com/stretchr/testify/require"
+ yaml "gopkg.in/yaml.v2"
)
func TestLabels_String(t *testing.T) {
@@ -788,3 +790,52 @@ func BenchmarkLabels_Hash(b *testing.B) {
})
}
}
+
+func TestMarshaling(t *testing.T) {
+ lbls := FromStrings("aaa", "111", "bbb", "2222", "ccc", "33333")
+ expectedJSON := "{\"aaa\":\"111\",\"bbb\":\"2222\",\"ccc\":\"33333\"}"
+ b, err := json.Marshal(lbls)
+ require.NoError(t, err)
+ require.Equal(t, expectedJSON, string(b))
+
+ var gotJ Labels
+ err = json.Unmarshal(b, &gotJ)
+ require.NoError(t, err)
+ require.Equal(t, lbls, gotJ)
+
+ expectedYAML := "aaa: \"111\"\nbbb: \"2222\"\nccc: \"33333\"\n"
+ b, err = yaml.Marshal(lbls)
+ require.NoError(t, err)
+ require.Equal(t, expectedYAML, string(b))
+
+ var gotY Labels
+ err = yaml.Unmarshal(b, &gotY)
+ require.NoError(t, err)
+ require.Equal(t, lbls, gotY)
+
+ // Now in a struct with a tag
+ type foo struct {
+ ALabels Labels `json:"a_labels,omitempty" yaml:"a_labels,omitempty"`
+ }
+
+ f := foo{ALabels: lbls}
+ b, err = json.Marshal(f)
+ require.NoError(t, err)
+ expectedJSONFromStruct := "{\"a_labels\":" + expectedJSON + "}"
+ require.Equal(t, expectedJSONFromStruct, string(b))
+
+ var gotFJ foo
+ err = json.Unmarshal(b, &gotFJ)
+ require.NoError(t, err)
+ require.Equal(t, f, gotFJ)
+
+ b, err = yaml.Marshal(f)
+ require.NoError(t, err)
+ expectedYAMLFromStruct := "a_labels:\n aaa: \"111\"\n bbb: \"2222\"\n ccc: \"33333\"\n"
+ require.Equal(t, expectedYAMLFromStruct, string(b))
+
+ var gotFY foo
+ err = yaml.Unmarshal(b, &gotFY)
+ require.NoError(t, err)
+ require.Equal(t, f, gotFY)
+}
