so suddenly ServerTest is less reliable?
This commit is contained in:
parent
9afe527a9a
commit
3b5b8714dc
|
@ -0,0 +1,115 @@
|
|||
package com.rusefi;
|
||||
|
||||
import com.opensr5.ConfigurationImage;
|
||||
import com.opensr5.Logger;
|
||||
import com.opensr5.ini.field.ScalarIniField;
|
||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||
import com.rusefi.config.generated.Fields;
|
||||
import com.rusefi.io.ConnectionStateListener;
|
||||
import com.rusefi.io.LinkManager;
|
||||
import com.rusefi.proxy.NetworkConnector;
|
||||
import com.rusefi.server.*;
|
||||
import com.rusefi.tools.online.ProxyClient;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.rusefi.TestHelper.createIniField;
|
||||
import static com.rusefi.TestHelper.prepareImage;
|
||||
import static com.rusefi.Timeouts.READ_IMAGE_TIMEOUT;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class FullServerTest {
|
||||
private final static Logger logger = Logger.CONSOLE;
|
||||
|
||||
@Before
|
||||
public void setTestCertificate() throws MalformedURLException {
|
||||
ServerTest.commonServerTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRelayWorkflow() throws InterruptedException, IOException {
|
||||
ScalarIniField iniField = TestHelper.createIniField(Fields.CYLINDERSCOUNT);
|
||||
int value = 241;
|
||||
int userId = 7;
|
||||
|
||||
CountDownLatch controllerRegistered = new CountDownLatch(1);
|
||||
|
||||
UserDetailsResolver userDetailsResolver = authToken -> new UserDetails(authToken.substring(0, 5), userId);
|
||||
int httpPort = 8003;
|
||||
try (Backend backend = new Backend(userDetailsResolver, httpPort, logger) {
|
||||
@Override
|
||||
protected void onRegister(ControllerConnectionState controllerConnectionState) {
|
||||
super.onRegister(controllerConnectionState);
|
||||
controllerRegistered.countDown();
|
||||
}
|
||||
}; LinkManager clientManager = new LinkManager(logger)) {
|
||||
int serverPortForControllers = 7001;
|
||||
int serverPortForRemoteUsers = 7003;
|
||||
|
||||
|
||||
// first start backend server
|
||||
CountDownLatch controllerServerCreated = new CountDownLatch(1);
|
||||
CountDownLatch applicationServerCreated = new CountDownLatch(1);
|
||||
|
||||
backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown());
|
||||
|
||||
backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown());
|
||||
|
||||
assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
assertTrue(applicationServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
|
||||
// create virtual controller to which "rusEFI network connector" connects to
|
||||
int controllerPort = 7002;
|
||||
ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT));
|
||||
CountDownLatch controllerCreated = new CountDownLatch(1);
|
||||
TestHelper.createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), logger);
|
||||
assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
|
||||
// start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network
|
||||
SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, ProxyClient.LOCALHOST + ":" + controllerPort, serverPortForControllers);
|
||||
|
||||
assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
SessionDetails authenticatorSessionDetails = new SessionDetails(deviceSessionDetails.getControllerInfo(), MockRusEfiDevice.TEST_TOKEN_3, deviceSessionDetails.getOneTimeToken());
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userId);
|
||||
|
||||
// start authenticator
|
||||
|
||||
int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio
|
||||
LocalApplicationProxy.startAndRun(logger, serverPortForRemoteUsers, applicationRequest, authenticatorPort);
|
||||
|
||||
|
||||
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
||||
|
||||
// connect to proxy and read virtual controller through it
|
||||
clientManager.startAndConnect(ProxyClient.LOCALHOST + ":" + authenticatorPort, new ConnectionStateListener() {
|
||||
@Override
|
||||
public void onConnectionEstablished() {
|
||||
connectionEstablishedCountDownLatch.countDown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionFailed() {
|
||||
System.out.println("Failed");
|
||||
}
|
||||
});
|
||||
assertTrue("Proxied ECU Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS));
|
||||
|
||||
BinaryProtocol clientStreamState = clientManager.getCurrentStreamState();
|
||||
Objects.requireNonNull(clientStreamState, "clientStreamState");
|
||||
ConfigurationImage clientImage = clientStreamState.getControllerConfiguration();
|
||||
String clientValue = iniField.getValue(clientImage);
|
||||
assertEquals(Double.toString(value), clientValue);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,15 +1,9 @@
|
|||
package com.rusefi;
|
||||
|
||||
import com.opensr5.ConfigurationImage;
|
||||
import com.opensr5.Logger;
|
||||
import com.opensr5.ini.field.ScalarIniField;
|
||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||
import com.rusefi.config.generated.Fields;
|
||||
import com.rusefi.io.ConnectionStateListener;
|
||||
import com.rusefi.io.IoStream;
|
||||
import com.rusefi.io.LinkManager;
|
||||
import com.rusefi.io.commands.HelloCommand;
|
||||
import com.rusefi.proxy.NetworkConnector;
|
||||
import com.rusefi.server.*;
|
||||
import com.rusefi.tools.online.HttpUtil;
|
||||
import com.rusefi.tools.online.ProxyClient;
|
||||
|
@ -19,12 +13,9 @@ import org.junit.Test;
|
|||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.rusefi.TestHelper.createIniField;
|
||||
import static com.rusefi.TestHelper.prepareImage;
|
||||
import static com.rusefi.Timeouts.READ_IMAGE_TIMEOUT;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
@ -40,6 +31,10 @@ public class ServerTest {
|
|||
|
||||
@Before
|
||||
public void setTestCertificate() throws MalformedURLException {
|
||||
commonServerTest();
|
||||
}
|
||||
|
||||
static void commonServerTest() throws MalformedURLException {
|
||||
HttpUtil.RUSEFI_PROXY_HOSTNAME = ProxyClient.LOCALHOST;
|
||||
|
||||
rusEFISSLContext.init("certificate/test_pkcs12.jks", "password");
|
||||
|
@ -148,83 +143,4 @@ public class ServerTest {
|
|||
assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRelayWorkflow() throws InterruptedException, IOException {
|
||||
ScalarIniField iniField = TestHelper.createIniField(Fields.CYLINDERSCOUNT);
|
||||
int value = 241;
|
||||
int userId = 7;
|
||||
|
||||
CountDownLatch controllerRegistered = new CountDownLatch(1);
|
||||
|
||||
UserDetailsResolver userDetailsResolver = authToken -> new UserDetails(authToken.substring(0, 5), userId);
|
||||
int httpPort = 8003;
|
||||
try (Backend backend = new Backend(userDetailsResolver, httpPort, logger) {
|
||||
@Override
|
||||
protected void onRegister(ControllerConnectionState controllerConnectionState) {
|
||||
super.onRegister(controllerConnectionState);
|
||||
controllerRegistered.countDown();
|
||||
}
|
||||
}; LinkManager clientManager = new LinkManager(logger)) {
|
||||
int serverPortForControllers = 7001;
|
||||
int serverPortForRemoteUsers = 7003;
|
||||
|
||||
|
||||
// first start backend server
|
||||
CountDownLatch controllerServerCreated = new CountDownLatch(1);
|
||||
CountDownLatch applicationServerCreated = new CountDownLatch(1);
|
||||
|
||||
backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown());
|
||||
|
||||
backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown());
|
||||
|
||||
assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
assertTrue(applicationServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
|
||||
// create virtual controller to which "rusEFI network connector" connects to
|
||||
int controllerPort = 7002;
|
||||
ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT));
|
||||
CountDownLatch controllerCreated = new CountDownLatch(1);
|
||||
TestHelper.createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), logger);
|
||||
assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
|
||||
// start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network
|
||||
SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, ProxyClient.LOCALHOST + ":" + controllerPort, serverPortForControllers);
|
||||
|
||||
assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
SessionDetails authenticatorSessionDetails = new SessionDetails(deviceSessionDetails.getControllerInfo(), MockRusEfiDevice.TEST_TOKEN_3, deviceSessionDetails.getOneTimeToken());
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userId);
|
||||
|
||||
// start authenticator
|
||||
|
||||
int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio
|
||||
LocalApplicationProxy.startAndRun(logger, serverPortForRemoteUsers, applicationRequest, authenticatorPort);
|
||||
|
||||
|
||||
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
||||
|
||||
// connect to proxy and read virtual controller through it
|
||||
clientManager.startAndConnect(ProxyClient.LOCALHOST + ":" + authenticatorPort, new ConnectionStateListener() {
|
||||
@Override
|
||||
public void onConnectionEstablished() {
|
||||
connectionEstablishedCountDownLatch.countDown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionFailed() {
|
||||
System.out.println("Failed");
|
||||
}
|
||||
});
|
||||
assertTrue("Proxied ECU Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS));
|
||||
|
||||
BinaryProtocol clientStreamState = clientManager.getCurrentStreamState();
|
||||
Objects.requireNonNull(clientStreamState, "clientStreamState");
|
||||
ConfigurationImage clientImage = clientStreamState.getControllerConfiguration();
|
||||
String clientValue = iniField.getValue(clientImage);
|
||||
assertEquals(Double.toString(value), clientValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue