forked from open-telemetry/opentelemetry-collector-contrib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
zipkin_unmarshaler_test.go
109 lines (95 loc) · 3.43 KB
/
zipkin_unmarshaler_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package pulsarreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver"
import (
"context"
"testing"
"github.com/apache/thrift/lib/go/thrift"
"github.com/jaegertracing/jaeger/thrift-gen/zipkincore"
"github.com/openzipkin/zipkin-go/proto/zipkin_proto3"
zipkinreporter "github.com/openzipkin/zipkin-go/reporter"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin/zipkinv2"
)
// copy from kafka receiver
var v2FromTranslator zipkinv2.FromTranslator
func TestUnmarshalZipkin(t *testing.T) {
td := ptrace.NewTraces()
rs := td.ResourceSpans().AppendEmpty()
rs.Resource().Attributes().PutStr(conventions.AttributeServiceName, "my_service")
span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
span.SetName("foo")
span.SetStartTimestamp(pcommon.Timestamp(1597759000))
span.SetEndTimestamp(pcommon.Timestamp(1597769000))
span.SetTraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})
span.SetSpanID([8]byte{1, 2, 3, 4, 5, 6, 7, 8})
span.SetParentSpanID([8]byte{0, 0, 0, 0, 0, 0, 0, 0})
spans, err := v2FromTranslator.FromTraces(td)
require.NoError(t, err)
serializer := zipkinreporter.JSONSerializer{}
jsonBytes, err := serializer.Serialize(spans)
require.NoError(t, err)
tSpan := &zipkincore.Span{Name: "foo"}
thriftTransport := thrift.NewTMemoryBuffer()
protocolTransport := thrift.NewTBinaryProtocolConf(thriftTransport, nil)
require.NoError(t, protocolTransport.WriteListBegin(context.Background(), thrift.STRUCT, 1))
err = tSpan.Write(context.Background(), protocolTransport)
require.NoError(t, err)
require.NoError(t, protocolTransport.WriteListEnd(context.Background()))
tdThrift, err := newZipkinThriftUnmarshaler().Unmarshal(thriftTransport.Buffer.Bytes())
require.NoError(t, err)
protoBytes, err := new(zipkin_proto3.SpanSerializer).Serialize(spans)
require.NoError(t, err)
tests := []struct {
unmarshaler TracesUnmarshaler
encoding string
bytes []byte
expected ptrace.Traces
}{
{
unmarshaler: newZipkinProtobufUnmarshaler(),
encoding: "zipkin_proto",
bytes: protoBytes,
expected: td,
},
{
unmarshaler: newZipkinJSONUnmarshaler(),
encoding: "zipkin_json",
bytes: jsonBytes,
expected: td,
},
{
unmarshaler: newZipkinThriftUnmarshaler(),
encoding: "zipkin_thrift",
bytes: thriftTransport.Buffer.Bytes(),
expected: tdThrift,
},
}
for _, test := range tests {
t.Run(test.encoding, func(t *testing.T) {
traces, err := test.unmarshaler.Unmarshal(test.bytes)
require.NoError(t, err)
assert.Equal(t, test.expected, traces)
assert.Equal(t, test.encoding, test.unmarshaler.Encoding())
})
}
}
func TestUnmarshalZipkinThrift_error(t *testing.T) {
p := newZipkinThriftUnmarshaler()
_, err := p.Unmarshal([]byte("+$%"))
assert.Error(t, err)
}
func TestUnmarshalZipkinJSON_error(t *testing.T) {
p := newZipkinJSONUnmarshaler()
_, err := p.Unmarshal([]byte("+$%"))
assert.Error(t, err)
}
func TestUnmarshalZipkinProto_error(t *testing.T) {
p := newZipkinProtobufUnmarshaler()
_, err := p.Unmarshal([]byte("+$%"))
assert.Error(t, err)
}