telegraf/plugins/inputs/minecraft/minecraft_test.go

125 lines
2.4 KiB
Go

package minecraft
import (
"testing"
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
)
type MockClient struct {
ConnectF func() error
PlayersF func() ([]string, error)
ScoresF func(player string) ([]Score, error)
}
func (c *MockClient) Connect() error {
return c.ConnectF()
}
func (c *MockClient) Players() ([]string, error) {
return c.PlayersF()
}
func (c *MockClient) Scores(player string) ([]Score, error) {
return c.ScoresF(player)
}
func TestGather(t *testing.T) {
now := time.Unix(0, 0)
tests := []struct {
name string
client *MockClient
metrics []telegraf.Metric
err error
}{
{
name: "no players",
client: &MockClient{
ConnectF: func() error {
return nil
},
PlayersF: func() ([]string, error) {
return []string{}, nil
},
},
metrics: []telegraf.Metric{},
},
{
name: "one player without scores",
client: &MockClient{
ConnectF: func() error {
return nil
},
PlayersF: func() ([]string, error) {
return []string{"Etho"}, nil
},
ScoresF: func(player string) ([]Score, error) {
switch player {
case "Etho":
return []Score{}, nil
default:
panic("unknown player")
}
},
},
metrics: []telegraf.Metric{},
},
{
name: "one player with scores",
client: &MockClient{
ConnectF: func() error {
return nil
},
PlayersF: func() ([]string, error) {
return []string{"Etho"}, nil
},
ScoresF: func(player string) ([]Score, error) {
switch player {
case "Etho":
return []Score{{Name: "jumps", Value: 42}}, nil
default:
panic("unknown player")
}
},
},
metrics: []telegraf.Metric{
testutil.MustMetric(
"minecraft",
map[string]string{
"player": "Etho",
"server": "example.org:25575",
"source": "example.org",
"port": "25575",
},
map[string]interface{}{
"jumps": 42,
},
now,
),
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
plugin := &Minecraft{
Server: "example.org",
Port: "25575",
Password: "xyzzy",
client: tt.client,
}
var acc testutil.Accumulator
acc.TimeFunc = func() time.Time { return now }
err := plugin.Gather(&acc)
require.Equal(t, tt.err, err)
testutil.RequireMetricsEqual(t, tt.metrics, acc.GetTelegrafMetrics())
})
}
}