Skip to content

Commit

Permalink
Allow profilers to run (#5550)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheLimeGlass authored Oct 16, 2023
1 parent f4084dc commit 65059e1
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 22 deletions.
28 changes: 16 additions & 12 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,10 @@ enum Modifiers {
}

// Create a test task with given name, environments dir/file, dev mode and java version.
void createTestTask(String name, String desc, String environments, int javaVersion, Modifiers... modifiers) {
// -1 on the timeout means it'll be disabled.
void createTestTask(String name, String desc, String environments, int javaVersion, long timeout, Modifiers... modifiers) {
if (timeout == 0)
timeout = 300000 // 5 minutes
boolean junit = modifiers.contains(Modifiers.JUNIT)
boolean releaseDocs = modifiers.contains(Modifiers.GEN_RELEASE_DOCS)
boolean docs = modifiers.contains(Modifiers.GEN_NIGHTLY_DOCS) || releaseDocs
Expand Down Expand Up @@ -230,7 +233,8 @@ void createTestTask(String name, String desc, String environments, int javaVersi
docs,
junit,
modifiers.contains(Modifiers.DEBUG),
project.findProperty('verbosity') ?: "null"
project.findProperty('verbosity') ?: "null",
timeout
]

// Do first is used when throwing exceptions.
Expand Down Expand Up @@ -265,21 +269,21 @@ compileTestJava.options.encoding = 'UTF-8'
String environments = 'src/test/skript/environments/';
String env = project.property('testEnv') == null ? latestEnv : project.property('testEnv') + '.json'
int envJava = project.property('testEnvJavaVersion') == null ? latestJava : Integer.parseInt(project.property('testEnvJavaVersion') as String)
createTestTask('quickTest', 'Runs tests on one environment being the latest supported Java and Minecraft.', environments + latestEnv, latestJava)
createTestTask('skriptTestJava17', 'Runs tests on all Java 17 environments.', environments + 'java17', latestJava)
createTestTask('skriptTestJava8', 'Runs tests on all Java 8 environments.', environments + 'java8', oldestJava)
createTestTask('skriptTestDev', 'Runs testing server and uses \'system.in\' for command input, stop server to finish.', environments + env, envJava, Modifiers.DEV_MODE, Modifiers.DEBUG)
createTestTask('skriptProfile', 'Starts the testing server with JProfiler support.', environments + latestEnv, latestJava, Modifiers.PROFILE)
createTestTask('genNightlyDocs', 'Generates the Skript documentation website html files.', environments + env, envJava, Modifiers.GEN_NIGHTLY_DOCS)
createTestTask('genReleaseDocs', 'Generates the Skript documentation website html files for a release.', environments + env, envJava, Modifiers.GEN_RELEASE_DOCS)
createTestTask('quickTest', 'Runs tests on one environment being the latest supported Java and Minecraft.', environments + latestEnv, latestJava, 0)
createTestTask('skriptTestJava17', 'Runs tests on all Java 17 environments.', environments + 'java17', latestJava, 0)
createTestTask('skriptTestJava8', 'Runs tests on all Java 8 environments.', environments + 'java8', oldestJava, 0)
createTestTask('skriptTestDev', 'Runs testing server and uses \'system.in\' for command input, stop server to finish.', environments + env, envJava, 0, Modifiers.DEV_MODE, Modifiers.DEBUG)
createTestTask('skriptProfile', 'Starts the testing server with JProfiler support.', environments + latestEnv, latestJava, -1, Modifiers.PROFILE)
createTestTask('genNightlyDocs', 'Generates the Skript documentation website html files.', environments + env, envJava, 0, Modifiers.GEN_NIGHTLY_DOCS)
createTestTask('genReleaseDocs', 'Generates the Skript documentation website html files for a release.', environments + env, envJava, 0, Modifiers.GEN_RELEASE_DOCS)
tasks.register('skriptTest') {
description = 'Runs tests on all environments.'
dependsOn skriptTestJava8, skriptTestJava17
}

createTestTask('JUnitQuick', 'Runs JUnit tests on one environment being the latest supported Java and Minecraft.', environments + latestEnv, latestJava, Modifiers.JUNIT)
createTestTask('JUnitJava17', 'Runs JUnit tests on all Java 17 environments.', environments + 'java17', latestJava, Modifiers.JUNIT)
createTestTask('JUnitJava8', 'Runs JUnit tests on all Java 8 environments.', environments + 'java8', oldestJava, Modifiers.JUNIT)
createTestTask('JUnitQuick', 'Runs JUnit tests on one environment being the latest supported Java and Minecraft.', environments + latestEnv, latestJava, 0, Modifiers.JUNIT)
createTestTask('JUnitJava17', 'Runs JUnit tests on all Java 17 environments.', environments + 'java17', latestJava, 0, Modifiers.JUNIT)
createTestTask('JUnitJava8', 'Runs JUnit tests on all Java 8 environments.', environments + 'java8', oldestJava, 0, Modifiers.JUNIT)
tasks.register('JUnit') {
description = 'Runs JUnit tests on all environments.'
dependsOn JUnitJava8, JUnitJava17
Expand Down
11 changes: 3 additions & 8 deletions src/main/java/ch/njol/skript/test/platform/Environment.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,6 @@
*/
public class Environment {

/**
* Time before the process is killed if there was a stack stace etc.
*/
private static final int TIMEOUT = 5 * 60_000; // 5 minutes.

private static final Gson gson = new Gson();

/**
Expand Down Expand Up @@ -233,7 +228,7 @@ public void initialize(Path dataRoot, Path runnerRoot, boolean remake) throws IO

@Nullable
public TestResults runTests(Path runnerRoot, Path testsRoot, boolean devMode, boolean genDocs, boolean jUnit, boolean debug,
String verbosity, Set<String> jvmArgs) throws IOException, InterruptedException {
String verbosity, long timeout, Set<String> jvmArgs) throws IOException, InterruptedException {

Path env = runnerRoot.resolve(name);
Path resultsPath = env.resolve("test_results.json");
Expand Down Expand Up @@ -268,7 +263,7 @@ public TestResults runTests(Path runnerRoot, Path testsRoot, boolean devMode, bo
Runtime.getRuntime().addShutdownHook(new Thread(process::destroy));

// Catch tests running for abnormally long time
if (!devMode) {
if (!devMode && timeout > 0) {
new Timer("runner watchdog", true).schedule(new TimerTask() {
@Override
public void run() {
Expand All @@ -277,7 +272,7 @@ public void run() {
System.exit(1);
}
}
}, TIMEOUT);
}, timeout);
}

int code = process.waitFor();
Expand Down
7 changes: 5 additions & 2 deletions src/main/java/ch/njol/skript/test/platform/PlatformMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ public static void main(String... args) throws IOException, InterruptedException
boolean jUnit = "true".equals(args[6]);
boolean debug = "true".equals(args[7]);
String verbosity = args[8].toUpperCase(Locale.ENGLISH);
Set<String> jvmArgs = Sets.newHashSet(Arrays.copyOfRange(args, 9, args.length));
long timeout = Long.parseLong(args[9]);
if (timeout < 0)
timeout = 0;
Set<String> jvmArgs = Sets.newHashSet(Arrays.copyOfRange(args, 10, args.length));
if (jvmArgs.stream().noneMatch(arg -> arg.contains("-Xmx")))
jvmArgs.add("-Xmx5G");

Expand Down Expand Up @@ -97,7 +100,7 @@ public static void main(String... args) throws IOException, InterruptedException
for (Environment env : envs) {
System.out.println("Starting testing on " + env.getName());
env.initialize(dataRoot, runnerRoot, false);
TestResults results = env.runTests(runnerRoot, testsRoot, devMode, genDocs, jUnit, debug, verbosity, jvmArgs);
TestResults results = env.runTests(runnerRoot, testsRoot, devMode, genDocs, jUnit, debug, verbosity, timeout, jvmArgs);
if (results == null) {
if (devMode) {
// Nothing to report, it's the dev mode environment.
Expand Down

0 comments on commit 65059e1

Please sign in to comment.