105 lines
1.9 KiB
Go
105 lines
1.9 KiB
Go
|
package expvar
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/influxdb/telegraf/testutil"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestBasic(t *testing.T) {
|
||
|
js := `
|
||
|
{
|
||
|
"_1": {
|
||
|
"name": "foo",
|
||
|
"tags": {
|
||
|
"id": "ex1"
|
||
|
},
|
||
|
"values": {
|
||
|
"i": -1,
|
||
|
"f": 0.5,
|
||
|
"b": true,
|
||
|
"s": "string"
|
||
|
}
|
||
|
},
|
||
|
"ignored": {
|
||
|
"willBeRecorded": false
|
||
|
},
|
||
|
"ignoredAndNested": {
|
||
|
"hash": {
|
||
|
"is": "nested"
|
||
|
}
|
||
|
},
|
||
|
"array": [
|
||
|
"makes parsing more difficult than necessary"
|
||
|
],
|
||
|
"string": "makes parsing more difficult than necessary",
|
||
|
"_2": {
|
||
|
"name": "bar",
|
||
|
"tags": {
|
||
|
"id": "ex2"
|
||
|
},
|
||
|
"values": {
|
||
|
"x": "x"
|
||
|
}
|
||
|
},
|
||
|
"pointWithoutFields_willNotBeIncluded": {
|
||
|
"name": "asdf",
|
||
|
"tags": {
|
||
|
"id": "ex3"
|
||
|
},
|
||
|
"values": {}
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
fakeServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
if r.URL.Path == "/expvar" {
|
||
|
_, _ = w.Write([]byte(js))
|
||
|
} else {
|
||
|
w.WriteHeader(http.StatusNotFound)
|
||
|
}
|
||
|
}))
|
||
|
defer fakeServer.Close()
|
||
|
|
||
|
expvar := &Expvar{
|
||
|
Services: []Service{
|
||
|
{
|
||
|
Name: "test",
|
||
|
URLs: []string{fakeServer.URL + "/expvar"},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
require.NoError(t, expvar.Gather(&acc))
|
||
|
|
||
|
require.Len(t, acc.Points, 2)
|
||
|
require.NoError(t, acc.ValidateTaggedFieldsValue(
|
||
|
"test_foo",
|
||
|
map[string]interface{}{
|
||
|
// JSON will truncate floats to integer representations.
|
||
|
// Since there's no distinction in JSON, we can't assume it's an int.
|
||
|
"i": -1.0,
|
||
|
"f": 0.5,
|
||
|
"b": true,
|
||
|
"s": "string",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"id": "ex1",
|
||
|
"expvar_url": fakeServer.URL + "/expvar",
|
||
|
},
|
||
|
))
|
||
|
require.NoError(t, acc.ValidateTaggedFieldsValue(
|
||
|
"test_bar",
|
||
|
map[string]interface{}{
|
||
|
"x": "x",
|
||
|
},
|
||
|
map[string]string{
|
||
|
"id": "ex2",
|
||
|
"expvar_url": fakeServer.URL + "/expvar",
|
||
|
},
|
||
|
))
|
||
|
}
|