public void start() throws InterruptedException {
var startLatch = new CountDownLatch(1);
new Thread(() -> {
- try {
- startLatch.countDown();
- try (var socket = serverSocket.accept()) {
- handleSocket(socket.getInputStream(), socket.getOutputStream());
+ startLatch.countDown();
+ while (true) {
+ try {
+ try (var socket = serverSocket.accept()) {
+ handleSocket(socket.getInputStream(), socket.getOutputStream());
+ }
+ } catch (IOException e) {
+ /* swallow exceptions. */
}
- } catch (IOException e) {
- /* swallow exceptions. */
}
}).start();
startLatch.await();
}
}
+ @Test
+ @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD)
+ public void serverCanHandleMultipleConnections() throws Exception {
+ try (var server = new Server()) {
+ server.start();
+ try (var connection = new Socket("localhost", server.getPort());
+ var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
+ var line = reader.readLine();
+ assertThat(line, equalTo("{\"event\":\"connected\"}"));
+ }
+ try (var connection = new Socket("localhost", server.getPort());
+ var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
+ var line = reader.readLine();
+ assertThat(line, equalTo("{\"event\":\"connected\"}"));
+ }
+ }
+ }
+
private static void connectToServerAndWaitForEvent(ThrowingConsumer<BufferedReader> readerConsumer) throws Throwable {
try (var server = new Server()) {
server.start();