@After public void liberarPuerto() { if (listeningAcceptor != null) { listeningAcceptor.closeAndDispose(); } if (connector != null) { connector.closeAndDispose(); } }
@Test public void deberiaDetectarLaDesconexion() { // El que escucha va a desconectarse al recibir el primer mensaje final QueueReceptionHandler handlerReceptor = QueueReceptionHandler.create(); final ObjectSocketConfiguration receptionConfig = ObjectSocketConfiguration.create( testAddress, new ObjectReceptionHandler() { public void onObjectReceived(final Object received, final ObjectSocket receivedFrom) { handlerReceptor.onObjectReceived(received, receivedFrom); receivedFrom.closeAndDispose(); } }, JsonTextualizer.createWithTypeMetadata()); // Empezamos a escuchar en el puerto listeningAcceptor = ObjectSocketAcceptor.create(receptionConfig); // Conectamos el cliente al puerto compartido final ObjectSocketConfiguration senderConfig = ObjectSocketConfiguration.create(testAddress, JsonTextualizer.createWithTypeMetadata()); final WaitBarrier esperarNotificacionDeCierre = WaitBarrier.create(); final AtomicBoolean notificacionRecibida = new AtomicBoolean(false); senderConfig.setEventHandler( new SocketEventHandler() { public void onSocketOpened(final ObjectSocket nuevoSocket) {} public void onSocketClosed(final ObjectSocket socketCerrado) { notificacionRecibida.set(true); esperarNotificacionDeCierre.release(); } }); connector = ObjectSocketConnector.create(senderConfig); // Enviamos un objeto cualquiera a traves del socket final Object objetoEnviado = "Hola manola"; final ObjectSocket clientSocket = connector.getObjectSocket(); clientSocket.send(objetoEnviado); // Esperamos que llegue la notificacion de socket cerrado esperarNotificacionDeCierre.waitForReleaseUpTo(TimeMagnitude.of(5, TimeUnit.SECONDS)); Assert.assertEquals( "Deberíamos haber recibido la notificacion", true, notificacionRecibida.get()); }