Skip to content

Commit 8311175

Browse files
ALikhachevAbduqodiri Qurbonzoda
authored andcommitted
Add simple configuration cache integration tests
1 parent 31a46d8 commit 8311175

File tree

5 files changed

+132
-2
lines changed

5 files changed

+132
-2
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package kotlinx.benchmark.integration
2+
3+
enum class GradleTestVersion(val versionString: String) {
4+
v8_0("8.0.2"),
5+
}

integration/src/main/kotlin/kotlinx/benchmark/integration/Runner.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import java.io.*
55

66
class Runner(
77
private val projectDir: File,
8-
private val print: Boolean
8+
private val print: Boolean,
9+
private val gradleVersion: GradleTestVersion? = null,
910
) {
1011

1112
private fun gradle(vararg tasks: String): GradleRunner =
@@ -15,6 +16,9 @@ class Runner(
1516
.run {
1617
if (print) forwardStdOutput(System.out.bufferedWriter()) else this
1718
}
19+
.run {
20+
if (gradleVersion != null) withGradleVersion(gradleVersion.versionString) else this
21+
}
1822

1923
fun run(vararg tasks: String, fn: BuildResult.() -> Unit = {}) {
2024
val gradle = gradle(*tasks)
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package kotlinx.benchmark.integration
2+
3+
import org.gradle.testkit.runner.BuildResult
4+
import kotlin.test.*
5+
6+
class ConfigurationCacheTest : GradleTest() {
7+
private fun runConfigurationCacheTest(projectName: String, invokedTasks: List<String>, executedTasks: List<String>) {
8+
val project = project(projectName, gradleVersion = GradleTestVersion.v8_0) {
9+
// this test doesn't pass for K/N on Gradle 8.1 yet: https://youtrack.jetbrains.com/issue/KT-58063
10+
configuration("main") {
11+
warmups = 1
12+
iterations = 1
13+
iterationTime = 100
14+
iterationTimeUnit = "ms"
15+
}
16+
}
17+
18+
project.run(*invokedTasks.toTypedArray(), "--configuration-cache") {
19+
assertTasksExecuted(invokedTasks + executedTasks)
20+
assertConfigurationCacheStored()
21+
}
22+
project.run("clean", "--configuration-cache") {
23+
assertConfigurationCacheStored()
24+
}
25+
project.run(*invokedTasks.toTypedArray(), "--configuration-cache") {
26+
assertTasksExecuted(invokedTasks + executedTasks)
27+
assertConfigurationCacheReused()
28+
}
29+
project.run(*invokedTasks.toTypedArray(), "--configuration-cache") {
30+
assertTasksUpToDate(executedTasks)
31+
assertConfigurationCacheReused()
32+
}
33+
}
34+
35+
@Test
36+
fun testConfigurationCacheNative() = runConfigurationCacheTest(
37+
"kotlin-multiplatform",
38+
listOf(":nativeBenchmark"),
39+
listOf(":compileKotlinNative", ":nativeBenchmarkGenerate", ":compileNativeBenchmarkKotlinNative", ":linkNativeBenchmarkReleaseExecutableNative")
40+
)
41+
42+
@Test
43+
@Ignore("https://youtrack.jetbrains.com/issue/KT-58250")
44+
fun testConfigurationCacheJs() = runConfigurationCacheTest(
45+
"kotlin-multiplatform",
46+
listOf(":jsIrBenchmark"),
47+
listOf(":compileKotlinJsIr", ":jsIrBenchmarkGenerate", ":compileJsIrBenchmarkProductionExecutableKotlinJsIr")
48+
)
49+
50+
@Test
51+
fun testConfigurationCacheJvm() = runConfigurationCacheTest(
52+
"kotlin-multiplatform",
53+
listOf(":jvmBenchmark"),
54+
listOf(":compileKotlinJvm", ":jvmBenchmarkGenerate", ":jvmBenchmarkCompile")
55+
)
56+
57+
@Test
58+
@Ignore("https://youtrack.jetbrains.com/issue/KT-58256")
59+
fun testConfigurationCacheWasm() = runConfigurationCacheTest(
60+
"kotlin-multiplatform",
61+
listOf(":wasmBenchmark"),
62+
listOf(":compileKotlinWasm", ":wasmBenchmarkGenerate", ":compileWasmBenchmarkProductionExecutableKotlinWasm")
63+
)
64+
}
65+
66+
private fun BuildResult.assertConfigurationCacheStored() {
67+
assertOutputContains("Configuration cache entry stored.")
68+
}
69+
70+
private fun BuildResult.assertConfigurationCacheReused() {
71+
assertOutputContains("Configuration cache entry reused.")
72+
}

integration/src/test/kotlin/kotlinx/benchmark/integration/GradleTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ abstract class GradleTest {
2020
fun project(
2121
name: String,
2222
print: Boolean = false,
23+
gradleVersion: GradleTestVersion? = null,
2324
build: ProjectBuilder.() -> Unit = {}
2425
): Runner {
2526
val builder = ProjectBuilder().apply(build)
@@ -30,7 +31,7 @@ abstract class GradleTest {
3031
if (!kotlinDevUrl.isNullOrBlank()) {
3132
file("gradle.properties").appendText("\nkotlin_repo_url=$kotlinDevUrl")
3233
}
33-
return Runner(rootProjectDir, print)
34+
return Runner(rootProjectDir, print, gradleVersion)
3435
}
3536
}
3637

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package kotlinx.benchmark.integration
2+
3+
import org.gradle.testkit.runner.BuildResult
4+
import org.gradle.testkit.runner.TaskOutcome
5+
6+
internal fun BuildResult.printBuildOutput() {
7+
println(
8+
"""
9+
|Failed assertion build output:
10+
|#######################
11+
|$output
12+
|#######################
13+
|
14+
""".trimMargin()
15+
)
16+
}
17+
18+
internal fun BuildResult.assertTasksExecuted(vararg tasks: String) {
19+
tasks.forEach { task ->
20+
assert(task(task)?.outcome == TaskOutcome.SUCCESS) {
21+
printBuildOutput()
22+
"Task $task didn't have 'SUCCESS' state: ${task(task)?.outcome}"
23+
}
24+
}
25+
}
26+
27+
internal fun BuildResult.assertTasksExecuted(tasks: Collection<String>) = assertTasksExecuted(*tasks.toTypedArray())
28+
29+
fun BuildResult.assertTasksUpToDate(vararg tasks: String) {
30+
tasks.forEach { task ->
31+
assert(task(task)?.outcome == TaskOutcome.UP_TO_DATE) {
32+
printBuildOutput()
33+
"Task $task didn't have 'UP-TO-DATE' state: ${task(task)?.outcome}"
34+
}
35+
}
36+
}
37+
38+
internal fun BuildResult.assertOutputContains(
39+
expectedSubString: String,
40+
message: String = "Build output does not contain \"$expectedSubString\""
41+
) {
42+
assert(output.contains(expectedSubString)) {
43+
printBuildOutput()
44+
message
45+
}
46+
}
47+
48+
internal fun BuildResult.assertTasksUpToDate(tasks: Collection<String>) = assertTasksUpToDate(*tasks.toTypedArray())

0 commit comments

Comments
 (0)