Skip to content

Commit 214d268

Browse files
committed
added running conformance tests
1 parent a1305c2 commit 214d268

File tree

8 files changed

+701
-12
lines changed

8 files changed

+701
-12
lines changed

gradle-conventions/src/main/kotlin/util/tasks/protobufConformanceUpdate.kt

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.gradle.api.DefaultTask
88
import org.gradle.api.Project
99
import org.gradle.api.provider.Property
1010
import org.gradle.api.tasks.Copy
11+
import org.gradle.api.tasks.Input
1112
import org.gradle.api.tasks.InputFile
1213
import org.gradle.api.tasks.OutputFile
1314
import org.gradle.api.tasks.TaskAction
@@ -24,6 +25,12 @@ const val UNZIP_PROTOBUF_CONFORMANCE_TASK = "unzipProtobufConformance"
2425
const val WRITE_CONFORMANCE_EXECUTABLE_PATH_TASK = "writeConformanceExecutablePath"
2526

2627
abstract class ConformanceExecutablePathWriter : DefaultTask() {
28+
@get:Input
29+
abstract val outputDir: Property<File>
30+
31+
@get:Input
32+
abstract val kotlinTestDir: Property<File>
33+
2734
@get:InputFile
2835
abstract val executable: Property<File>
2936

@@ -47,7 +54,11 @@ abstract class ConformanceExecutablePathWriter : DefaultTask() {
4754
// file generated by ConformanceExecutablePathWriter task
4855
4956
const val CONFORMANCE_EXECUTABLE_PATH: String = "${executable.get().absolutePath}"
50-
57+
58+
const val CONFORMANCE_OUTPUT_DIR: String = "${outputDir.get().absolutePath}"
59+
60+
const val KOTLIN_TEST_DIR: String = "${kotlinTestDir.get().absolutePath}"
61+
5162
""".trimIndent()
5263
)
5364
}
@@ -111,7 +122,7 @@ fun Project.setupProtobufConformanceResources() {
111122

112123
val destDir = project.layout.projectDirectory
113124
.dir("src")
114-
.dir("test")
125+
.dir("main")
115126
.dir("proto")
116127

117128
into(destDir)
@@ -131,23 +142,41 @@ fun Project.setupProtobufConformanceResources() {
131142

132143
val writeConformanceExecutablePath =
133144
tasks.register<ConformanceExecutablePathWriter>(WRITE_CONFORMANCE_EXECUTABLE_PATH_TASK) {
145+
outputDir.set(
146+
project.layout.buildDirectory.get()
147+
.dir("protobuf-conformance")
148+
.asFile
149+
)
150+
151+
kotlinTestDir.set(
152+
project.layout.projectDirectory
153+
.dir("src")
154+
.dir("test")
155+
.dir("kotlin")
156+
.asFile
157+
)
158+
134159
executable.set(
135160
configurations.getByName(CONFORMANCE_TEST_RUNNER_CONFIGURATION).map {
136161
zipTree(it).matching { include("bin/**") }.files.first()
137162
}.single()
138163
)
139164

140165
destination.set(
141-
project.layout.buildDirectory.file("generated/protobuf-conformance/executable-path.kt").get().asFile
166+
project.layout.buildDirectory.get()
167+
.dir("generated")
168+
.dir("protobuf-conformance")
169+
.file("executable-paths.kt")
170+
.asFile
142171
)
143172
}
144173

145-
tasks.matching { it.name == "processTestProtoFiles" }.all {
174+
tasks.matching { it.name == "processMainProtoFiles" || it.name == "processTestImportProtoFiles" }.all {
146175
dependsOn(unzipProtobufConformance)
147176
}
148177

149178
the<KotlinJvmExtension>().apply {
150-
sourceSets.getByName("test") {
179+
sourceSets.getByName("main") {
151180
kotlin.srcDir(writeConformanceExecutablePath.map { it.destination.get().parentFile })
152181
}
153182
}

protobuf/protobuf-core/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ plugins {
1616
}
1717

1818
kotlin {
19+
// time API
1920
compilerOptions {
2021
apiVersion = KotlinVersion.KOTLIN_2_1
22+
languageVersion = KotlinVersion.KOTLIN_2_1
2123
}
2224

2325
sourceSets {

tests/protobuf-conformance/build.gradle.kts

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,40 +7,90 @@
77
import kotlinx.rpc.buf.tasks.BufGenerateTask
88
import kotlinx.rpc.internal.InternalRpcApi
99
import kotlinx.rpc.internal.configureLocalProtocGenDevelopmentDependency
10-
import kotlinx.rpc.protoc.ProcessProtoFiles
10+
import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
1111
import util.tasks.setupProtobufConformanceResources
1212

1313
plugins {
1414
alias(libs.plugins.conventions.jvm)
1515
alias(libs.plugins.kotlinx.rpc)
1616
}
1717

18+
kotlin {
19+
explicitApi = ExplicitApiMode.Disabled
20+
}
21+
1822
dependencies {
19-
testImplementation(projects.grpc.grpcCodec)
20-
testImplementation(projects.protobuf.protobufCore)
23+
implementation(libs.coroutines.core)
24+
implementation(libs.kotlin.reflect)
25+
implementation(projects.grpc.grpcCodec)
26+
implementation(projects.protobuf.protobufCore)
27+
28+
testImplementation(libs.kotlin.test.junit5)
29+
testImplementation(libs.coroutines.test)
2130
}
2231

2332
setupProtobufConformanceResources()
24-
configureLocalProtocGenDevelopmentDependency()
33+
configureLocalProtocGenDevelopmentDependency("Main")
2534

2635
val generatedCodeDir = project.layout.projectDirectory
2736
.dir("src")
28-
.dir("test")
37+
.dir("main")
2938
.dir("generated-code")
3039
.asFile
3140

3241
tasks.withType<BufGenerateTask>().configureEach {
33-
if (name.endsWith("Test")) {
42+
if (name.endsWith("Main")) {
3443
outputDirectory = generatedCodeDir
3544
}
3645
}
3746

3847
protoSourceSets {
39-
test {
48+
main {
4049
proto {
4150
exclude("**/test_messages_proto2.proto")
4251
exclude("**/test_messages_proto2_editions.proto")
4352
exclude("**/test_messages_edition2023.proto")
4453
}
4554
}
4655
}
56+
57+
val mockClientJar = tasks.register<Jar>("mockClientJar") {
58+
archiveBaseName.set("mockClient")
59+
archiveVersion.set("")
60+
61+
manifest {
62+
attributes["Main-Class"] = "kotlinx.rpc.protoc.gen.test.ConformanceClientKt"
63+
}
64+
65+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
66+
from(
67+
configurations.runtimeClasspath.map { prop ->
68+
prop.map { if (it.isDirectory()) it else zipTree(it) }
69+
}
70+
)
71+
72+
with(tasks.jar.get())
73+
}
74+
75+
76+
val generateConformanceTests = tasks.register<JavaExec>("generateConformanceTests") {
77+
classpath = sourceSets.main.get().runtimeClasspath
78+
79+
dependsOn(mockClientJar)
80+
dependsOn(tasks.named("bufGenerateMain"))
81+
82+
args = listOf(
83+
mockClientJar.get().archiveFile.get().asFile.absolutePath
84+
)
85+
86+
mainClass.set("kotlinx.rpc.protoc.gen.test.GenerateConformanceTestsKt")
87+
}
88+
89+
90+
tasks.test {
91+
environment("MOCK_CLIENT_JAR", mockClientJar.get().archiveFile.get().asFile.absolutePath)
92+
93+
useJUnitPlatform()
94+
95+
dependsOn(generateConformanceTests)
96+
}

0 commit comments

Comments
 (0)