race conditions are cool
This commit is contained in:
parent
126c56278b
commit
045f84b4c7
|
@ -24,7 +24,7 @@ public class BinaryProtocolProxy {
|
|||
};
|
||||
}
|
||||
};
|
||||
BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE);
|
||||
BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null);
|
||||
}
|
||||
|
||||
private static void runProxy(Socket targetEcuSocket, Socket clientSocket) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.rusefi.io.tcp;
|
|||
|
||||
import com.opensr5.ConfigurationImage;
|
||||
import com.opensr5.Logger;
|
||||
import com.rusefi.Listener;
|
||||
import com.rusefi.binaryprotocol.BinaryProtocolCommands;
|
||||
import com.rusefi.binaryprotocol.BinaryProtocolState;
|
||||
import com.rusefi.binaryprotocol.IoHelper;
|
||||
|
@ -38,10 +39,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
}
|
||||
|
||||
public void start(LinkManager linkManager) {
|
||||
start(linkManager, DEFAULT_PROXY_PORT);
|
||||
start(linkManager, DEFAULT_PROXY_PORT, null);
|
||||
}
|
||||
|
||||
public void start(LinkManager linkManager, int port) {
|
||||
public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback) {
|
||||
logger.info("BinaryProtocolServer on " + port);
|
||||
|
||||
Function<Socket, Runnable> clientSocketRunnableFactory = clientSocket -> () -> {
|
||||
|
@ -52,10 +53,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
}
|
||||
};
|
||||
|
||||
tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, logger);
|
||||
tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, logger, serverSocketCreationCallback);
|
||||
}
|
||||
|
||||
public static void tcpServerSocket(int port, String threadName, Function<Socket, Runnable> clientSocketRunnableFactory, final Logger logger) {
|
||||
public static void tcpServerSocket(int port, String threadName, Function<Socket, Runnable> clientSocketRunnableFactory, final Logger logger, Listener serverSocketCreationCallback) {
|
||||
Runnable runnable = new Runnable() {
|
||||
@SuppressWarnings("InfiniteLoopStatement")
|
||||
@Override
|
||||
|
@ -67,6 +68,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
logger.error("Error binding server socket" + e);
|
||||
return;
|
||||
}
|
||||
if (serverSocketCreationCallback!=null)
|
||||
serverSocketCreationCallback.onResult(null);
|
||||
|
||||
try {
|
||||
while (true) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.rusefi.io;
|
|||
import com.opensr5.ConfigurationImage;
|
||||
import com.opensr5.Logger;
|
||||
import com.opensr5.ini.field.ScalarIniField;
|
||||
import com.rusefi.Listener;
|
||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||
import com.rusefi.binaryprotocol.BinaryProtocolState;
|
||||
import com.rusefi.config.Field;
|
||||
|
@ -56,7 +57,7 @@ public class TcpCommunicationIntegrationTest {
|
|||
int value = 239;
|
||||
ConfigurationImage serverImage = prepareImage(value, iniField);
|
||||
int port = 6100;
|
||||
BinaryProtocolServer server = createVirtualController(serverImage, port);
|
||||
BinaryProtocolServer server = createVirtualController(serverImage, port, null);
|
||||
|
||||
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
||||
|
||||
|
@ -88,13 +89,27 @@ public class TcpCommunicationIntegrationTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testProxy() throws InterruptedException, IOException {
|
||||
public void testProxy() throws InterruptedException {
|
||||
ConfigurationImage serverImage = prepareImage(239, createIniField(Fields.CYLINDERSCOUNT));
|
||||
int controllerPort = 6102;
|
||||
BinaryProtocolServer server = createVirtualController(serverImage, controllerPort);
|
||||
|
||||
CountDownLatch serverCreated = new CountDownLatch(1);
|
||||
BinaryProtocolServer server = createVirtualController(serverImage, controllerPort, new Listener() {
|
||||
@Override
|
||||
public void onResult(Object parameter) {
|
||||
serverCreated.countDown();
|
||||
}
|
||||
});
|
||||
assertTrue(serverCreated.await(30, TimeUnit.SECONDS));
|
||||
int proxyPort = 6103;
|
||||
|
||||
BinaryProtocolProxy.createProxy(new Socket("localhost", controllerPort), proxyPort);
|
||||
Socket targetEcuSocket;
|
||||
try {
|
||||
targetEcuSocket = new Socket(LOCALHOST, controllerPort);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort);
|
||||
}
|
||||
BinaryProtocolProxy.createProxy(targetEcuSocket, proxyPort);
|
||||
|
||||
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
||||
|
||||
|
@ -121,7 +136,7 @@ public class TcpCommunicationIntegrationTest {
|
|||
}
|
||||
|
||||
@NotNull
|
||||
private BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port) {
|
||||
private BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback) {
|
||||
BinaryProtocolState state = new BinaryProtocolState();
|
||||
state.setController(ci);
|
||||
state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]);
|
||||
|
@ -129,7 +144,7 @@ public class TcpCommunicationIntegrationTest {
|
|||
LinkManager linkManager = new LinkManager(LOGGER);
|
||||
linkManager.setConnector(LinkConnector.getDetachedConnector(state));
|
||||
BinaryProtocolServer server = new BinaryProtocolServer(LOGGER);
|
||||
server.start(linkManager, port);
|
||||
server.start(linkManager, port, serverSocketCreationCallback);
|
||||
return server;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue