262 lines
4.8 KiB
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)
|
|
})
|
|
}
|
|
}
|