github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/logproto/types_test.go (about) 1 package logproto 2 3 import ( 4 "testing" 5 time "time" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 var ( 11 now = time.Now().UTC() 12 line = `level=info ts=2019-12-12T15:00:08.325Z caller=compact.go:441 component=tsdb msg="compact blocks" count=3 mint=1576130400000 maxt=1576152000000 ulid=01DVX9ZHNM71GRCJS7M34Q0EV7 sources="[01DVWNC6NWY1A60AZV3Z6DGS65 01DVWW7XXX75GHA6ZDTD170CSZ 01DVX33N5W86CWJJVRPAVXJRWJ]" duration=2.897213221s` 13 stream = Stream{ 14 Labels: `{job="foobar", cluster="foo-central1", namespace="bar", container_name="buzz"}`, 15 Hash: 1234*10 ^ 9, 16 Entries: []Entry{ 17 {now, line}, 18 {now.Add(1 * time.Second), line}, 19 {now.Add(2 * time.Second), line}, 20 {now.Add(3 * time.Second), line}, 21 }, 22 } 23 streamAdapter = StreamAdapter{ 24 Labels: `{job="foobar", cluster="foo-central1", namespace="bar", container_name="buzz"}`, 25 Hash: 1234*10 ^ 9, 26 Entries: []EntryAdapter{ 27 {now, line}, 28 {now.Add(1 * time.Second), line}, 29 {now.Add(2 * time.Second), line}, 30 {now.Add(3 * time.Second), line}, 31 }, 32 } 33 ) 34 35 func TestStream(t *testing.T) { 36 avg := testing.AllocsPerRun(200, func() { 37 b, err := stream.Marshal() 38 require.NoError(t, err) 39 40 var new Stream 41 err = new.Unmarshal(b) 42 require.NoError(t, err) 43 44 require.Equal(t, stream, new) 45 }) 46 t.Log("avg allocs per run:", avg) 47 } 48 49 func TestStreamAdapter(t *testing.T) { 50 avg := testing.AllocsPerRun(200, func() { 51 b, err := streamAdapter.Marshal() 52 require.NoError(t, err) 53 54 var new StreamAdapter 55 err = new.Unmarshal(b) 56 require.NoError(t, err) 57 58 require.Equal(t, streamAdapter, new) 59 }) 60 t.Log("avg allocs per run:", avg) 61 } 62 63 func TestCompatibility(t *testing.T) { 64 b, err := stream.Marshal() 65 require.NoError(t, err) 66 67 var adapter StreamAdapter 68 err = adapter.Unmarshal(b) 69 require.NoError(t, err) 70 require.Equal(t, streamAdapter, adapter) 71 72 ba, err := adapter.Marshal() 73 require.NoError(t, err) 74 require.Equal(t, b, ba) 75 76 var new Stream 77 err = new.Unmarshal(ba) 78 require.NoError(t, err) 79 80 require.Equal(t, stream, new) 81 } 82 83 func BenchmarkStream(b *testing.B) { 84 b.ReportAllocs() 85 for n := 0; n < b.N; n++ { 86 by, err := stream.Marshal() 87 if err != nil { 88 b.Fatal(err) 89 } 90 var new Stream 91 err = new.Unmarshal(by) 92 if err != nil { 93 b.Fatal(err) 94 } 95 } 96 } 97 98 func BenchmarkStreamAdapter(b *testing.B) { 99 b.ReportAllocs() 100 for n := 0; n < b.N; n++ { 101 by, err := streamAdapter.Marshal() 102 if err != nil { 103 b.Fatal(err) 104 } 105 var new StreamAdapter 106 err = new.Unmarshal(by) 107 if err != nil { 108 b.Fatal(err) 109 } 110 } 111 }