time for more tests

This commit is contained in:
rusefi 2020-07-26 13:13:17 -04:00
parent dfd646cbf5
commit 0f3f081c01
5 changed files with 59 additions and 9 deletions

View File

@ -2,7 +2,6 @@ package com.rusefi.io.tcp;
import com.devexperts.logging.Logging; import com.devexperts.logging.Logging;
import com.opensr5.ConfigurationImage; import com.opensr5.ConfigurationImage;
import com.opensr5.Logger;
import com.rusefi.Listener; import com.rusefi.Listener;
import com.rusefi.NamedThreadFactory; import com.rusefi.NamedThreadFactory;
import com.rusefi.Timeouts; import com.rusefi.Timeouts;
@ -48,7 +47,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
public static final Function<Integer, ServerSocket> PLAIN_SOCKET_FACTORY = port -> { public static final Function<Integer, ServerSocket> PLAIN_SOCKET_FACTORY = port -> {
try { try {
ServerSocket serverSocket = new ServerSocket(port); ServerSocket serverSocket = new ServerSocket(port);
Logger.CONSOLE.info("ServerSocket " + port + " created"); log.info("ServerSocket " + port + " created");
return serverSocket; return serverSocket;
} catch (IOException e) { } catch (IOException e) {
throw new IllegalStateException("Error binding server socket " + port, e); throw new IllegalStateException("Error binding server socket " + port, e);

View File

@ -30,9 +30,8 @@ import static com.rusefi.binaryprotocol.BinaryProtocol.sleep;
*/ */
public class NetworkConnector { public class NetworkConnector {
private final static Logging log = Logging.getLogging(NetworkConnector.class); 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() LinkManager controllerConnector = new LinkManager()
.setCompositeLogicEnabled(false) .setCompositeLogicEnabled(false)
.setNeedPullData(false); .setNeedPullData(false);
@ -73,9 +72,9 @@ public class NetworkConnector {
proxyReconnectSemaphore.acquire(); proxyReconnectSemaphore.acquire();
try { try {
runNetworkConnector(serverPortForControllers, controllerConnector, authToken, () -> { runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, () -> {
log.error("Disconnect from proxy server detected, now sleeping " + RECONNECT_DELAY + " seconds"); log.error("Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds");
sleep(RECONNECT_DELAY * Timeouts.SECOND); sleep(context.reconnectDelay() * Timeouts.SECOND);
proxyReconnectSemaphore.release(); proxyReconnectSemaphore.release();
}, oneTimeToken, controllerInfo); }, oneTimeToken, controllerInfo);
} catch (IOException e) { } catch (IOException e) {

View File

@ -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;
}
}

View File

@ -8,6 +8,7 @@ import com.rusefi.io.ConnectionStateListener;
import com.rusefi.io.LinkManager; import com.rusefi.io.LinkManager;
import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.io.tcp.TcpIoStream;
import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.NetworkConnector;
import com.rusefi.proxy.NetworkConnectorContext;
import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.proxy.client.LocalApplicationProxy;
import com.rusefi.proxy.client.LocalApplicationProxyContext; import com.rusefi.proxy.client.LocalApplicationProxyContext;
import com.rusefi.server.*; import com.rusefi.server.*;
@ -89,9 +90,15 @@ public class FullServerTest {
ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT)); ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT));
TestHelper.createVirtualController(controllerPort, controllerImage); 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 // 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(); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo();
assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));

View File

@ -1,10 +1,42 @@
package com.rusefi.proxy; 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; import org.junit.Test;
public class NetworkConnectorTest { public class NetworkConnectorTest {
@Test @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();
} }
} }