97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
package mandrill
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/influxdata/telegraf/testutil"
|
|
)
|
|
|
|
func postWebhooks(t *testing.T, md *Webhook, eventBody string) *httptest.ResponseRecorder {
|
|
body := url.Values{}
|
|
body.Set("mandrill_events", eventBody)
|
|
req, err := http.NewRequest("POST", "/mandrill", strings.NewReader(body.Encode()))
|
|
require.NoError(t, err)
|
|
w := httptest.NewRecorder()
|
|
|
|
md.eventHandler(w, req)
|
|
|
|
return w
|
|
}
|
|
|
|
func headRequest(t *testing.T) *httptest.ResponseRecorder {
|
|
req, err := http.NewRequest("HEAD", "/mandrill", strings.NewReader(""))
|
|
require.NoError(t, err)
|
|
w := httptest.NewRecorder()
|
|
|
|
returnOK(w, req)
|
|
|
|
return w
|
|
}
|
|
|
|
func TestHead(t *testing.T) {
|
|
resp := headRequest(t)
|
|
if resp.Code != http.StatusOK {
|
|
t.Errorf("HEAD returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK)
|
|
}
|
|
}
|
|
|
|
func TestSendEvent(t *testing.T) {
|
|
var acc testutil.Accumulator
|
|
md := &Webhook{Path: "/mandrill", acc: &acc}
|
|
resp := postWebhooks(t, md, "["+readFile(t, "testdata/send_event.json")+"]")
|
|
if resp.Code != http.StatusOK {
|
|
t.Errorf("POST send returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK)
|
|
}
|
|
|
|
fields := map[string]interface{}{
|
|
"id": "id1",
|
|
}
|
|
|
|
tags := map[string]string{
|
|
"event": "send",
|
|
}
|
|
|
|
acc.AssertContainsTaggedFields(t, "mandrill_webhooks", fields, tags)
|
|
}
|
|
|
|
func TestMultipleEvents(t *testing.T) {
|
|
var acc testutil.Accumulator
|
|
md := &Webhook{Path: "/mandrill", acc: &acc}
|
|
resp := postWebhooks(t, md, "["+readFile(t, "testdata/send_event.json")+","+readFile(t, "testdata/hard_bounce_event.json")+"]")
|
|
if resp.Code != http.StatusOK {
|
|
t.Errorf("POST send returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK)
|
|
}
|
|
|
|
fields := map[string]interface{}{
|
|
"id": "id1",
|
|
}
|
|
|
|
tags := map[string]string{
|
|
"event": "send",
|
|
}
|
|
|
|
acc.AssertContainsTaggedFields(t, "mandrill_webhooks", fields, tags)
|
|
|
|
fields = map[string]interface{}{
|
|
"id": "id2",
|
|
}
|
|
|
|
tags = map[string]string{
|
|
"event": "hard_bounce",
|
|
}
|
|
acc.AssertContainsTaggedFields(t, "mandrill_webhooks", fields, tags)
|
|
}
|
|
|
|
func readFile(t *testing.T, filePath string) string {
|
|
data, err := os.ReadFile(filePath)
|
|
require.NoErrorf(t, err, "could not read from file %s", filePath)
|
|
|
|
return string(data)
|
|
}
|