package org.jabref.logic.remote; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import org.jabref.logic.remote.client.RemoteListenerClient; import org.jabref.logic.remote.server.RemoteListenerServerLifecycle; import org.junit.Assert; import org.junit.Test; public class RemoteTest { @Test public void testGoodCase() { final int port = 34567; final String message = "MYMESSAGE"; try (RemoteListenerServerLifecycle server = new RemoteListenerServerLifecycle()) { Assert.assertFalse(server.isOpen()); server.openAndStart(msg -> Assert.assertEquals(message, msg), port); Assert.assertTrue(server.isOpen()); Assert.assertTrue(RemoteListenerClient.sendToActiveJabRefInstance(new String[]{message}, port)); server.stop(); Assert.assertFalse(server.isOpen()); } } @Test public void testGoodCaseWithAllLifecycleMethods() { final int port = 34567; final String message = "MYMESSAGE"; try (RemoteListenerServerLifecycle server = new RemoteListenerServerLifecycle()) { Assert.assertFalse(server.isOpen()); Assert.assertTrue(server.isNotStartedBefore()); server.stop(); Assert.assertFalse(server.isOpen()); Assert.assertTrue(server.isNotStartedBefore()); server.open(msg -> Assert.assertEquals(message, msg), port); Assert.assertTrue(server.isOpen()); Assert.assertTrue(server.isNotStartedBefore()); server.start(); Assert.assertTrue(server.isOpen()); Assert.assertFalse(server.isNotStartedBefore()); Assert.assertTrue(RemoteListenerClient.sendToActiveJabRefInstance(new String[]{message}, port)); server.stop(); Assert.assertFalse(server.isOpen()); Assert.assertTrue(server.isNotStartedBefore()); } } @Test public void testPortAlreadyInUse() throws IOException { final int port = 34567; try (ServerSocket socket = new ServerSocket(port)) { Assert.assertTrue(socket.isBound()); try (RemoteListenerServerLifecycle server = new RemoteListenerServerLifecycle()) { Assert.assertFalse(server.isOpen()); server.openAndStart(msg -> Assert.fail("should not happen"), port); Assert.assertFalse(server.isOpen()); } catch (Exception e) { Assert.fail("Exception: " + e.getMessage()); } } } @Test public void testClientTimeout() { final int port = 34567; final String message = "MYMESSAGE"; Assert.assertFalse(RemoteListenerClient.sendToActiveJabRefInstance(new String[]{message}, port)); } @Test public void testClientConnectingToWrongServer() throws IOException, InterruptedException { final int port = 34567; final String message = "MYMESSAGE"; try (ServerSocket socket = new ServerSocket(port)) { new Thread() { @Override public void run() { try (Socket socket2 = socket.accept(); OutputStream os = socket2.getOutputStream()) { os.write("whatever".getBytes("UTF8")); } catch (IOException e) { // Ignored } } }.start(); Thread.sleep(100); Assert.assertFalse(RemoteListenerClient.sendToActiveJabRefInstance(new String[]{message}, port)); } } }