98 lines
2.7 KiB
Go
98 lines
2.7 KiB
Go
|
package tengine
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net"
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
"net/url"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/influxdata/telegraf/testutil"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
const tengineSampleResponse = `127.0.0.1,784,1511,2,2,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0`
|
||
|
|
||
|
// Verify that tengine tags are properly parsed based on the server
|
||
|
func TestTengineTags(t *testing.T) {
|
||
|
urls := []string{"http://localhost/us", "http://localhost:80/us"}
|
||
|
var addr *url.URL
|
||
|
for _, url1 := range urls {
|
||
|
addr, _ = url.Parse(url1)
|
||
|
tagMap := getTags(addr, "127.0.0.1")
|
||
|
assert.Contains(t, tagMap["server"], "localhost")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestTengineGeneratesMetrics(t *testing.T) {
|
||
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
var rsp string
|
||
|
rsp = tengineSampleResponse
|
||
|
fmt.Fprintln(w, rsp)
|
||
|
}))
|
||
|
defer ts.Close()
|
||
|
|
||
|
n := &Tengine{
|
||
|
Urls: []string{fmt.Sprintf("%s/us", ts.URL)},
|
||
|
}
|
||
|
|
||
|
var acc_tengine testutil.Accumulator
|
||
|
|
||
|
err_tengine := acc_tengine.GatherError(n.Gather)
|
||
|
|
||
|
require.NoError(t, err_tengine)
|
||
|
|
||
|
fields_tengine := map[string]interface{}{
|
||
|
"bytes_in": uint64(784),
|
||
|
"bytes_out": uint64(1511),
|
||
|
"conn_total": uint64(2),
|
||
|
"req_total": uint64(2),
|
||
|
"http_2xx": uint64(1),
|
||
|
"http_3xx": uint64(0),
|
||
|
"http_4xx": uint64(1),
|
||
|
"http_5xx": uint64(0),
|
||
|
"http_other_status": uint64(0),
|
||
|
"rt": uint64(0),
|
||
|
"ups_req": uint64(0),
|
||
|
"ups_rt": uint64(0),
|
||
|
"ups_tries": uint64(0),
|
||
|
"http_200": uint64(1),
|
||
|
"http_206": uint64(0),
|
||
|
"http_302": uint64(0),
|
||
|
"http_304": uint64(0),
|
||
|
"http_403": uint64(0),
|
||
|
"http_404": uint64(1),
|
||
|
"http_416": uint64(0),
|
||
|
"http_499": uint64(0),
|
||
|
"http_500": uint64(0),
|
||
|
"http_502": uint64(0),
|
||
|
"http_503": uint64(0),
|
||
|
"http_504": uint64(0),
|
||
|
"http_508": uint64(0),
|
||
|
"http_other_detail_status": uint64(0),
|
||
|
"http_ups_4xx": uint64(0),
|
||
|
"http_ups_5xx": uint64(0),
|
||
|
}
|
||
|
|
||
|
addr, err := url.Parse(ts.URL)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
host, port, err := net.SplitHostPort(addr.Host)
|
||
|
if err != nil {
|
||
|
host = addr.Host
|
||
|
if addr.Scheme == "http" {
|
||
|
port = "80"
|
||
|
} else if addr.Scheme == "https" {
|
||
|
port = "443"
|
||
|
} else {
|
||
|
port = ""
|
||
|
}
|
||
|
}
|
||
|
tags := map[string]string{"server": host, "port": port, "server_name": "127.0.0.1"}
|
||
|
acc_tengine.AssertContainsTaggedFields(t, "tengine", fields_tengine, tags)
|
||
|
}
|