diff --git a/tools/quick-e2e/src/main/java/de/oliver/quicke2e/Main.java b/tools/quick-e2e/src/main/java/de/oliver/quicke2e/Main.java index a7817f3d..9c63a3cf 100644 --- a/tools/quick-e2e/src/main/java/de/oliver/quicke2e/Main.java +++ b/tools/quick-e2e/src/main/java/de/oliver/quicke2e/Main.java @@ -1,8 +1,10 @@ package de.oliver.quicke2e; import de.oliver.quicke2e.config.Configuration; +import de.oliver.quicke2e.config.Context; import de.oliver.quicke2e.eula.EulaService; import de.oliver.quicke2e.paper.PaperDownloadService; +import de.oliver.quicke2e.startScript.StartScriptService; public class Main { @@ -17,6 +19,8 @@ public class Main { "25565" ); + Context context = new Context(config); + PaperDownloadService paper = new PaperDownloadService(); // paper.downloadServerFile(config.type(), config.version(), config.build()); @@ -24,6 +28,9 @@ public class Main { if (config.eula()) { eula.setEulaToTrue(String.format("servers/%s_%s_%s/eula.txt", config.type(), config.version(), config.build())); } + + StartScriptService startScript = new StartScriptService(); + startScript.writeStartScript(context); } } diff --git a/tools/quick-e2e/src/main/java/de/oliver/quicke2e/config/Context.java b/tools/quick-e2e/src/main/java/de/oliver/quicke2e/config/Context.java new file mode 100644 index 00000000..dc3edcc2 --- /dev/null +++ b/tools/quick-e2e/src/main/java/de/oliver/quicke2e/config/Context.java @@ -0,0 +1,57 @@ +package de.oliver.quicke2e.config; + +import java.nio.file.Path; + +public class Context { + + private final Configuration configuration; + private String actualBuildNumber; + private Path serverEnvPath; + private Path serverJarPath; + private Path startScriptPath; + + public Context(Configuration configuration) { + this.configuration = configuration; + this.actualBuildNumber = configuration.build(); + } + + public Configuration configuration() { + return configuration; + } + + public String actualBuildNumber() { + return actualBuildNumber; + } + + public void setActualBuildNumber(String actualBuildNumber) { + this.actualBuildNumber = actualBuildNumber; + } + + public String serverFileName() { + return String.format("%s-%s-%s.jar", configuration.type(), configuration.version(), actualBuildNumber); + } + + public Path serverEnvPath() { + return serverEnvPath; + } + + public void setServerEnvPath(Path serverEnvPath) { + this.serverEnvPath = serverEnvPath; + } + + public Path serverJarPath() { + return serverJarPath; + } + + public void setServerJarPath(Path serverJarPath) { + this.serverJarPath = serverJarPath; + } + + public Path startScriptPath() { + return startScriptPath; + } + + public void setStartScriptPath(Path startScriptPath) { + this.startScriptPath = startScriptPath; + } +} diff --git a/tools/quick-e2e/src/main/java/de/oliver/quicke2e/startScript/StartScriptService.java b/tools/quick-e2e/src/main/java/de/oliver/quicke2e/startScript/StartScriptService.java new file mode 100644 index 00000000..27a0a4ec --- /dev/null +++ b/tools/quick-e2e/src/main/java/de/oliver/quicke2e/startScript/StartScriptService.java @@ -0,0 +1,59 @@ +package de.oliver.quicke2e.startScript; + +import de.oliver.quicke2e.config.Context; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.stream.Collectors; + +public class StartScriptService { + + private String startScriptContent; + + public StartScriptService() { + try { + startScriptContent = getResourceFileAsString("start.sh"); + } catch (IOException e) { + startScriptContent = "echo No start script found!"; + } + } + + /** + * Reads given resource file as a string. + * + * @param fileName path to the resource file + * @return the file's contents + * @throws IOException if read fails for any reason + */ + private static String getResourceFileAsString(String fileName) throws IOException { + ClassLoader classLoader = ClassLoader.getSystemClassLoader(); + try (InputStream is = classLoader.getResourceAsStream(fileName)) { + if (is == null) return null; + try (InputStreamReader isr = new InputStreamReader(is); + BufferedReader reader = new BufferedReader(isr)) { + return reader.lines().collect(Collectors.joining(System.lineSeparator())); + } + } + } + + public boolean writeStartScript(Context context) { + Path startScriptPath = Path.of(String.format("%s/start.sh", context.serverEnvPath().toString())); + + String content = startScriptContent + .replace("%SERVER_FILE%", context.serverFileName()); + + try { + Files.writeString(startScriptPath, content); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + + context.setStartScriptPath(startScriptPath); + return true; + } +} diff --git a/tools/quick-e2e/src/main/resources/start.sh b/tools/quick-e2e/src/main/resources/start.sh new file mode 100644 index 00000000..bea7d95c --- /dev/null +++ b/tools/quick-e2e/src/main/resources/start.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +java -Xms4096M -Xmx4096M -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:G1HeapWastePercent=5 -XX:G1MaxNewSizePercent=40 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1NewSizePercent=30 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -XX:MaxGCPauseMillis=200 -XX:MaxTenuringThreshold=1 -XX:SurvivorRatio=32 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar %SERVER_FILE% nogui \ No newline at end of file