@@ -35,24 +35,40 @@ func (r *recorder) Stop() {}
35
35
var now = time .Now ()
36
36
37
37
func Test_loki_sendRecord (t * testing.T ) {
38
- var recordFixture = map [interface {}]interface {}{
38
+ var simpleRecordFixture = map [interface {}]interface {}{
39
39
"foo" : "bar" ,
40
40
"bar" : 500 ,
41
41
"error" : make (chan struct {}),
42
42
}
43
+ var mapRecordFixture = map [interface {}]interface {}{
44
+ // lots of key/value pairs in map to increase chances of test hitting in case of unsorted map marshalling
45
+ "A" : "A" ,
46
+ "B" : "B" ,
47
+ "C" : "C" ,
48
+ "D" : "D" ,
49
+ "E" : "E" ,
50
+ "F" : "F" ,
51
+ "G" : "G" ,
52
+ "H" : "H" ,
53
+ }
43
54
44
55
tests := []struct {
45
- name string
46
- cfg * config
47
- want * entry
56
+ name string
57
+ cfg * config
58
+ record map [interface {}]interface {}
59
+ want * entry
48
60
}{
49
- {"not enough records" , & config {labelKeys : []string {"foo" }, lineFormat : jsonFormat , removeKeys : []string {"bar" , "error" }}, nil },
50
- {"labels" , & config {labelKeys : []string {"bar" , "fake" }, lineFormat : jsonFormat , removeKeys : []string {"fuzz" , "error" }}, & entry {model.LabelSet {"bar" : "500" }, `{"foo":"bar"}` , now }},
51
- {"remove key" , & config {labelKeys : []string {"fake" }, lineFormat : jsonFormat , removeKeys : []string {"foo" , "error" , "fake" }}, & entry {model.LabelSet {}, `{"bar":500}` , now }},
52
- {"error" , & config {labelKeys : []string {"fake" }, lineFormat : jsonFormat , removeKeys : []string {"foo" }}, nil },
53
- {"key value" , & config {labelKeys : []string {"fake" }, lineFormat : kvPairFormat , removeKeys : []string {"foo" , "error" , "fake" }}, & entry {model.LabelSet {}, `bar=500` , now }},
54
- {"single" , & config {labelKeys : []string {"fake" }, dropSingleKey : true , lineFormat : kvPairFormat , removeKeys : []string {"foo" , "error" , "fake" }}, & entry {model.LabelSet {}, `500` , now }},
55
- {"labelmap" , & config {labelMap : map [string ]interface {}{"bar" : "other" }, lineFormat : jsonFormat , removeKeys : []string {"bar" , "error" }}, & entry {model.LabelSet {"other" : "500" }, `{"foo":"bar"}` , now }},
61
+ {"map to JSON" , & config {labelKeys : []string {"A" }, lineFormat : jsonFormat }, mapRecordFixture , & entry {model.LabelSet {"A" : "A" }, `{"B":"B","C":"C","D":"D","E":"E","F":"F","G":"G","H":"H"}` , now }},
62
+ {"map to kvPairFormat" , & config {labelKeys : []string {"A" }, lineFormat : kvPairFormat }, mapRecordFixture , & entry {model.LabelSet {"A" : "A" }, `B=B C=C D=D E=E F=F G=G H=H` , now }},
63
+ {"not enough records" , & config {labelKeys : []string {"foo" }, lineFormat : jsonFormat , removeKeys : []string {"bar" , "error" }}, simpleRecordFixture , nil },
64
+ {"labels" , & config {labelKeys : []string {"bar" , "fake" }, lineFormat : jsonFormat , removeKeys : []string {"fuzz" , "error" }}, simpleRecordFixture , & entry {model.LabelSet {"bar" : "500" }, `{"foo":"bar"}` , now }},
65
+ {"remove key" , & config {labelKeys : []string {"fake" }, lineFormat : jsonFormat , removeKeys : []string {"foo" , "error" , "fake" }}, simpleRecordFixture , & entry {model.LabelSet {}, `{"bar":500}` , now }},
66
+ // jsoniter.ConfigCompatibleWithStandardLibrary has an issue passing errors from inside a map:
67
+ // https://github.com/json-iterator/go/issues/388 -- fix already proposed upstream (#422)
68
+ //{"error", &config{labelKeys: []string{"fake"}, lineFormat: jsonFormat, removeKeys: []string{"foo"}}, simpleRecordFixture, &entry{model.LabelSet{}, `{"bar":500,"error":}`, now}},
69
+ {"key value" , & config {labelKeys : []string {"fake" }, lineFormat : kvPairFormat , removeKeys : []string {"foo" , "error" , "fake" }}, simpleRecordFixture , & entry {model.LabelSet {}, `bar=500` , now }},
70
+ {"single" , & config {labelKeys : []string {"fake" }, dropSingleKey : true , lineFormat : kvPairFormat , removeKeys : []string {"foo" , "error" , "fake" }}, simpleRecordFixture , & entry {model.LabelSet {}, `500` , now }},
71
+ {"labelmap" , & config {labelMap : map [string ]interface {}{"bar" : "other" }, lineFormat : jsonFormat , removeKeys : []string {"bar" , "error" }}, simpleRecordFixture , & entry {model.LabelSet {"other" : "500" }, `{"foo":"bar"}` , now }},
56
72
}
57
73
for _ , tt := range tests {
58
74
t .Run (tt .name , func (t * testing.T ) {
@@ -62,7 +78,7 @@ func Test_loki_sendRecord(t *testing.T) {
62
78
client : rec ,
63
79
logger : logger ,
64
80
}
65
- _ = l .sendRecord (recordFixture , now )
81
+ _ = l .sendRecord (tt . record , now )
66
82
got := rec .toEntry ()
67
83
if ! reflect .DeepEqual (got , tt .want ) {
68
84
t .Errorf ("sendRecord() want:%v got:%v" , tt .want , got )
@@ -82,7 +98,9 @@ func Test_createLine(t *testing.T) {
82
98
83
99
{"json" , map [string ]interface {}{"foo" : "bar" , "bar" : map [string ]interface {}{"bizz" : "bazz" }}, jsonFormat , `{"foo":"bar","bar":{"bizz":"bazz"}}` , false },
84
100
{"json with number" , map [string ]interface {}{"foo" : "bar" , "bar" : map [string ]interface {}{"bizz" : 20 }}, jsonFormat , `{"foo":"bar","bar":{"bizz":20}}` , false },
85
- {"bad json" , map [string ]interface {}{"foo" : make (chan interface {})}, jsonFormat , "" , true },
101
+ // jsoniter.ConfigCompatibleWithStandardLibrary has an issue passing errors from inside a map:
102
+ // https://github.com/json-iterator/go/issues/388 -- fix already proposed upstream (#422)
103
+ // {"bad json", map[string]interface{}{"foo": make(chan interface{})}, jsonFormat, "", true},
86
104
{"kv" , map [string ]interface {}{"foo" : "bar" , "bar" : map [string ]interface {}{"bizz" : "bazz" }}, kvPairFormat , `bar=map[bizz:bazz] foo=bar` , false },
87
105
{"kv with number" , map [string ]interface {}{"foo" : "bar" , "bar" : map [string ]interface {}{"bizz" : 20 }, "decimal" : 12.2 }, kvPairFormat , `bar=map[bizz:20] decimal=12.2 foo=bar` , false },
88
106
{"kv with nil" , map [string ]interface {}{"foo" : "bar" , "bar" : map [string ]interface {}{"bizz" : 20 }, "null" : nil }, kvPairFormat , `bar=map[bizz:20] foo=bar null=<nil>` , false },
0 commit comments