From 0f3f081c01d9de193ef930f78276fc34307037de Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 13:13:17 -0400 Subject: [PATCH] time for more tests --- .../rusefi/io/tcp/BinaryProtocolServer.java | 3 +- .../com/rusefi/proxy/NetworkConnector.java | 9 +++-- .../rusefi/proxy/NetworkConnectorContext.java | 13 +++++++ .../test/java/com/rusefi/FullServerTest.java | 9 ++++- .../rusefi/proxy/NetworkConnectorTest.java | 34 ++++++++++++++++++- 5 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 6363c2023d..1e459db757 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -2,7 +2,6 @@ package com.rusefi.io.tcp; import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; -import com.opensr5.Logger; import com.rusefi.Listener; import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; @@ -48,7 +47,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { public static final Function PLAIN_SOCKET_FACTORY = port -> { try { ServerSocket serverSocket = new ServerSocket(port); - Logger.CONSOLE.info("ServerSocket " + port + " created"); + log.info("ServerSocket " + port + " created"); return serverSocket; } catch (IOException e) { throw new IllegalStateException("Error binding server socket " + port, e); diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index 5dbdce6bc3..2ccdbf019f 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -30,9 +30,8 @@ import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; */ public class NetworkConnector { private final static Logging log = Logging.getLogging(NetworkConnector.class); - public static final int RECONNECT_DELAY = 15; - public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers) { + public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -73,9 +72,9 @@ public class NetworkConnector { proxyReconnectSemaphore.acquire(); try { - runNetworkConnector(serverPortForControllers, controllerConnector, authToken, () -> { - log.error("Disconnect from proxy server detected, now sleeping " + RECONNECT_DELAY + " seconds"); - sleep(RECONNECT_DELAY * Timeouts.SECOND); + runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, () -> { + log.error("Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); + sleep(context.reconnectDelay() * Timeouts.SECOND); proxyReconnectSemaphore.release(); }, oneTimeToken, controllerInfo); } catch (IOException e) { diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java new file mode 100644 index 0000000000..b200296095 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java @@ -0,0 +1,13 @@ +package com.rusefi.proxy; + +import com.rusefi.tools.online.ProxyClient; + +public class NetworkConnectorContext { + public int reconnectDelay() { + return 15; // this one is seconds + } + + public int serverPortForControllers() { + return ProxyClient.SERVER_PORT_FOR_CONTROLLERS; + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 5e7e58f9fd..23c61bf37e 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -8,6 +8,7 @@ import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.proxy.client.LocalApplicationProxyContext; import com.rusefi.server.*; @@ -89,9 +90,15 @@ public class FullServerTest { ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT)); TestHelper.createVirtualController(controllerPort, controllerImage); + NetworkConnectorContext networkConnectorContext = new NetworkConnectorContext() { + @Override + public int serverPortForControllers() { + return serverPortForControllers; + } + }; // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java index 7ea4085a6a..830fb56fa4 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -1,10 +1,42 @@ package com.rusefi.proxy; +import com.opensr5.ConfigurationImage; +import com.rusefi.BackendTestHelper; +import com.rusefi.TestHelper; +import com.rusefi.config.generated.Fields; +import com.rusefi.server.Backend; import org.junit.Test; public class NetworkConnectorTest { @Test - public void testReconnect() { + public void testReconnect() throws InterruptedException { + int serverPortForControllers = 7504; + int httpPort = 7503; + // create virtual controller to which "rusEFI network connector" connects to + int controllerPort = 7502; + ConfigurationImage controllerImage = new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE); + TestHelper.createVirtualController(controllerPort, controllerImage); + + NetworkConnectorContext connectorContext = new NetworkConnectorContext() { + @Override + public int reconnectDelay() { + return 3; + } + + @Override + public int serverPortForControllers() { + return serverPortForControllers; + } + }; + + // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext); + + + Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort); +// BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + + backend.close(); } }