telegraf/plugins/processors/port_name/port_name_test.go

262 lines
4.8 KiB
Go

package portname
import (
"strings"
"testing"
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
)
var fakeServices = `
http 80/tcp www # WorldWideWeb HTTP
https 443/tcp # http protocol over TLS/SSL
tftp 69/udp`
func TestReadServicesFile(t *testing.T) {
readServicesFile()
require.NotZero(t, len(services))
}
func TestFakeServices(t *testing.T) {
r := strings.NewReader(fakeServices)
m := readServices(r)
require.Equal(t, sMap{"tcp": {80: "http", 443: "https"}, "udp": {69: "tftp"}}, m)
}
func TestTable(t *testing.T) {
var tests = []struct {
name string
tag string
dest string
prot string
input []telegraf.Metric
expected []telegraf.Metric
}{
{
name: "ordinary tcp default",
tag: "port",
dest: "service",
prot: "tcp",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "443",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "443",
"service": "https",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
{
name: "force udp default",
tag: "port",
dest: "service",
prot: "udp",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "69",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "69",
"service": "tftp",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
{
name: "override default protocol",
tag: "port",
dest: "service",
prot: "foobar",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "80/tcp",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "80/tcp",
"service": "http",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
{
name: "multiple metrics, multiple protocols",
tag: "port",
dest: "service",
prot: "tcp",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "80",
},
map[string]interface{}{},
time.Unix(0, 0),
),
testutil.MustMetric(
"meas",
map[string]string{
"port": "69/udp",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "80",
"service": "http",
},
map[string]interface{}{},
time.Unix(0, 0),
),
testutil.MustMetric(
"meas",
map[string]string{
"port": "69/udp",
"service": "tftp",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
{
name: "rename source and destination tags",
tag: "foo",
dest: "bar",
prot: "tcp",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"foo": "80",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"foo": "80",
"bar": "http",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
{
name: "unknown port",
tag: "port",
dest: "service",
prot: "tcp",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "9999",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "9999",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
{
name: "don't mix up protocols",
tag: "port",
dest: "service",
prot: "udp",
input: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "80",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
expected: []telegraf.Metric{
testutil.MustMetric(
"meas",
map[string]string{
"port": "80",
},
map[string]interface{}{},
time.Unix(0, 0),
),
},
},
}
r := strings.NewReader(fakeServices)
services = readServices(r)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := PortName{
SourceTag: tt.tag,
DestTag: tt.dest,
DefaultProtocol: tt.prot,
Log: testutil.Logger{},
}
actual := p.Apply(tt.input...)
testutil.RequireMetricsEqual(t, tt.expected, actual)
})
}
}