time for more tests
This commit is contained in:
parent
dfd646cbf5
commit
0f3f081c01
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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));
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue