From bade31ef40e388b80daee01eac48bf86d07c91c6 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 00:35:11 -0400 Subject: [PATCH] time for more tests --- .../rusefi/proxy/client/LocalApplicationProxy.java | 12 +++++++++++- .../proxy/client/LocalApplicationProxyTest.java | 14 +++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index e0c5640158..38ab9bf28a 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -63,7 +63,7 @@ public class LocalApplicationProxy implements Closeable { THREAD_FACTORY.newThread(() -> { long start = System.currentTimeMillis(); try { - while (relayCommandCounter.get() < 4) { + while (relayCommandCounter.get() < 4 && !isTimeForApplicationToConnect(context, start)) { sleep(context.gaugePokingPeriod()); byte[] commandPacket = GetOutputsCommand.createRequest(); @@ -73,6 +73,12 @@ public class LocalApplicationProxy implements Closeable { authenticatorToProxyStream.readPacket(); } } + + if (isTimeForApplicationToConnect(context, start) && relayCommandCounter.get() < 4) { + // we should not keep controller blocker, time to auto-disconnect + authenticatorToProxyStream.close(); + } + } catch (IOException e) { log.error("Gauge poker", e); } @@ -85,6 +91,10 @@ public class LocalApplicationProxy implements Closeable { return serverHolder; } + private static boolean isTimeForApplicationToConnect(LocalApplicationProxyContext context, long start) { + return System.currentTimeMillis() - start > context.startUpIdle(); + } + public static void sendHello(IoStream authenticatorToProxyStream, ApplicationRequest applicationRequest) throws IOException { log.info("Pushing " + applicationRequest); // right from connection push session authentication data diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java index 24ae68f56c..e9b715e4cd 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -54,7 +54,7 @@ public class LocalApplicationProxyTest { ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); CountDownLatch disconnected = new CountDownLatch(1); - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, () -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); assertTrue(disconnected.await(30, TimeUnit.SECONDS)); mockBackend.close(); @@ -73,7 +73,7 @@ public class LocalApplicationProxyTest { HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); - while (gaugePokes.getCount() > 0) { + while (!socket.isClosed()) { BinaryProtocolServer.Packet packet = applicationClientStream.readPacket(); System.out.println("Got packet " + findCommand(packet.getPacket()[0])); @@ -94,14 +94,14 @@ public class LocalApplicationProxyTest { SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); + CountDownLatch disconnected = new CountDownLatch(1); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); // wait for three output requests to take place - assertTrue(gaugePokes.await(30, TimeUnit.SECONDS)); - - - + assertTrue("gaugePokes", gaugePokes.await(30, TimeUnit.SECONDS)); + // but there must be a disconnect after some time + assertTrue("disconnected", disconnected.await(30, TimeUnit.SECONDS)); mockBackend.close(); }