diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 9a35523bbe..6b654a68de 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -1,7 +1,13 @@ +import org.gradle.api.tasks.testing.TestResult.ResultType +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent + import java.text.SimpleDateFormat import java.time.Instant +import java.io.FileWriter import java.util.* + group = "ai.giskard" description = "Giskard main java backend" @@ -267,9 +273,12 @@ tasks { test { exclude("**/*IT*", "**/*IntTest*") testLogging { - events.add(org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED) - events.add(org.gradle.api.tasks.testing.logging.TestLogEvent.SKIPPED) + events = setOf( + TestLogEvent.FAILED, + TestLogEvent.SKIPPED + ) } + jvmArgs?.add("-Djava.security.egd=file:/dev/./urandom -Xmx256m") reports.html.required.set(false) } @@ -282,17 +291,70 @@ tasks { description = "Execute integration tests." group = "verification" include("**/*IT*", "**/*IntTest*") + testLogging { events = setOf( - org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED, - org.gradle.api.tasks.testing.logging.TestLogEvent.SKIPPED + TestLogEvent.FAILED, + TestLogEvent.SKIPPED ) } + // Improvement ? + // https://stackoverflow.com/questions/3963708/gradle-how-to-display-test-results-in-the-console-in-real-time#answer-36130467 + // https://gist.github.com/serpro69/c987a4016fb59f6ca2ff9f8d8464561d + jvmArgs?.add("-Djava.security.egd=file:/dev/./urandom -Xmx256m") if (project.hasProperty("testcontainers")) { environment = mapOf("spring.profiles.active" to "testcontainers") } reports.html.required.set(false) + + beforeSuite(KotlinClosure0({ -> + val report_path = System.getenv("GITHUB_STEP_SUMMARY") ?: "local_report.md" + val file = File(report_path) + if(file.exists()) { + file.delete(); + } + })) + + afterTest(KotlinClosure2({ testDescriptor: TestDescriptor, result: TestResult -> + // https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/TestResult.html$ + // https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/TestFailure.html + if (result.getResultType() == ResultType.FAILURE) { + val report_path = System.getenv("GITHUB_STEP_SUMMARY") ?: "local_report.md" + var report = File(report_path) + var test_name = testDescriptor.getName() + report.appendText("\n\n#### ${testDescriptor}\n\n") + + for (failure in result.getFailures()) { + report.appendText("
\n") + report.appendText("${failure.getDetails().getMessage() ?: ""}\n\n") + report.appendText("\n\n```java\n") + report.appendText(failure.getDetails().getStacktrace() ?: "") + report.appendText("\n```\n") + report.appendText("\n
\n\n") + + } + } + })) + + afterSuite(KotlinClosure2({ desc: TestDescriptor, result: TestResult -> + if (desc.parent == null) { // will match the outermost suite + val report_path = System.getenv("GITHUB_STEP_SUMMARY") ?: "local_report.md" + val report_content = if (File(report_path).exists()) File(report_path).readText() else "" + FileWriter(report_path).use { + it.write("### Gradle Test report\n") + it.write("Test results: ${result.resultType}\n") + it.write("\n| Status |Count |") + it.write("\n| :---: | :---: |") + it.write("\n| Successful | ${result.successfulTestCount} |") + it.write("\n| Failed | ${result.failedTestCount} |") + it.write("\n| Skipped | ${result.skippedTestCount} |") + it.write("\n| Skipped | ${result.skippedTestCount} |\n\n") + it.write(report_content) + } + + } + })) } create("testReport") { @@ -364,11 +426,3 @@ tasks { } defaultTasks("bootRun") - - - - - - - -