Skip to content

Commit 57c7885

Browse files
committed
testing: add a basic integration test
1 parent 1f64f7f commit 57c7885

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

senders/integration_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package senders
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
func TestEndToEnd(t *testing.T) {
10+
testServer := startTestServer()
11+
defer testServer.Close()
12+
sender, err := NewSender(testServer.URL)
13+
require.NoError(t, err)
14+
require.NoError(t, sender.SendMetric("my metric", 20, 0, "localhost", nil))
15+
require.NoError(t, sender.Flush())
16+
17+
assert.Equal(t, 1, len(testServer.MetricLines))
18+
assert.Equal(t, "\"my-metric\" 20 source=\"localhost\"", testServer.MetricLines[0])
19+
}

senders/test_server_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package senders
2+
3+
import (
4+
"bufio"
5+
"compress/gzip"
6+
"net/http"
7+
"net/http/httptest"
8+
)
9+
10+
func startTestServer() *testServer {
11+
handler := &testServer{}
12+
server := httptest.NewServer(handler)
13+
handler.httpServer = server
14+
handler.URL = server.URL
15+
return handler
16+
17+
}
18+
19+
type testServer struct {
20+
MetricLines []string
21+
httpServer *httptest.Server
22+
URL string
23+
}
24+
25+
func (s *testServer) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
26+
newLines, err := decodeMetricLines(request)
27+
if err != nil {
28+
writer.WriteHeader(500)
29+
}
30+
s.MetricLines = append(s.MetricLines, newLines...)
31+
writer.WriteHeader(200)
32+
}
33+
34+
func decodeMetricLines(request *http.Request) ([]string, error) {
35+
var metricLines []string
36+
reader, err := gzip.NewReader(request.Body)
37+
if err != nil {
38+
return metricLines, err
39+
}
40+
scanner := bufio.NewScanner(reader)
41+
for scanner.Scan() {
42+
line := scanner.Text()
43+
metricLines = append(metricLines, line)
44+
}
45+
if scanner.Err() != nil {
46+
reader.Close()
47+
return metricLines, scanner.Err()
48+
}
49+
return metricLines, reader.Close()
50+
}
51+
52+
func (s *testServer) Close() {
53+
s.httpServer.Close()
54+
}

0 commit comments

Comments
 (0)