Skip to content

Commit b7df24d

Browse files
committed
Added all gradle plugin tests
1 parent 0fa8573 commit b7df24d

File tree

40 files changed

+768
-20
lines changed

40 files changed

+768
-20
lines changed

gradle-plugin/src/test/kotlin/kotlinx/rpc/GrpcJvmProjectTest.kt

Lines changed: 259 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,22 @@ class GrpcJvmProjectTest : GrpcBaseTest() {
1616
override val isKmp: Boolean = false
1717

1818
@Test
19-
fun `Minimal gRPC Configuration`() {
19+
fun `Minimal gRPC Configuration`() = runGrpcTest {
2020
val result = runGradle(bufGenerateMain)
2121

22-
assertEquals(TaskOutcome.SUCCESS, result.protoTaskOutcome(bufGenerateMain))
23-
assertEquals(TaskOutcome.SUCCESS, result.protoTaskOutcome(processMainProtoFiles))
24-
assertEquals(TaskOutcome.SUCCESS, result.protoTaskOutcome(generateBufYamlMain))
25-
assertEquals(TaskOutcome.SUCCESS, result.protoTaskOutcome(generateBufGenYamlMain))
26-
27-
result.assertProtoTaskNotExecuted(bufGenerateTest)
28-
result.assertProtoTaskNotExecuted(processTestProtoFiles)
29-
result.assertProtoTaskNotExecuted(processTestImportProtoFiles)
30-
result.assertProtoTaskNotExecuted(generateBufYamlTest)
31-
result.assertProtoTaskNotExecuted(generateBufGenYamlTest)
32-
33-
assertSourceCodeGenerated(
34-
mainSourceSet,
35-
Path("Some.kt"),
36-
Path(RPC_INTERNAL, "Some.kt")
22+
result.assertMainTaskExecuted(
23+
protoFiles = listOf(
24+
Path("some.proto")
25+
),
26+
generatedFiles = listOf(
27+
Path("Some.kt"),
28+
Path(RPC_INTERNAL, "Some.kt"),
29+
)
3730
)
38-
39-
assertWorkspaceProtoFilesCopied(mainSourceSet, Path("some.proto"))
40-
assertWorkspaceImportProtoFilesCopied(mainSourceSet)
4131
}
4232

4333
@Test
44-
fun `No gRPC`() {
34+
fun `No gRPC`() = runGrpcTest {
4535
runNonExistentTask(bufGenerateMain)
4636
runNonExistentTask(bufGenerateTest)
4737
runNonExistentTask(processMainProtoFiles)
@@ -52,4 +42,253 @@ class GrpcJvmProjectTest : GrpcBaseTest() {
5242
runNonExistentTask(generateBufGenYamlMain)
5343
runNonExistentTask(generateBufGenYamlTest)
5444
}
45+
46+
@Test
47+
fun `Test-Only Sources`() = runGrpcTest {
48+
val result = runGradle(bufGenerateTest)
49+
50+
result.assertTestTaskExecuted(
51+
protoFiles = listOf(
52+
Path("some.proto"),
53+
),
54+
importProtoFiles = emptyList(),
55+
generatedFiles = listOf(
56+
Path("Some.kt"),
57+
Path(RPC_INTERNAL, "Some.kt"),
58+
),
59+
importGeneratedFiles = emptyList()
60+
)
61+
}
62+
63+
@Test
64+
fun `Main and Test Mixed Sources`() = runGrpcTest {
65+
val mainRun = runGradle(bufGenerateMain)
66+
67+
mainRun.assertMainTaskExecuted(
68+
protoFiles = listOf(
69+
Path("some.proto")
70+
),
71+
generatedFiles = listOf(
72+
Path("Some.kt"),
73+
Path(RPC_INTERNAL, "Some.kt"),
74+
)
75+
)
76+
77+
cleanProtoBuildDir()
78+
79+
val testRun = runGradle(bufGenerateTest)
80+
81+
testRun.assertTestTaskExecuted(
82+
protoFiles = listOf(
83+
Path("other.proto")
84+
),
85+
importProtoFiles = listOf(
86+
Path("some.proto")
87+
),
88+
generatedFiles = listOf(
89+
Path("Other.kt"),
90+
Path(RPC_INTERNAL, "Other.kt"),
91+
),
92+
importGeneratedFiles = listOf(
93+
Path("Some.kt"),
94+
Path(RPC_INTERNAL, "Some.kt"),
95+
)
96+
)
97+
}
98+
99+
@Test
100+
fun `Exclude and Include in protoSourceSets`() = runGrpcTest {
101+
runGradle(processMainProtoFiles)
102+
103+
assertWorkspaceProtoFilesCopied(
104+
mainSourceSet,
105+
Path("some.proto"),
106+
Path("ok", "ok.proto"),
107+
)
108+
109+
runGradle(processTestProtoFiles)
110+
111+
assertWorkspaceProtoFilesCopied(
112+
testSourceSet,
113+
Path("include.proto"),
114+
Path("some", "package", "hello", "world", "file.proto"),
115+
Path("include", "yes1.proto"),
116+
Path("include", "yes2.proto"),
117+
)
118+
119+
runGradle(processTestImportProtoFiles)
120+
121+
assertWorkspaceImportProtoFilesCopied(
122+
testSourceSet,
123+
Path("some.proto"),
124+
Path("ok", "ok.proto"),
125+
)
126+
}
127+
128+
@Test
129+
fun `Can Add Custom Protoc Plugins`() = runGrpcTest {
130+
runGradle(generateBufGenYamlMain)
131+
132+
assertBufGenYaml(
133+
sourceSet = mainSourceSet,
134+
content = """
135+
version: v2
136+
clean: true
137+
plugins:
138+
- remote: buf.build/protocolbuffers/java:v${TEST_PROTOBUF_VERSION.substringAfter(".")}
139+
out: java
140+
- remote: buf.build/grpc/java:v$TEST_GRPC_VERSION
141+
out: grpc-java
142+
- remote: buf.build/grpc/kotlin:v$TEST_GRPC_KOTLIN_VERSION
143+
out: grpc-kotlin
144+
- local: [protoc-gen-kotlin-multiplatform]
145+
out: kotlin-multiplatform
146+
opt:
147+
- debugOutput=protoc-gen-kotlin-multiplatform.log
148+
- messageMode=interface
149+
- explicitApiModeEnabled=true
150+
- local: [path, to, protoc-gen-myplugin.exe]
151+
out: myPlugin
152+
opt:
153+
- hello=world
154+
- foo=bar
155+
strategy: all
156+
include_imports: true
157+
include_wkt: false
158+
types:
159+
- my.type.Yay
160+
exclude_types:
161+
- my.type.Nope
162+
- remote: my.remote.plugin
163+
out: myRemotePlugin
164+
inputs:
165+
- directory: proto
166+
""".trimIndent()
167+
)
168+
}
169+
170+
@Test
171+
fun `Custom Protoc Plugins Must Declare an Artifact`() = runGrpcTest {
172+
val result = runGradleToFail(generateBufGenYamlMain)
173+
assert(result.output.contains("Artifact is not specified for protoc plugin myPlugin"))
174+
}
175+
176+
private val cliFlagsRegex = "- Buf Arguments: \\[.*?, generate, --output, .*?, --include-imports, --include-wkt, --error-format, json, --config, some\\.buf\\.yaml, --log-format, json, --timeout, 60s]".toRegex()
177+
178+
@Test
179+
fun `Custom Buf CLI Flags`() = runGrpcTest {
180+
val result = runGradleToFail(bufGenerateMain)
181+
assert(result.output.contains("could not read file: open some.buf.yaml: no such file or directory")) {
182+
"Expected failure due to missing some.buf.yaml file"
183+
}
184+
185+
val cliArgsLine = result.output.lines().first { it.contains("- Buf Arguments:") }
186+
assert(cliArgsLine.contains(cliFlagsRegex)) {
187+
"Buf CLI flags are not correct: $cliArgsLine"
188+
}
189+
}
190+
191+
@Test
192+
fun `Skip Generation When No Proto Files`() = runGrpcTest {
193+
val result = runGradle(bufGenerateMain)
194+
195+
assertEquals(TaskOutcome.SKIPPED, result.protoTaskOutcome(bufGenerateMain))
196+
}
197+
198+
@Test
199+
fun `Proto Tasks Are Cached Properly`() = runGrpcTest {
200+
val firstRunMain = runGradle(bufGenerateMain)
201+
202+
assertEquals(TaskOutcome.SUCCESS, firstRunMain.protoTaskOutcome(bufGenerateMain))
203+
assertEquals(TaskOutcome.SUCCESS, firstRunMain.protoTaskOutcome(generateBufYamlMain))
204+
assertEquals(TaskOutcome.SUCCESS, firstRunMain.protoTaskOutcome(generateBufGenYamlMain))
205+
assertEquals(TaskOutcome.SUCCESS, firstRunMain.protoTaskOutcome(processMainProtoFiles))
206+
207+
val secondRunMain = runGradle(bufGenerateMain)
208+
209+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunMain.protoTaskOutcome(bufGenerateMain))
210+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunMain.protoTaskOutcome(generateBufYamlMain))
211+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunMain.protoTaskOutcome(generateBufGenYamlMain))
212+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunMain.protoTaskOutcome(processMainProtoFiles))
213+
214+
cleanProtoBuildDir()
215+
216+
val thirdRunMain = runGradle(bufGenerateMain)
217+
218+
assertEquals(TaskOutcome.SUCCESS, thirdRunMain.protoTaskOutcome(bufGenerateMain))
219+
assertEquals(TaskOutcome.SUCCESS, thirdRunMain.protoTaskOutcome(generateBufYamlMain))
220+
assertEquals(TaskOutcome.SUCCESS, thirdRunMain.protoTaskOutcome(generateBufGenYamlMain))
221+
assertEquals(TaskOutcome.SUCCESS, thirdRunMain.protoTaskOutcome(processMainProtoFiles))
222+
223+
mainProtoFileSources
224+
.resolve("some.proto")
225+
.replace("content = 1", "content = 2")
226+
227+
val fourthRunMain = runGradle(bufGenerateMain)
228+
229+
assertEquals(TaskOutcome.SUCCESS, fourthRunMain.protoTaskOutcome(bufGenerateMain))
230+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunMain.protoTaskOutcome(generateBufYamlMain))
231+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunMain.protoTaskOutcome(generateBufGenYamlMain))
232+
assertEquals(TaskOutcome.SUCCESS, fourthRunMain.protoTaskOutcome(processMainProtoFiles))
233+
234+
val firstRunTest = runGradle(bufGenerateTest)
235+
236+
assertEquals(TaskOutcome.SUCCESS, firstRunTest.protoTaskOutcome(bufGenerateTest))
237+
assertEquals(TaskOutcome.SUCCESS, firstRunTest.protoTaskOutcome(generateBufYamlTest))
238+
assertEquals(TaskOutcome.SUCCESS, firstRunTest.protoTaskOutcome(generateBufGenYamlTest))
239+
assertEquals(TaskOutcome.SUCCESS, firstRunTest.protoTaskOutcome(processTestProtoFiles))
240+
assertEquals(TaskOutcome.SUCCESS, firstRunTest.protoTaskOutcome(processTestImportProtoFiles))
241+
242+
assertEquals(TaskOutcome.UP_TO_DATE, firstRunTest.protoTaskOutcome(bufGenerateMain))
243+
assertEquals(TaskOutcome.UP_TO_DATE, firstRunTest.protoTaskOutcome(generateBufYamlMain))
244+
assertEquals(TaskOutcome.UP_TO_DATE, firstRunTest.protoTaskOutcome(generateBufGenYamlMain))
245+
assertEquals(TaskOutcome.UP_TO_DATE, firstRunTest.protoTaskOutcome(processMainProtoFiles))
246+
247+
val secondRunTest = runGradle(bufGenerateTest)
248+
249+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(bufGenerateTest))
250+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(generateBufYamlTest))
251+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(generateBufGenYamlTest))
252+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(processTestProtoFiles))
253+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(processTestImportProtoFiles))
254+
255+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(bufGenerateMain))
256+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(generateBufYamlMain))
257+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(generateBufGenYamlMain))
258+
assertEquals(TaskOutcome.UP_TO_DATE, secondRunTest.protoTaskOutcome(processMainProtoFiles))
259+
260+
testProtoFileSources
261+
.resolve("other.proto")
262+
.replace("content = 1", "content = 2")
263+
264+
val thirdRunTest = runGradle(bufGenerateTest)
265+
266+
assertEquals(TaskOutcome.SUCCESS, thirdRunTest.protoTaskOutcome(bufGenerateTest))
267+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(generateBufYamlTest))
268+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(generateBufGenYamlTest))
269+
assertEquals(TaskOutcome.SUCCESS, thirdRunTest.protoTaskOutcome(processTestProtoFiles))
270+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(processTestImportProtoFiles))
271+
272+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(bufGenerateMain))
273+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(generateBufYamlMain))
274+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(generateBufGenYamlMain))
275+
assertEquals(TaskOutcome.UP_TO_DATE, thirdRunTest.protoTaskOutcome(processMainProtoFiles))
276+
277+
mainProtoFileSources
278+
.resolve("some.proto")
279+
.replace("content = 2", "content = 3")
280+
281+
val fourthRunTest = runGradle(bufGenerateTest)
282+
283+
assertEquals(TaskOutcome.SUCCESS, fourthRunTest.protoTaskOutcome(bufGenerateTest))
284+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunTest.protoTaskOutcome(generateBufYamlTest))
285+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunTest.protoTaskOutcome(generateBufGenYamlTest))
286+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunTest.protoTaskOutcome(processTestProtoFiles))
287+
assertEquals(TaskOutcome.SUCCESS, fourthRunTest.protoTaskOutcome(processTestImportProtoFiles))
288+
289+
assertEquals(TaskOutcome.SUCCESS, fourthRunTest.protoTaskOutcome(bufGenerateMain))
290+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunTest.protoTaskOutcome(generateBufYamlMain))
291+
assertEquals(TaskOutcome.UP_TO_DATE, fourthRunTest.protoTaskOutcome(generateBufGenYamlMain))
292+
assertEquals(TaskOutcome.SUCCESS, fourthRunTest.protoTaskOutcome(processMainProtoFiles))
293+
}
55294
}

0 commit comments

Comments
 (0)