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.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<Integer, ServerSocket> 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);

View File

@ -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) {

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.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));

View File

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