telegraf/plugins/outputs/datadog/datadog_test.go

192 lines
4.1 KiB
Go
Raw Normal View History

2015-08-12 20:15:34 +00:00
package datadog
import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"reflect"
"testing"
"time"
2016-01-20 18:57:35 +00:00
"github.com/influxdata/telegraf/testutil"
"github.com/influxdata/telegraf"
2015-08-12 20:15:34 +00:00
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var (
fakeUrl = "http://test.datadog.com"
fakeApiKey = "123456"
)
func fakeDatadog() *Datadog {
d := NewDatadog(fakeUrl)
d.Apikey = fakeApiKey
return d
}
func TestUriOverride(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(`{"status":"ok"}`)
}))
defer ts.Close()
d := NewDatadog(ts.URL)
2015-08-14 01:42:57 +00:00
d.Apikey = "123456"
err := d.Connect()
require.NoError(t, err)
err = d.Write(testutil.MockMetrics())
2015-08-12 20:15:34 +00:00
require.NoError(t, err)
}
func TestBadStatusCode(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
json.NewEncoder(w).Encode(`{ 'errors': [
'Something bad happened to the server.',
'Your query made the server very sad.'
]
}`)
}))
defer ts.Close()
d := NewDatadog(ts.URL)
2015-08-14 01:42:57 +00:00
d.Apikey = "123456"
err := d.Connect()
require.NoError(t, err)
err = d.Write(testutil.MockMetrics())
2015-08-12 20:15:34 +00:00
if err == nil {
t.Errorf("error expected but none returned")
} else {
2015-08-14 01:42:57 +00:00
require.EqualError(t, fmt.Errorf("received bad status code, 500\n"), err.Error())
2015-08-12 20:15:34 +00:00
}
}
func TestAuthenticatedUrl(t *testing.T) {
d := fakeDatadog()
authUrl := d.authenticatedUrl()
assert.EqualValues(t, fmt.Sprintf("%s?api_key=%s", fakeUrl, fakeApiKey), authUrl)
}
func TestBuildTags(t *testing.T) {
var tagtests = []struct {
ptIn map[string]string
outTags []string
}{
{
map[string]string{"one": "two", "three": "four"},
2015-08-12 20:15:34 +00:00
[]string{"one:two", "three:four"},
},
{
map[string]string{"aaa": "bbb"},
[]string{"aaa:bbb"},
},
{
map[string]string{},
[]string{},
},
}
for _, tt := range tagtests {
tags := buildTags(tt.ptIn)
2015-08-12 20:15:34 +00:00
if !reflect.DeepEqual(tags, tt.outTags) {
t.Errorf("\nexpected %+v\ngot %+v\n", tt.outTags, tags)
}
}
}
func TestBuildPoint(t *testing.T) {
var tagtests = []struct {
ptIn telegraf.Metric
2015-08-12 20:15:34 +00:00
outPt Point
err error
}{
{
testutil.TestMetric(0.0, "test1"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
0.0,
2015-08-12 20:15:34 +00:00
},
nil,
},
{
testutil.TestMetric(1.0, "test2"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
1.0,
2015-08-12 20:15:34 +00:00
},
nil,
},
{
testutil.TestMetric(10, "test3"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
10.0,
2015-08-12 20:15:34 +00:00
},
nil,
},
{
testutil.TestMetric(int32(112345), "test4"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
112345.0,
2015-08-12 20:15:34 +00:00
},
nil,
},
{
testutil.TestMetric(int64(112345), "test5"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
112345.0,
2015-08-12 20:15:34 +00:00
},
nil,
},
{
testutil.TestMetric(float32(11234.5), "test6"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
11234.5,
2015-08-12 20:15:34 +00:00
},
nil,
},
}
for _, tt := range tagtests {
pt, err := buildMetrics(tt.ptIn)
2015-08-12 20:15:34 +00:00
if err != nil && tt.err == nil {
t.Errorf("%s: unexpected error, %+v\n", tt.ptIn.Name(), err)
2015-08-12 20:15:34 +00:00
}
if tt.err != nil && err == nil {
t.Errorf("%s: expected an error (%s) but none returned", tt.ptIn.Name(), tt.err.Error())
2015-08-12 20:15:34 +00:00
}
if !reflect.DeepEqual(pt["value"], tt.outPt) && tt.err == nil {
t.Errorf("%s: \nexpected %+v\ngot %+v\n",
tt.ptIn.Name(), tt.outPt, pt["value"])
2015-08-12 20:15:34 +00:00
}
}
}
func TestVerifyValue(t *testing.T) {
var tagtests = []struct {
ptIn telegraf.Metric
validMetric bool
}{
{
testutil.TestMetric(float32(11234.5), "test1"),
true,
},
{
testutil.TestMetric("11234.5", "test2"),
false,
},
}
for _, tt := range tagtests {
ok := verifyValue(tt.ptIn.Fields()["value"])
if tt.validMetric != ok {
t.Errorf("%s: verification failed\n", tt.ptIn.Name())
}
}
}