0.3.0 unit tests: mysql, nginx, phpfpm, ping, postgres
This commit is contained in:
parent
6a4bf9fcff
commit
6eb49dee5d
|
@ -2,7 +2,6 @@ package mysql
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/influxdb/telegraf/testutil"
|
"github.com/influxdb/telegraf/testutil"
|
||||||
|
@ -10,64 +9,6 @@ import (
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMysqlGeneratesMetrics(t *testing.T) {
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("Skipping integration test in short mode")
|
|
||||||
}
|
|
||||||
|
|
||||||
m := &Mysql{
|
|
||||||
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
|
|
||||||
}
|
|
||||||
|
|
||||||
var acc testutil.Accumulator
|
|
||||||
|
|
||||||
err := m.Gather(&acc)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
prefixes := []struct {
|
|
||||||
prefix string
|
|
||||||
count int
|
|
||||||
}{
|
|
||||||
{"commands", 139},
|
|
||||||
{"handler", 16},
|
|
||||||
{"bytes", 2},
|
|
||||||
{"innodb", 46},
|
|
||||||
{"threads", 4},
|
|
||||||
{"aborted", 2},
|
|
||||||
{"created", 3},
|
|
||||||
{"key", 7},
|
|
||||||
{"open", 7},
|
|
||||||
{"opened", 3},
|
|
||||||
{"qcache", 8},
|
|
||||||
{"table", 1},
|
|
||||||
}
|
|
||||||
|
|
||||||
intMetrics := []string{
|
|
||||||
"queries",
|
|
||||||
"slow_queries",
|
|
||||||
"connections",
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, prefix := range prefixes {
|
|
||||||
var count int
|
|
||||||
|
|
||||||
for _, p := range acc.Points {
|
|
||||||
if strings.HasPrefix(p.Measurement, prefix.prefix) {
|
|
||||||
count++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if prefix.count > count {
|
|
||||||
t.Errorf("Expected less than %d measurements with prefix %s, got %d",
|
|
||||||
count, prefix.prefix, prefix.count)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, metric := range intMetrics {
|
|
||||||
assert.True(t, acc.HasIntValue(metric))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMysqlDefaultsToLocal(t *testing.T) {
|
func TestMysqlDefaultsToLocal(t *testing.T) {
|
||||||
if testing.Short() {
|
if testing.Short() {
|
||||||
t.Skip("Skipping integration test in short mode")
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
@ -82,7 +23,7 @@ func TestMysqlDefaultsToLocal(t *testing.T) {
|
||||||
err := m.Gather(&acc)
|
err := m.Gather(&acc)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.True(t, len(acc.Points) > 0)
|
assert.True(t, acc.HasMeasurement("mysql"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMysqlParseDSN(t *testing.T) {
|
func TestMysqlParseDSN(t *testing.T) {
|
||||||
|
|
|
@ -54,17 +54,14 @@ func TestNginxGeneratesMetrics(t *testing.T) {
|
||||||
err := n.Gather(&acc)
|
err := n.Gather(&acc)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
metrics := []struct {
|
fields := map[string]interface{}{
|
||||||
name string
|
"active": uint64(585),
|
||||||
value uint64
|
"accepts": uint64(85340),
|
||||||
}{
|
"handled": uint64(85340),
|
||||||
{"active", 585},
|
"requests": uint64(35085),
|
||||||
{"accepts", 85340},
|
"reading": uint64(4),
|
||||||
{"handled", 85340},
|
"writing": uint64(135),
|
||||||
{"requests", 35085},
|
"waiting": uint64(446),
|
||||||
{"reading", 4},
|
|
||||||
{"writing", 135},
|
|
||||||
{"waiting", 446},
|
|
||||||
}
|
}
|
||||||
addr, err := url.Parse(ts.URL)
|
addr, err := url.Parse(ts.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -84,8 +81,5 @@ func TestNginxGeneratesMetrics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
tags := map[string]string{"server": host, "port": port}
|
tags := map[string]string{"server": host, "port": port}
|
||||||
|
acc.AssertContainsTaggedFields(t, "nginx", fields, tags)
|
||||||
for _, m := range metrics {
|
|
||||||
assert.NoError(t, acc.ValidateTaggedValue(m.name, m.value, tags))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,27 +32,21 @@ func TestPhpFpmGeneratesMetrics(t *testing.T) {
|
||||||
"url": ts.Listener.Addr().String(),
|
"url": ts.Listener.Addr().String(),
|
||||||
"pool": "www",
|
"pool": "www",
|
||||||
}
|
}
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("accepted_conn", int64(3), tags))
|
|
||||||
|
|
||||||
checkInt := []struct {
|
fields := map[string]interface{}{
|
||||||
name string
|
"accepted_conn": int64(3),
|
||||||
value int64
|
"listen_queue": int64(1),
|
||||||
}{
|
"max_listen_queue": int64(0),
|
||||||
{"accepted_conn", 3},
|
"listen_queue_len": int64(0),
|
||||||
{"listen_queue", 1},
|
"idle_processes": int64(1),
|
||||||
{"max_listen_queue", 0},
|
"active_processes": int64(1),
|
||||||
{"listen_queue_len", 0},
|
"total_processes": int64(2),
|
||||||
{"idle_processes", 1},
|
"max_active_processes": int64(1),
|
||||||
{"active_processes", 1},
|
"max_children_reached": int64(2),
|
||||||
{"total_processes", 2},
|
"slow_requests": int64(1),
|
||||||
{"max_active_processes", 1},
|
|
||||||
{"max_children_reached", 2},
|
|
||||||
{"slow_requests", 1},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range checkInt {
|
acc.AssertContainsTaggedFields(t, "phpfpm", fields, tags)
|
||||||
assert.Equal(t, true, acc.CheckValue(c.name, c.value))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//When not passing server config, we default to localhost
|
//When not passing server config, we default to localhost
|
||||||
|
|
|
@ -120,18 +120,16 @@ func TestPingGather(t *testing.T) {
|
||||||
|
|
||||||
p.Gather(&acc)
|
p.Gather(&acc)
|
||||||
tags := map[string]string{"url": "www.google.com"}
|
tags := map[string]string{"url": "www.google.com"}
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_transmitted", 5, tags))
|
fields := map[string]interface{}{
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_received", 5, tags))
|
"packets_transmitted": 5,
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("percent_packet_loss", 0.0, tags))
|
"packets_received": 5,
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("average_response_ms",
|
"percent_packet_loss": 0.0,
|
||||||
43.628, tags))
|
"average_response_ms": 43.628,
|
||||||
|
}
|
||||||
|
acc.AssertContainsTaggedFields(t, "ping", fields, tags)
|
||||||
|
|
||||||
tags = map[string]string{"url": "www.reddit.com"}
|
tags = map[string]string{"url": "www.reddit.com"}
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_transmitted", 5, tags))
|
acc.AssertContainsTaggedFields(t, "ping", fields, tags)
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_received", 5, tags))
|
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("percent_packet_loss", 0.0, tags))
|
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("average_response_ms",
|
|
||||||
43.628, tags))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var lossyPingOutput = `
|
var lossyPingOutput = `
|
||||||
|
@ -159,10 +157,13 @@ func TestLossyPingGather(t *testing.T) {
|
||||||
|
|
||||||
p.Gather(&acc)
|
p.Gather(&acc)
|
||||||
tags := map[string]string{"url": "www.google.com"}
|
tags := map[string]string{"url": "www.google.com"}
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_transmitted", 5, tags))
|
fields := map[string]interface{}{
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_received", 3, tags))
|
"packets_transmitted": 5,
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("percent_packet_loss", 40.0, tags))
|
"packets_received": 3,
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("average_response_ms", 44.033, tags))
|
"percent_packet_loss": 40.0,
|
||||||
|
"average_response_ms": 44.033,
|
||||||
|
}
|
||||||
|
acc.AssertContainsTaggedFields(t, "ping", fields, tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
var errorPingOutput = `
|
var errorPingOutput = `
|
||||||
|
@ -188,10 +189,13 @@ func TestBadPingGather(t *testing.T) {
|
||||||
|
|
||||||
p.Gather(&acc)
|
p.Gather(&acc)
|
||||||
tags := map[string]string{"url": "www.amazon.com"}
|
tags := map[string]string{"url": "www.amazon.com"}
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_transmitted", 2, tags))
|
fields := map[string]interface{}{
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("packets_received", 0, tags))
|
"packets_transmitted": 2,
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("percent_packet_loss", 100.0, tags))
|
"packets_received": 0,
|
||||||
assert.NoError(t, acc.ValidateTaggedValue("average_response_ms", 0.0, tags))
|
"percent_packet_loss": 100.0,
|
||||||
|
"average_response_ms": 0.0,
|
||||||
|
}
|
||||||
|
acc.AssertContainsTaggedFields(t, "ping", fields, tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
func mockFatalHostPinger(args ...string) (string, error) {
|
func mockFatalHostPinger(args ...string) (string, error) {
|
||||||
|
|
|
@ -15,13 +15,9 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
|
||||||
{
|
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
testutil.GetLocalHost()),
|
testutil.GetLocalHost()),
|
||||||
Databases: []string{"postgres"},
|
Databases: []string{"postgres"},
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var acc testutil.Accumulator
|
var acc testutil.Accumulator
|
||||||
|
@ -30,7 +26,7 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
availableColumns := make(map[string]bool)
|
availableColumns := make(map[string]bool)
|
||||||
for _, col := range p.Servers[0].OrderedColumns {
|
for _, col := range p.OrderedColumns {
|
||||||
availableColumns[col] = true
|
availableColumns[col] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +57,7 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
||||||
for _, metric := range intMetrics {
|
for _, metric := range intMetrics {
|
||||||
_, ok := availableColumns[metric]
|
_, ok := availableColumns[metric]
|
||||||
if ok {
|
if ok {
|
||||||
assert.True(t, acc.HasIntValue(metric))
|
assert.True(t, acc.HasIntField("postgresql", metric))
|
||||||
metricsCounted++
|
metricsCounted++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +65,7 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
||||||
for _, metric := range floatMetrics {
|
for _, metric := range floatMetrics {
|
||||||
_, ok := availableColumns[metric]
|
_, ok := availableColumns[metric]
|
||||||
if ok {
|
if ok {
|
||||||
assert.True(t, acc.HasFloatValue(metric))
|
assert.True(t, acc.HasFloatField("postgresql", metric))
|
||||||
metricsCounted++
|
metricsCounted++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,13 +80,9 @@ func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
|
||||||
{
|
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
testutil.GetLocalHost()),
|
testutil.GetLocalHost()),
|
||||||
Databases: []string{"postgres"},
|
Databases: []string{"postgres"},
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var acc testutil.Accumulator
|
var acc testutil.Accumulator
|
||||||
|
@ -98,7 +90,7 @@ func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) {
|
||||||
err := p.Gather(&acc)
|
err := p.Gather(&acc)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
point, ok := acc.Get("xact_commit")
|
point, ok := acc.Get("postgresql")
|
||||||
require.True(t, ok)
|
require.True(t, ok)
|
||||||
|
|
||||||
assert.Equal(t, "postgres", point.Tags["db"])
|
assert.Equal(t, "postgres", point.Tags["db"])
|
||||||
|
@ -110,12 +102,8 @@ func TestPostgresqlDefaultsToAllDatabases(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
|
||||||
{
|
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
testutil.GetLocalHost()),
|
testutil.GetLocalHost()),
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var acc testutil.Accumulator
|
var acc testutil.Accumulator
|
||||||
|
@ -126,7 +114,7 @@ func TestPostgresqlDefaultsToAllDatabases(t *testing.T) {
|
||||||
var found bool
|
var found bool
|
||||||
|
|
||||||
for _, pnt := range acc.Points {
|
for _, pnt := range acc.Points {
|
||||||
if pnt.Measurement == "xact_commit" {
|
if pnt.Measurement == "postgresql" {
|
||||||
if pnt.Tags["db"] == "postgres" {
|
if pnt.Tags["db"] == "postgres" {
|
||||||
found = true
|
found = true
|
||||||
break
|
break
|
||||||
|
@ -143,12 +131,8 @@ func TestPostgresqlIgnoresUnwantedColumns(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
|
||||||
{
|
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
testutil.GetLocalHost()),
|
testutil.GetLocalHost()),
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var acc testutil.Accumulator
|
var acc testutil.Accumulator
|
||||||
|
|
Loading…
Reference in New Issue