Skip to content

Commit c8f8665

Browse files
committed
Add end-to-end test for v1 series
Co-authored by: Federico Torres <[email protected]>:
1 parent ee4e3e4 commit c8f8665

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

receiver/datadogreceiver/receiver_test.go

+66
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44
package datadogreceiver
55

66
import (
7+
"bytes"
78
"context"
89
"errors"
910
"fmt"
11+
"go.opentelemetry.io/collector/pdata/pcommon"
12+
"go.opentelemetry.io/collector/pdata/pmetric"
13+
"go.uber.org/multierr"
1014
"io"
1115
"net/http"
1216
"strings"
@@ -102,3 +106,65 @@ func TestDatadogServer(t *testing.T) {
102106
})
103107
}
104108
}
109+
110+
func TestDatadogMetricsV1_EndToEnd(t *testing.T) {
111+
cfg := createDefaultConfig().(*Config)
112+
cfg.Endpoint = "localhost:0" // Using a randomly assigned address
113+
sink := new(consumertest.MetricsSink)
114+
115+
dd, err := newDataDogReceiver(
116+
cfg,
117+
receivertest.NewNopCreateSettings(),
118+
)
119+
require.NoError(t, err, "Must not error when creating receiver")
120+
dd.(*datadogReceiver).nextMetricsConsumer = sink
121+
122+
require.NoError(t, dd.Start(context.Background(), componenttest.NewNopHost()))
123+
defer func() {
124+
require.NoError(t, dd.Shutdown(context.Background()))
125+
}()
126+
127+
metricsPayloadV1 := []byte(`{
128+
"series": [
129+
{
130+
"metric": "system.load.1",
131+
"host": "testHost",
132+
"type": "count",
133+
"points": [[1636629071,0.7]],
134+
"source_type_name": "kubernetes",
135+
"tags": ["environment:test"]
136+
}
137+
]
138+
}`)
139+
140+
req, err := http.NewRequest(
141+
http.MethodPost,
142+
fmt.Sprintf("http://%s/api/v1/series", dd.(*datadogReceiver).address),
143+
io.NopCloser(bytes.NewReader(metricsPayloadV1)),
144+
)
145+
require.NoError(t, err, "Must not error when creating request")
146+
147+
resp, err := http.DefaultClient.Do(req)
148+
require.NoError(t, err, "Must not error performing request")
149+
150+
body, err := io.ReadAll(resp.Body)
151+
require.NoError(t, multierr.Combine(err, resp.Body.Close()), "Must not error when reading body")
152+
require.Equal(t, string(body), "OK", "Expected response to be 'OK', got %s", string(body))
153+
require.Equal(t, http.StatusAccepted, resp.StatusCode)
154+
155+
mds := sink.AllMetrics()
156+
require.Len(t, mds, 1)
157+
got := mds[0]
158+
require.Equal(t, 1, got.ResourceMetrics().Len())
159+
metrics := got.ResourceMetrics().At(0).ScopeMetrics().At(0).Metrics()
160+
assert.Equal(t, 1, metrics.Len())
161+
metric := metrics.At(0)
162+
assert.Equal(t, pmetric.MetricTypeSum, metric.Type())
163+
assert.Equal(t, "system.load.1", metric.Name())
164+
assert.Equal(t, pmetric.AggregationTemporalityDelta, metric.Sum().AggregationTemporality())
165+
assert.Equal(t, false, metric.Sum().IsMonotonic())
166+
assert.Equal(t, pcommon.Timestamp(1636629071*1_000_000_000), metric.Sum().DataPoints().At(0).Timestamp())
167+
assert.Equal(t, 0.7, metric.Sum().DataPoints().At(0).DoubleValue())
168+
expectedEnvironment, _ := metric.Sum().DataPoints().At(0).Attributes().Get("environment")
169+
assert.Equal(t, "test", expectedEnvironment.AsString())
170+
}

0 commit comments

Comments
 (0)