diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index 7b803dcf..1a635ee5 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -309,7 +309,7 @@ public static void main(String... args) throws Throwable { long startTime = System.currentTimeMillis(); try { @SuppressWarnings("resource") - LaunchServer launchserver = new LaunchServer(IOHelper.WORKING_DIR, args); + LaunchServer launchserver = new LaunchServer(IOHelper.WORKING_DIR, false, args); if (args.length == 0) launchserver.run(); else { //Обработка команды launchserver.commandHandler.eval(args, false); @@ -326,6 +326,8 @@ public static void main(String... args) throws Throwable { public final Path dir; + public final boolean testEnv; + public final Path launcherLibraries; public final Path launcherLibrariesCompile; @@ -355,7 +357,7 @@ public static void main(String... args) throws Throwable { public final JARLauncherBinary launcherBinary; - public Class launcherEXEBinaryClass; + public Class launcherEXEBinaryClass; public final LauncherBinary launcherEXEBinary; // HWID ban + anti-brutforce @@ -400,8 +402,11 @@ public static void main(String... args) throws Throwable { public static Gson gson; public static GsonBuilder gsonBuilder; - public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecException { + public static Class defaultLauncherEXEBinaryClass = null; + + public LaunchServer(Path dir, boolean testEnv, String[] args) throws IOException, InvalidKeySpecException { this.dir = dir; + this.testEnv = testEnv; taskPool = new Timer("Timered task worker thread", true); launcherLibraries = dir.resolve("launcher-libraries"); launcherLibrariesCompile = dir.resolve("launcher-libraries-compile"); @@ -425,16 +430,19 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE // Set command handler CommandHandler localCommandHandler; - try { - Class.forName("jline.Terminal"); + if (testEnv) + localCommandHandler = new StdCommandHandler(false); + else + try { + Class.forName("jline.Terminal"); - // JLine2 available - localCommandHandler = new JLineCommandHandler(); - LogHelper.info("JLine2 terminal enabled"); - } catch (ClassNotFoundException ignored) { - localCommandHandler = new StdCommandHandler(true); - LogHelper.warning("JLine2 isn't in classpath, using std"); - } + // JLine2 available + localCommandHandler = new JLineCommandHandler(); + LogHelper.info("JLine2 terminal enabled"); + } catch (ClassNotFoundException ignored) { + localCommandHandler = new StdCommandHandler(true); + LogHelper.warning("JLine2 isn't in classpath, using std"); + } ru.gravit.launchserver.command.handler.CommandHandler.registerCommands(localCommandHandler); commandHandler = localCommandHandler; @@ -463,7 +471,7 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE LogHelper.subInfo("Modulus CRC32: 0x%08x", crc.getValue()); // Load class bindings. - launcherEXEBinaryClass = null; + launcherEXEBinaryClass = defaultLauncherEXEBinaryClass; // pre init modules modulesManager = new ModulesManager(this); @@ -472,7 +480,7 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE initGson(); // Read LaunchServer config - generateConfigIfNotExists(); + generateConfigIfNotExists(testEnv); LogHelper.info("Reading LaunchServer config file"); try (BufferedReader reader = IOHelper.newReader(configFile)) { config = Launcher.gson.fromJson(reader, Config.class); @@ -628,7 +636,7 @@ public void close() { LogHelper.info("LaunchServer stopped"); } - private void generateConfigIfNotExists() throws IOException { + private void generateConfigIfNotExists(boolean testEnv) throws IOException { if (IOHelper.isFile(configFile)) return; @@ -688,10 +696,15 @@ private void generateConfigIfNotExists() throws IOException { newConfig.components.put("authLimiter", authLimiterComponent); // Set server address - System.out.println("LaunchServer address: "); - newConfig.setLegacyAddress(commandHandler.readLine()); - System.out.println("LaunchServer projectName: "); - newConfig.setProjectName(commandHandler.readLine()); + if (testEnv) { + newConfig.setLegacyAddress("localhost"); + newConfig.setProjectName("test"); + } else { + System.out.println("LaunchServer address: "); + newConfig.setLegacyAddress(commandHandler.readLine()); + System.out.println("LaunchServer projectName: "); + newConfig.setProjectName(commandHandler.readLine()); + } // Write LaunchServer config LogHelper.info("Writing LaunchServer config file"); @@ -734,8 +747,10 @@ public void run() { throw new IllegalStateException("LaunchServer has been already started"); // Add shutdown hook, then start LaunchServer - JVMHelper.RUNTIME.addShutdownHook(CommonHelper.newThread(null, false, this::close)); - CommonHelper.newThread("Command Thread", true, commandHandler).start(); + if (!this.testEnv) { + JVMHelper.RUNTIME.addShutdownHook(CommonHelper.newThread(null, false, this::close)); + CommonHelper.newThread("Command Thread", true, commandHandler).start(); + } rebindServerSocket(); if (config.netty != null) rebindNettyServerSocket(); diff --git a/LauncherTest/permissions.json b/LauncherTest/permissions.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/LauncherTest/permissions.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/LauncherTest/src/main/java/Empty.java b/LauncherTest/src/main/java/Empty.java deleted file mode 100644 index e69de29b..00000000 diff --git a/LauncherTest/src/main/java/ru/gravit/launcher/test/utils/EXENonWarningLauncherBinary.java b/LauncherTest/src/main/java/ru/gravit/launcher/test/utils/EXENonWarningLauncherBinary.java new file mode 100644 index 00000000..3d8b409c --- /dev/null +++ b/LauncherTest/src/main/java/ru/gravit/launcher/test/utils/EXENonWarningLauncherBinary.java @@ -0,0 +1,23 @@ +package ru.gravit.launcher.test.utils; + +import ru.gravit.launchserver.LaunchServer; +import ru.gravit.launchserver.binary.LauncherBinary; +import ru.gravit.utils.helper.IOHelper; + +import java.io.IOException; +import java.nio.file.Files; + +public class EXENonWarningLauncherBinary extends LauncherBinary { + + public EXENonWarningLauncherBinary(LaunchServer server) { + super(server, server.dir.resolve(server.config.binaryName + ".exe")); + } + + @Override + public void build() throws IOException { + if (IOHelper.isFile(syncBinaryFile)) { + Files.delete(syncBinaryFile); + } + } + +} diff --git a/LauncherTest/src/test/java/Empty.java b/LauncherTest/src/test/java/Empty.java deleted file mode 100644 index e69de29b..00000000 diff --git a/LauncherTest/src/test/java/ru/gravit/launcher/StartTest.java b/LauncherTest/src/test/java/ru/gravit/launcher/StartTest.java new file mode 100644 index 00000000..8b546a8c --- /dev/null +++ b/LauncherTest/src/test/java/ru/gravit/launcher/StartTest.java @@ -0,0 +1,36 @@ +package ru.gravit.launcher; + +import java.io.IOException; +import java.nio.file.Path; +import java.security.spec.InvalidKeySpecException; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import ru.gravit.launcher.test.utils.EXENonWarningLauncherBinary; +import ru.gravit.launchserver.LaunchServer; +import ru.gravit.utils.helper.LogHelper; + +public class StartTest { + @TempDir + public Path dir; + + @BeforeAll + public static void prepare() { + LogHelper.removeStdOutput(); + LaunchServer.defaultLauncherEXEBinaryClass = EXENonWarningLauncherBinary.class; + } + + @Test + public void checkLaunchServerStarts() { + try { + LaunchServer srv = new LaunchServer(dir, true, new String[] { "checkInstall" }); + srv.run(); + srv.commandHandler.eval(new String[] { "checkInstall" }, false); + srv.close(); + } catch (InvalidKeySpecException | IOException e) { + throw new RuntimeException(e); + } + } +}