Skip to content

Commit b7e83d0

Browse files
test: poll for port release in TcpServerTest to fix flake
After TcpServer.close(), there can be a brief OS-level delay before the port is fully released. Replace the immediate assertion with a polling helper that retries for up to 1 second. Co-Authored-By: rlamb@launchdarkly.com <4955475+kinyoklion@users.noreply.github.com>
1 parent c27bf26 commit b7e83d0

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

  • lib/shared/test-helpers/src/test/java/com/launchdarkly/testhelpers/tcptest

lib/shared/test-helpers/src/test/java/com/launchdarkly/testhelpers/tcptest/TcpServerTest.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void listensOnAnyAvailablePort() throws IOException {
2121
port = server.getPort();
2222
try (Socket s = new Socket("localhost", server.getPort())) {} // just verify that we can connect
2323
}
24-
assertFalse("expected listener to be closed, but it wasn't", doesPortHaveListener(port));
24+
assertPortReleased(port);
2525
}
2626

2727
@Test
@@ -37,6 +37,21 @@ public void listensOnSpecificPort() throws IOException {
3737
assertEquals(specificPort, server.getPort());
3838
try (Socket s = new Socket("localhost", specificPort)) {} // just verify that we can connect
3939
}
40-
assertFalse("expected listener to be closed, but it wasn't", doesPortHaveListener(specificPort));
40+
assertPortReleased(specificPort);
41+
}
42+
43+
private static void assertPortReleased(int port) {
44+
long deadline = System.currentTimeMillis() + 1000;
45+
while (System.currentTimeMillis() < deadline) {
46+
if (!doesPortHaveListener(port)) {
47+
return;
48+
}
49+
try {
50+
Thread.sleep(50);
51+
} catch (InterruptedException e) {
52+
throw new RuntimeException(e);
53+
}
54+
}
55+
assertFalse("expected listener to be closed, but it wasn't", doesPortHaveListener(port));
4156
}
4257
}

0 commit comments

Comments
 (0)