Skip to content

Allow profilers to run #5550

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
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