1package statsd
2
3import (
4	"testing"
5	"time"
6
7	"github.com/stretchr/testify/assert"
8)
9
10func TestDefaultOptions(t *testing.T) {
11	options, err := resolveOptions([]Option{})
12
13	assert.NoError(t, err)
14	assert.Equal(t, options.Namespace, DefaultNamespace)
15	assert.Equal(t, options.Tags, DefaultTags)
16	assert.Equal(t, options.MaxBytesPerPayload, DefaultMaxBytesPerPayload)
17	assert.Equal(t, options.MaxMessagesPerPayload, DefaultMaxMessagesPerPayload)
18	assert.Equal(t, options.BufferPoolSize, DefaultBufferPoolSize)
19	assert.Equal(t, options.BufferFlushInterval, DefaultBufferFlushInterval)
20	assert.Equal(t, options.BufferShardCount, DefaultBufferShardCount)
21	assert.Equal(t, options.SenderQueueSize, DefaultSenderQueueSize)
22	assert.Equal(t, options.WriteTimeoutUDS, DefaultWriteTimeoutUDS)
23	assert.Equal(t, options.Telemetry, DefaultTelemetry)
24	assert.Equal(t, options.ReceiveMode, DefaultReceivingMode)
25	assert.Equal(t, options.ChannelModeBufferSize, DefaultChannelModeBufferSize)
26	assert.Equal(t, options.AggregationFlushInterval, DefaultAggregationFlushInterval)
27	assert.Equal(t, options.Aggregation, DefaultAggregation)
28	assert.Equal(t, options.ExtendedAggregation, DefaultExtendedAggregation)
29	assert.Zero(t, options.TelemetryAddr)
30	assert.False(t, options.DevMode)
31}
32
33func TestOptions(t *testing.T) {
34	testNamespace := "datadog."
35	testTags := []string{"rocks"}
36	testMaxBytesPerPayload := 2048
37	testMaxMessagePerPayload := 1024
38	testBufferPoolSize := 32
39	testBufferFlushInterval := 48 * time.Second
40	testBufferShardCount := 28
41	testSenderQueueSize := 64
42	testWriteTimeoutUDS := 1 * time.Minute
43	testChannelBufferSize := 500
44	testAggregationWindow := 10 * time.Second
45	testTelemetryAddr := "localhost:1234"
46
47	options, err := resolveOptions([]Option{
48		WithNamespace(testNamespace),
49		WithTags(testTags),
50		WithMaxBytesPerPayload(testMaxBytesPerPayload),
51		WithMaxMessagesPerPayload(testMaxMessagePerPayload),
52		WithBufferPoolSize(testBufferPoolSize),
53		WithBufferFlushInterval(testBufferFlushInterval),
54		WithBufferShardCount(testBufferShardCount),
55		WithSenderQueueSize(testSenderQueueSize),
56		WithWriteTimeoutUDS(testWriteTimeoutUDS),
57		WithoutTelemetry(),
58		WithChannelMode(),
59		WithChannelModeBufferSize(testChannelBufferSize),
60		WithAggregationInterval(testAggregationWindow),
61		WithClientSideAggregation(),
62		WithTelemetryAddr(testTelemetryAddr),
63		WithDevMode(),
64	})
65
66	assert.NoError(t, err)
67	assert.Equal(t, options.Namespace, testNamespace)
68	assert.Equal(t, options.Tags, testTags)
69	assert.Equal(t, options.MaxBytesPerPayload, testMaxBytesPerPayload)
70	assert.Equal(t, options.MaxMessagesPerPayload, testMaxMessagePerPayload)
71	assert.Equal(t, options.BufferPoolSize, testBufferPoolSize)
72	assert.Equal(t, options.BufferFlushInterval, testBufferFlushInterval)
73	assert.Equal(t, options.BufferShardCount, testBufferShardCount)
74	assert.Equal(t, options.SenderQueueSize, testSenderQueueSize)
75	assert.Equal(t, options.WriteTimeoutUDS, testWriteTimeoutUDS)
76	assert.Equal(t, options.Telemetry, false)
77	assert.Equal(t, options.ReceiveMode, ChannelMode)
78	assert.Equal(t, options.ChannelModeBufferSize, testChannelBufferSize)
79	assert.Equal(t, options.AggregationFlushInterval, testAggregationWindow)
80	assert.Equal(t, options.Aggregation, true)
81	assert.Equal(t, options.ExtendedAggregation, false)
82	assert.Equal(t, options.TelemetryAddr, testTelemetryAddr)
83	assert.True(t, options.DevMode)
84}
85
86func TestExtendedAggregation(t *testing.T) {
87	options, err := resolveOptions([]Option{
88		WithExtendedClientSideAggregation(),
89	})
90
91	assert.NoError(t, err)
92	assert.Equal(t, options.Aggregation, true)
93	assert.Equal(t, options.ExtendedAggregation, true)
94}
95
96func TestResetOptions(t *testing.T) {
97	options, err := resolveOptions([]Option{
98		WithChannelMode(),
99		WithMutexMode(),
100		WithClientSideAggregation(),
101		WithoutClientSideAggregation(),
102	})
103
104	assert.NoError(t, err)
105	assert.Equal(t, options.ReceiveMode, MutexMode)
106	assert.Equal(t, options.Aggregation, false)
107}
108func TestOptionsNamespaceWithoutDot(t *testing.T) {
109	testNamespace := "datadog"
110
111	options, err := resolveOptions([]Option{
112		WithNamespace(testNamespace),
113	})
114
115	assert.NoError(t, err)
116	assert.Equal(t, options.Namespace, testNamespace+".")
117}
118