158 lines
3.7 KiB
Go
158 lines
3.7 KiB
Go
|
package loki
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
"github.com/influxdata/telegraf"
|
||
|
)
|
||
|
|
||
|
type tuple struct {
|
||
|
key, value string
|
||
|
}
|
||
|
|
||
|
func generateLabelsAndTag(tt ...tuple) (map[string]string, []*telegraf.Tag) {
|
||
|
labels := map[string]string{}
|
||
|
tags := make([]*telegraf.Tag, 0, len(tt))
|
||
|
for _, t := range tt {
|
||
|
labels[t.key] = t.value
|
||
|
tags = append(tags, &telegraf.Tag{Key: t.key, Value: t.value})
|
||
|
}
|
||
|
|
||
|
return labels, tags
|
||
|
}
|
||
|
|
||
|
func TestGenerateLabelsAndTag(t *testing.T) {
|
||
|
labels, tags := generateLabelsAndTag(
|
||
|
tuple{key: "key1", value: "value1"},
|
||
|
tuple{key: "key2", value: "value2"},
|
||
|
tuple{key: "key3", value: "value3"},
|
||
|
)
|
||
|
|
||
|
expectedTags := []*telegraf.Tag{
|
||
|
{Key: "key1", Value: "value1"},
|
||
|
{Key: "key2", Value: "value2"},
|
||
|
{Key: "key3", Value: "value3"},
|
||
|
}
|
||
|
|
||
|
require.Len(t, labels, 3)
|
||
|
require.Len(t, tags, 3)
|
||
|
require.Equal(t, map[string]string{"key1": "value1", "key2": "value2", "key3": "value3"}, labels)
|
||
|
require.Equal(t, map[string]string{"key1": "value1", "key2": "value2", "key3": "value3"}, labels)
|
||
|
require.Equal(t, expectedTags, tags)
|
||
|
}
|
||
|
|
||
|
func TestStream_insertLog(t *testing.T) {
|
||
|
s := Streams{}
|
||
|
log1 := Log{"123", "this log isn't useful"}
|
||
|
log2 := Log{"124", "this log isn't useful neither"}
|
||
|
log3 := Log{"122", "again"}
|
||
|
|
||
|
key1 := "key1-value1-key2-value2-key3-value3-"
|
||
|
labels1, tags1 := generateLabelsAndTag(
|
||
|
tuple{key: "key1", value: "value1"},
|
||
|
tuple{key: "key2", value: "value2"},
|
||
|
tuple{key: "key3", value: "value3"},
|
||
|
)
|
||
|
|
||
|
key2 := "key2-value2-"
|
||
|
labels2, tags2 := generateLabelsAndTag(
|
||
|
tuple{key: "key2", value: "value2"},
|
||
|
)
|
||
|
|
||
|
s.insertLog(tags1, log1)
|
||
|
|
||
|
require.Len(t, s, 1)
|
||
|
require.Contains(t, s, key1)
|
||
|
require.Len(t, s[key1].Logs, 1)
|
||
|
require.Equal(t, labels1, s[key1].Labels)
|
||
|
require.Equal(t, "123", s[key1].Logs[0][0])
|
||
|
require.Equal(t, "this log isn't useful", s[key1].Logs[0][1])
|
||
|
|
||
|
s.insertLog(tags1, log2)
|
||
|
|
||
|
require.Len(t, s, 1)
|
||
|
require.Len(t, s[key1].Logs, 2)
|
||
|
require.Equal(t, "124", s[key1].Logs[1][0])
|
||
|
require.Equal(t, "this log isn't useful neither", s[key1].Logs[1][1])
|
||
|
|
||
|
s.insertLog(tags2, log3)
|
||
|
|
||
|
require.Len(t, s, 2)
|
||
|
require.Contains(t, s, key2)
|
||
|
require.Len(t, s[key2].Logs, 1)
|
||
|
require.Equal(t, labels2, s[key2].Labels)
|
||
|
require.Equal(t, "122", s[key2].Logs[0][0])
|
||
|
require.Equal(t, "again", s[key2].Logs[0][1])
|
||
|
}
|
||
|
|
||
|
func TestUniqKeyFromTagList(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
in []*telegraf.Tag
|
||
|
out string
|
||
|
}{
|
||
|
{
|
||
|
in: []*telegraf.Tag{
|
||
|
{Key: "key1", Value: "value1"},
|
||
|
{Key: "key2", Value: "value2"},
|
||
|
{Key: "key3", Value: "value3"},
|
||
|
},
|
||
|
out: "key1-value1-key2-value2-key3-value3-",
|
||
|
},
|
||
|
{
|
||
|
in: []*telegraf.Tag{
|
||
|
{Key: "key1", Value: "value1"},
|
||
|
{Key: "key3", Value: "value3"},
|
||
|
{Key: "key4", Value: "value4"},
|
||
|
},
|
||
|
out: "key1-value1-key3-value3-key4-value4-",
|
||
|
},
|
||
|
{
|
||
|
in: []*telegraf.Tag{
|
||
|
{Key: "target", Value: "local"},
|
||
|
{Key: "host", Value: "host"},
|
||
|
{Key: "service", Value: "dns"},
|
||
|
},
|
||
|
out: "target-local-host-host-service-dns-",
|
||
|
},
|
||
|
{
|
||
|
in: []*telegraf.Tag{
|
||
|
{Key: "target", Value: "localhost"},
|
||
|
{Key: "hostservice", Value: "dns"},
|
||
|
},
|
||
|
out: "target-localhost-hostservice-dns-",
|
||
|
},
|
||
|
{
|
||
|
in: []*telegraf.Tag{
|
||
|
{Key: "target-local", Value: "host-"},
|
||
|
},
|
||
|
out: "target--local-host---",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, test := range tests {
|
||
|
require.Equal(t, test.out, uniqKeyFromTagList(test.in))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_newStream(t *testing.T) {
|
||
|
labels, tags := generateLabelsAndTag(
|
||
|
tuple{key: "key1", value: "value1"},
|
||
|
tuple{key: "key2", value: "value2"},
|
||
|
tuple{key: "key3", value: "value3"},
|
||
|
)
|
||
|
|
||
|
s := newStream(tags)
|
||
|
|
||
|
require.Empty(t, s.Logs)
|
||
|
require.Equal(t, s.Labels, labels)
|
||
|
}
|
||
|
|
||
|
func Test_newStream_noTag(t *testing.T) {
|
||
|
s := newStream(nil)
|
||
|
|
||
|
require.Empty(t, s.Logs)
|
||
|
require.Empty(t, s.Labels)
|
||
|
}
|