add pgbouncer testcase
This commit is contained in:
parent
379f74a5b3
commit
d41c20aad2
|
@ -0,0 +1,180 @@
|
|||
package pgbouncer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPgbouncerGeneratesMetrics(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping integration test in short mode")
|
||||
}
|
||||
|
||||
p := &Pgbouncer{
|
||||
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||||
testutil.GetLocalHost()),
|
||||
Databases: []string{"pgbouncer"},
|
||||
}
|
||||
|
||||
var acc testutil.Accumulator
|
||||
err := p.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
availableColumns := make(map[string]bool)
|
||||
for _, col := range p.AllColumns {
|
||||
availableColumns[col] = true
|
||||
}
|
||||
poolMetrics := []string{
|
||||
"cl_active",
|
||||
"cl_waiting",
|
||||
"maxwait",
|
||||
"pool_mode",
|
||||
"sv_active",
|
||||
"sv_idle",
|
||||
"sv_login",
|
||||
"sv_tested",
|
||||
"sv_used",
|
||||
}
|
||||
|
||||
statMetrics := []string{
|
||||
"avg_query",
|
||||
"avg_recv",
|
||||
"avg_req",
|
||||
"avg_sent",
|
||||
"total_query_time",
|
||||
"total_received",
|
||||
"total_requests",
|
||||
"total_sent",
|
||||
}
|
||||
|
||||
metricsCounted := 0
|
||||
|
||||
for _, metric := range poolMetrics {
|
||||
_, ok := availableColumns[metric]
|
||||
if ok {
|
||||
assert.True(t, acc.HasIntField("pgbouncer_pools", metric))
|
||||
metricsCounted++
|
||||
}
|
||||
}
|
||||
|
||||
for _, metric := range statMetrics {
|
||||
_, ok := availableColumns[metric]
|
||||
if ok {
|
||||
assert.True(t, acc.HasIntField("pgbouncer_stats", metric))
|
||||
metricsCounted++
|
||||
}
|
||||
}
|
||||
|
||||
assert.True(t, metricsCounted > 0)
|
||||
// assert.Equal(t, len(availableColumns)-len(p.IgnoredColumns()), metricsCounted)
|
||||
}
|
||||
|
||||
func TestPgbouncerTagsMetricsWithDatabaseName(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping integration test in short mode")
|
||||
}
|
||||
|
||||
p := &Pgbouncer{
|
||||
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||||
testutil.GetLocalHost()),
|
||||
Databases: []string{"pgbouncer"},
|
||||
}
|
||||
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := p.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
point, ok := acc.Get("pgbouncer_pools")
|
||||
require.True(t, ok)
|
||||
|
||||
assert.Equal(t, "pgbouncer", point.Tags["db"])
|
||||
|
||||
point, ok = acc.Get("pgbouncer_stats")
|
||||
require.True(t, ok)
|
||||
|
||||
assert.Equal(t, "pgbouncer", point.Tags["db"])
|
||||
}
|
||||
|
||||
func TestPgbouncerTagsMetricsWithSpecifiedDatabaseName(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping integration test in short mode")
|
||||
}
|
||||
|
||||
p := &Pgbouncer{
|
||||
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||||
testutil.GetLocalHost()),
|
||||
Databases: []string{"foo"},
|
||||
}
|
||||
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := p.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, ok := acc.Get("pgbouncer_pools")
|
||||
require.False(t, ok)
|
||||
|
||||
_, ok = acc.Get("pgbouncer_stats")
|
||||
require.False(t, ok)
|
||||
}
|
||||
|
||||
func TestPgbouncerDefaultsToAllDatabases(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping integration test in short mode")
|
||||
}
|
||||
|
||||
p := &Pgbouncer{
|
||||
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||||
testutil.GetLocalHost()),
|
||||
}
|
||||
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := p.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
var found bool
|
||||
|
||||
for _, pnt := range acc.Metrics {
|
||||
if pnt.Measurement == "pgbouncer_pools" {
|
||||
if pnt.Tags["db"] == "pgbouncer" {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if pnt.Measurement == "pgbouncer_stats" {
|
||||
if pnt.Tags["db"] == "pgbouncer" {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert.True(t, found)
|
||||
}
|
||||
|
||||
func TestPgbouncerIgnoresUnwantedColumns(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping integration test in short mode")
|
||||
}
|
||||
|
||||
p := &Pgbouncer{
|
||||
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||||
testutil.GetLocalHost()),
|
||||
}
|
||||
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := p.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
for col := range p.IgnoredColumns() {
|
||||
assert.False(t, acc.HasMeasurement(col))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue