fix(inputs.socket_listener): Fix race in tests (#13300)
This commit is contained in:
parent
b08a2bb324
commit
759691a1fd
|
|
@ -136,9 +136,8 @@ func TestSocketListener(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup plugin according to test specification
|
// Setup plugin according to test specification
|
||||||
logger := &testutil.CaptureLogger{}
|
|
||||||
plugin := &SocketListener{
|
plugin := &SocketListener{
|
||||||
Log: logger,
|
Log: &testutil.Logger{},
|
||||||
ServiceAddress: proto + "://" + serverAddr,
|
ServiceAddress: proto + "://" + serverAddr,
|
||||||
ContentEncoding: tt.encoding,
|
ContentEncoding: tt.encoding,
|
||||||
ReadBufferSize: tt.buffersize,
|
ReadBufferSize: tt.buffersize,
|
||||||
|
|
@ -190,29 +189,63 @@ func TestSocketListener(t *testing.T) {
|
||||||
}, time.Second, 100*time.Millisecond, "did not receive metrics (%d)", acc.NMetrics())
|
}, time.Second, 100*time.Millisecond, "did not receive metrics (%d)", acc.NMetrics())
|
||||||
actual := acc.GetTelegrafMetrics()
|
actual := acc.GetTelegrafMetrics()
|
||||||
testutil.RequireMetricsEqual(t, expected, actual, testutil.SortMetrics())
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.SortMetrics())
|
||||||
|
|
||||||
if sl, ok := plugin.listener.(*streamListener); ok {
|
|
||||||
require.NotEmpty(t, sl.connections)
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.Stop()
|
|
||||||
|
|
||||||
// Make sure we clear out old messages
|
|
||||||
logger.Clear()
|
|
||||||
if _, ok := plugin.listener.(*streamListener); ok {
|
|
||||||
// Verify that plugin.Stop() closed the client's connection
|
|
||||||
_ = client.SetReadDeadline(time.Now().Add(time.Second))
|
|
||||||
buf := []byte{1}
|
|
||||||
_, err = client.Read(buf)
|
|
||||||
require.Equal(t, err, io.EOF)
|
|
||||||
}
|
|
||||||
|
|
||||||
require.Empty(t, logger.Errors())
|
|
||||||
require.Empty(t, logger.Warnings())
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSocketListenerStream(t *testing.T) {
|
||||||
|
logger := &testutil.CaptureLogger{}
|
||||||
|
|
||||||
|
plugin := &SocketListener{
|
||||||
|
Log: logger,
|
||||||
|
ServiceAddress: "tcp://127.0.0.1:0",
|
||||||
|
ReadBufferSize: 1024,
|
||||||
|
}
|
||||||
|
parser := &influx.Parser{}
|
||||||
|
require.NoError(t, parser.Init())
|
||||||
|
plugin.SetParser(parser)
|
||||||
|
|
||||||
|
// Start the plugin
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
require.NoError(t, plugin.Init())
|
||||||
|
require.NoError(t, plugin.Start(&acc))
|
||||||
|
defer plugin.Stop()
|
||||||
|
|
||||||
|
addr := plugin.listener.addr()
|
||||||
|
|
||||||
|
// Create a noop client
|
||||||
|
client, err := createClient(plugin.ServiceAddress, addr, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = client.Write([]byte("test value=42i\n"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Eventually(t, func() bool {
|
||||||
|
acc.Lock()
|
||||||
|
defer acc.Unlock()
|
||||||
|
return acc.NMetrics() >= 1
|
||||||
|
}, time.Second, 100*time.Millisecond, "did not receive metric")
|
||||||
|
|
||||||
|
// This has to be a stream-listener...
|
||||||
|
listener, ok := plugin.listener.(*streamListener)
|
||||||
|
require.True(t, ok)
|
||||||
|
listener.Lock()
|
||||||
|
conns := len(listener.connections)
|
||||||
|
listener.Unlock()
|
||||||
|
require.NotZero(t, conns)
|
||||||
|
|
||||||
|
plugin.Stop()
|
||||||
|
|
||||||
|
// Verify that plugin.Stop() closed the client's connection
|
||||||
|
_ = client.SetReadDeadline(time.Now().Add(time.Second))
|
||||||
|
buf := []byte{1}
|
||||||
|
_, err = client.Read(buf)
|
||||||
|
require.Equal(t, err, io.EOF)
|
||||||
|
|
||||||
|
require.Empty(t, logger.Errors())
|
||||||
|
require.Empty(t, logger.Warnings())
|
||||||
|
}
|
||||||
|
|
||||||
func TestCases(t *testing.T) {
|
func TestCases(t *testing.T) {
|
||||||
// Get all directories in testdata
|
// Get all directories in testdata
|
||||||
folders, err := os.ReadDir("testcases")
|
folders, err := os.ReadDir("testcases")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue