mirror of https://github.com/rusefi/rusefi-1.git
time for more tests
This commit is contained in:
parent
240b647595
commit
8ce0974b27
|
@ -4,6 +4,7 @@ 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;
|
||||
import com.rusefi.binaryprotocol.*;
|
||||
import com.rusefi.config.generated.Fields;
|
||||
|
@ -16,6 +17,8 @@ import java.io.*;
|
|||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Function;
|
||||
|
@ -52,6 +55,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
}
|
||||
};
|
||||
|
||||
private static ConcurrentHashMap<String, ThreadFactory> THREAD_FACTORIES_BY_NAME = new ConcurrentHashMap<>();
|
||||
|
||||
public void start(LinkManager linkManager) {
|
||||
start(linkManager, DEFAULT_PROXY_PORT, Listener.empty());
|
||||
}
|
||||
|
@ -84,6 +89,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
}
|
||||
|
||||
public static ServerSocketReference tcpServerSocket(Function<Socket, Runnable> clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function<Integer, ServerSocket> nonSecureSocketFunction) {
|
||||
ThreadFactory threadFactory = THREAD_FACTORIES_BY_NAME.computeIfAbsent(threadName, NamedThreadFactory::new);
|
||||
|
||||
Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback");
|
||||
ServerSocket serverSocket = nonSecureSocketFunction.apply(port);
|
||||
|
||||
|
@ -101,10 +108,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
|||
continue;
|
||||
}
|
||||
log.info("Binary protocol proxy port connection");
|
||||
new Thread(clientSocketRunnableFactory.apply(clientSocket), "proxy connection").start();
|
||||
threadFactory.newThread(clientSocketRunnableFactory.apply(clientSocket)).start();
|
||||
}
|
||||
};
|
||||
new Thread(runnable, threadName).start();
|
||||
threadFactory.newThread(runnable).start();
|
||||
return holder;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,7 +61,8 @@ public class LocalApplicationProxy implements Closeable {
|
|||
new HelloCommand(applicationRequest.toJson()).handle(authenticatorToProxyStream);
|
||||
}
|
||||
|
||||
public static void start(String[] strings) {
|
||||
public static void start() {
|
||||
throw new UnsupportedOperationException("TODO");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.rusefi.io.LinkManager;
|
|||
import com.rusefi.io.tcp.BinaryProtocolServer;
|
||||
import com.rusefi.io.tcp.TcpIoStream;
|
||||
import com.rusefi.server.ControllerInfo;
|
||||
import com.rusefi.server.SessionDetails;
|
||||
import com.rusefi.server.rusEFISSLContext;
|
||||
import com.rusefi.tune.xml.Constant;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -29,6 +30,7 @@ public class TestHelper {
|
|||
public static final String TEST_SIGNATURE_1 = "rusEFI 2020.07.06.frankenso_na6.2468827536";
|
||||
public static final String TEST_SIGNATURE_2 = "rusEFI 2020.07.11.proteus_f4.1986715563";
|
||||
public static final ControllerInfo CONTROLLER_INFO = new ControllerInfo("name", "make", "code", Fields.TS_SIGNATURE);
|
||||
public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012";
|
||||
|
||||
@NotNull
|
||||
public static ScalarIniField createIniField(Field field) {
|
||||
|
@ -84,4 +86,10 @@ public class TestHelper {
|
|||
assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
return server;
|
||||
}
|
||||
|
||||
public static SessionDetails createTestSession(String authToken, String signature) {
|
||||
ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature);
|
||||
|
||||
return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
package com.rusefi.proxy.client;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class LocalApplicationProxyTest {
|
||||
@Test
|
||||
public void testLocalApplication() {
|
||||
|
||||
}
|
||||
}
|
|
@ -61,7 +61,7 @@ public class ConsoleTools {
|
|||
registerTool("compile_fsio_file", ConsoleTools::runCompileTool, "Convert all lines from a file to RPN form.");
|
||||
|
||||
registerTool("network_connector", strings -> NetworkConnectorStartup.start(), "Connect your rusEFI ECU to rusEFI Online");
|
||||
registerTool("network_authenticator", LocalApplicationProxy::start, "rusEFI Online Authenticator");
|
||||
registerTool("network_authenticator", strings -> LocalApplicationProxy.start(), "rusEFI Online Authenticator");
|
||||
|
||||
registerTool("print_auth_token", args -> printAuthToken(), "Print current rusEFI Online authentication token.");
|
||||
registerTool(SET_AUTH_TOKEN, ConsoleTools::setAuthToken, "Set rusEFI authentication token.");
|
||||
|
|
|
@ -1,7 +1,14 @@
|
|||
package com.rusefi;
|
||||
|
||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||
import com.rusefi.server.Backend;
|
||||
import com.rusefi.server.UserDetails;
|
||||
import com.rusefi.server.UserDetailsResolver;
|
||||
import com.rusefi.server.rusEFISSLContext;
|
||||
import com.rusefi.tools.online.HttpUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
@ -20,4 +27,16 @@ public class BackendTestHelper {
|
|||
backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown());
|
||||
assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static UserDetailsResolver createTestUserResolver() {
|
||||
return authToken -> new UserDetails(authToken.substring(0, 5), authToken.charAt(6));
|
||||
}
|
||||
|
||||
public static void commonServerTest() throws MalformedURLException {
|
||||
HttpUtil.RUSEFI_PROXY_HOSTNAME = TestHelper.LOCALHOST;
|
||||
BinaryProtocol.DISABLE_LOCAL_CACHE = true;
|
||||
|
||||
rusEFISSLContext.init("certificate/test_pkcs12.jks", "password");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,9 +30,8 @@ import static org.junit.Assert.assertTrue;
|
|||
|
||||
public class FullServerTest {
|
||||
@Before
|
||||
public void setTestCertificate() throws MalformedURLException {
|
||||
ServerTest.commonServerTest();
|
||||
BinaryProtocol.DISABLE_LOCAL_CACHE = true;
|
||||
public void setup() throws MalformedURLException {
|
||||
BackendTestHelper.commonServerTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -92,13 +91,13 @@ public class FullServerTest {
|
|||
|
||||
|
||||
// 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(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers);
|
||||
NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers);
|
||||
ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo();
|
||||
|
||||
assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));
|
||||
|
||||
SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, MockRusEfiDevice.TEST_TOKEN_3, networkConnectorResult.getOneTimeToken());
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(MockRusEfiDevice.TEST_TOKEN_1));
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(TestHelper.TEST_TOKEN_1));
|
||||
|
||||
// start authenticator
|
||||
LocalApplicationProxy.startAndRun(localApplicationProxyContext, applicationRequest, httpPort,
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
package com.rusefi;
|
||||
|
||||
import com.opensr5.Logger;
|
||||
import com.rusefi.config.generated.Fields;
|
||||
import com.rusefi.io.tcp.BinaryProtocolServer;
|
||||
import com.rusefi.io.tcp.TcpIoStream;
|
||||
import com.rusefi.proxy.BaseBroadcastingThread;
|
||||
import com.rusefi.server.ControllerInfo;
|
||||
import com.rusefi.server.SessionDetails;
|
||||
import com.rusefi.server.rusEFISSLContext;
|
||||
|
||||
|
@ -15,20 +13,11 @@ import java.net.Socket;
|
|||
import static com.rusefi.TestHelper.LOCALHOST;
|
||||
|
||||
public class MockRusEfiDevice {
|
||||
public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012";
|
||||
public static final String TEST_TOKEN_3 = "33333333-3333-1234-1234-123456789012";
|
||||
private SessionDetails sessionDetails;
|
||||
private final Logger logger;
|
||||
private final SessionDetails sessionDetails;
|
||||
|
||||
public MockRusEfiDevice(String authToken, String signature, Logger logger) {
|
||||
sessionDetails = createTestSession(authToken, signature);
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public static SessionDetails createTestSession(String authToken, String signature) {
|
||||
ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature);
|
||||
|
||||
return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode());
|
||||
public MockRusEfiDevice(String authToken, String signature) {
|
||||
sessionDetails = TestHelper.createTestSession(authToken, signature);
|
||||
}
|
||||
|
||||
public void connect(int serverPort) throws IOException {
|
||||
|
|
|
@ -9,7 +9,6 @@ import com.rusefi.server.*;
|
|||
import com.rusefi.tools.online.HttpUtil;
|
||||
import com.rusefi.tools.online.ProxyClient;
|
||||
import com.rusefi.tools.online.PublicSession;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -32,14 +31,8 @@ public class ServerTest {
|
|||
private final static Logger logger = Logger.CONSOLE;
|
||||
|
||||
@Before
|
||||
public void setTestCertificate() throws MalformedURLException {
|
||||
commonServerTest();
|
||||
}
|
||||
|
||||
static void commonServerTest() throws MalformedURLException {
|
||||
HttpUtil.RUSEFI_PROXY_HOSTNAME = TestHelper.LOCALHOST;
|
||||
|
||||
rusEFISSLContext.init("certificate/test_pkcs12.jks", "password");
|
||||
public void setup() throws MalformedURLException {
|
||||
BackendTestHelper.commonServerTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -54,7 +47,7 @@ public class ServerTest {
|
|||
CountDownLatch allConnected = new CountDownLatch(1);
|
||||
|
||||
|
||||
try (Backend backend = new Backend(createTestUserResolver(), httpPort) {
|
||||
try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) {
|
||||
@Override
|
||||
public void register(ControllerConnectionState clientConnectionState) {
|
||||
super.register(clientConnectionState);
|
||||
|
@ -80,8 +73,8 @@ public class ServerTest {
|
|||
assertEquals(0, backend.getControllersCount());
|
||||
|
||||
|
||||
new MockRusEfiDevice(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1, logger).connect(serverPortForControllers);
|
||||
new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2, logger).connect(serverPortForControllers);
|
||||
new MockRusEfiDevice(TestHelper.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1).connect(serverPortForControllers);
|
||||
new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2).connect(serverPortForControllers);
|
||||
|
||||
assertTrue("onConnected", onConnected.await(30, TimeUnit.SECONDS));
|
||||
|
||||
|
@ -144,7 +137,7 @@ covered by FullServerTest
|
|||
int httpPort = 8001;
|
||||
int serverPortForRemoteUsers = 6801;
|
||||
CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1);
|
||||
try (Backend backend = new Backend(createTestUserResolver(), httpPort) {
|
||||
try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) {
|
||||
@Override
|
||||
protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) {
|
||||
super.onDisconnectApplication(applicationConnectionState);
|
||||
|
@ -162,11 +155,6 @@ covered by FullServerTest
|
|||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static UserDetailsResolver createTestUserResolver() {
|
||||
return authToken -> new UserDetails(authToken.substring(0, 5), authToken.charAt(6));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAuthenticatorRequestUnknownSession() throws InterruptedException, IOException {
|
||||
int serverPortForRemoteUsers = 6800;
|
||||
|
@ -175,7 +163,7 @@ covered by FullServerTest
|
|||
|
||||
CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1);
|
||||
|
||||
try (Backend backend = new Backend(createTestUserResolver(), httpPort) {
|
||||
try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) {
|
||||
@Override
|
||||
protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) {
|
||||
super.onDisconnectApplication(applicationConnectionState);
|
||||
|
@ -185,8 +173,8 @@ covered by FullServerTest
|
|||
|
||||
BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers);
|
||||
|
||||
SessionDetails sessionDetails = MockRusEfiDevice.createTestSession(MockRusEfiDevice.TEST_TOKEN_1, Fields.TS_SIGNATURE);
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(MockRusEfiDevice.TEST_TOKEN_1));
|
||||
SessionDetails sessionDetails = TestHelper.createTestSession(TestHelper.TEST_TOKEN_1, Fields.TS_SIGNATURE);
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, BackendTestHelper.createTestUserResolver().apply(TestHelper.TEST_TOKEN_1));
|
||||
|
||||
// start authenticator
|
||||
IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger);
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
package com.rusefi.proxy.client;
|
||||
|
||||
import com.rusefi.BackendTestHelper;
|
||||
import com.rusefi.TestHelper;
|
||||
import com.rusefi.config.generated.Fields;
|
||||
import com.rusefi.io.tcp.BinaryProtocolServer;
|
||||
import com.rusefi.io.tcp.ServerSocketReference;
|
||||
import com.rusefi.io.tcp.TcpIoStream;
|
||||
import com.rusefi.server.ApplicationRequest;
|
||||
import com.rusefi.server.SessionDetails;
|
||||
import com.rusefi.tools.online.ProxyClient;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.Socket;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static com.rusefi.BackendTestHelper.createTestUserResolver;
|
||||
import static com.rusefi.TestHelper.TEST_TOKEN_1;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class LocalApplicationProxyTest {
|
||||
@Before
|
||||
public void setup() throws MalformedURLException {
|
||||
BackendTestHelper.commonServerTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocalApplication() throws IOException, InterruptedException {
|
||||
LocalApplicationProxyContext context = new LocalApplicationProxyContext() {
|
||||
@Override
|
||||
public String executeGet(String url) {
|
||||
if (url.endsWith(ProxyClient.VERSION_PATH))
|
||||
return ProxyClient.BACKEND_VERSION;
|
||||
throw new UnsupportedOperationException(url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int serverPortForRemoteApplications() {
|
||||
return 5999;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int authenticatorPort() {
|
||||
return 5998;
|
||||
}
|
||||
};
|
||||
|
||||
CountDownLatch backendCreated = new CountDownLatch(1);
|
||||
ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", new Function<Socket, Runnable>() {
|
||||
@Override
|
||||
public Runnable apply(Socket socket) {
|
||||
return new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
}, parameter -> backendCreated.countDown());
|
||||
assertTrue(backendCreated.await(30, TimeUnit.SECONDS));
|
||||
|
||||
|
||||
SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE);
|
||||
ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1));
|
||||
|
||||
|
||||
LocalApplicationProxy.startAndRun(context, applicationRequest, -1, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID);
|
||||
|
||||
|
||||
mockBackend.close();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue