diff --git a/plugins/inputs/radius/radius_test.go b/plugins/inputs/radius/radius_test.go index fd5ba1619..8ccea751a 100644 --- a/plugins/inputs/radius/radius_test.go +++ b/plugins/inputs/radius/radius_test.go @@ -3,6 +3,7 @@ package radius import ( "context" "errors" + "net" "path/filepath" "testing" "time" @@ -31,14 +32,22 @@ func TestRadiusLocal(t *testing.T) { } } + // Setup a connection to be able to get a random port + conn, err := net.ListenPacket("udp4", "127.0.0.1:0") + require.NoError(t, err) + defer conn.Close() + addr := conn.LocalAddr().String() + host, port, err := net.SplitHostPort(addr) + require.NoError(t, err) + server := radius.PacketServer{ Handler: radius.HandlerFunc(handler), SecretSource: radius.StaticSecretSource([]byte(`testsecret`)), - Addr: ":1813", + Addr: addr, } go func() { - if err := server.ListenAndServe(); err != nil { + if err := server.Serve(conn); err != nil { if !errors.Is(err, radius.ErrServerShutdown) { require.NoError(t, err, "local radius server failed") } @@ -46,25 +55,25 @@ func TestRadiusLocal(t *testing.T) { }() plugin := &Radius{ - Servers: []string{"localhost:1813"}, + Servers: []string{addr}, Username: config.NewSecret([]byte(`testusername`)), Password: config.NewSecret([]byte(`testpassword`)), Secret: config.NewSecret([]byte(`testsecret`)), Log: testutil.Logger{}, } - var acc testutil.Accumulator - require.NoError(t, plugin.Init()) - require.NoError(t, plugin.Gather(&acc)) - require.Len(t, acc.Errors, 0) + + var acc testutil.Accumulator + require.NoError(t, acc.GatherError(plugin.Gather)) + if !acc.HasMeasurement("radius") { t.Errorf("acc.HasMeasurement: expected radius") } require.Equal(t, true, acc.HasTag("radius", "source")) require.Equal(t, true, acc.HasTag("radius", "source_port")) require.Equal(t, true, acc.HasTag("radius", "response_code")) - require.Equal(t, "localhost", acc.TagValue("radius", "source")) - require.Equal(t, "1813", acc.TagValue("radius", "source_port")) + require.Equal(t, host, acc.TagValue("radius", "source")) + require.Equal(t, port, acc.TagValue("radius", "source_port")) require.Equal(t, radius.CodeAccessAccept.String(), acc.TagValue("radius", "response_code")) require.Equal(t, true, acc.HasInt64Field("radius", "responsetime_ms"))