Skip to content

Commit 08356db

Browse files
committed
Use gradle connector instead of process builder
1 parent ca30211 commit 08356db

File tree

3 files changed

+35
-28
lines changed

3 files changed

+35
-28
lines changed

codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/GradleGenerator.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,12 @@ class GradleGenerator : KotlinIntegration {
121121
private fun generateSmokeTestTask(writer: GradleWriter, ctx: CodegenContext) {
122122
val hasSuccessResponseTrait = ctx.model.expectShape<ServiceShape>(ctx.settings.service).hasTrait(SuccessResponseTrait.ID)
123123
val hasFailedResponseTrait = ctx.model.expectShape<ServiceShape>(ctx.settings.service).hasTrait(FailedResponseTrait.ID)
124-
125-
// E2E tests don't have sdkVersion in jar names
126124
val inTestingEnvironment = hasFailedResponseTrait || hasSuccessResponseTrait
125+
126+
/**
127+
* E2E tests don't have sdkVersion in jar names. They're added later for publishing.
128+
* @see SmokeTestE2ETest
129+
*/
127130
val jarName = if (inTestingEnvironment) "\${project.name}-smoketests.jar" else "\${project.name}-smoketests-\$sdkVersion.jar"
128131

129132
writer.withBlock("tasks.register<JavaExec>(#S) {", "}", "smokeTest") {

tests/codegen/smoke-tests/build.gradle.kts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ fun configureProject() {
2727

2828
dependencies {
2929
codegen(project(":codegen:aws-sdk-codegen"))
30-
implementation(libs.smithy.kotlin.codegen)
3130
codegen(libs.smithy.cli)
3231
codegen(libs.smithy.model)
3332

33+
implementation(libs.smithy.kotlin.codegen)
34+
implementation("org.gradle:gradle-tooling-api:+")
35+
3436
testImplementation(libs.kotlin.test)
3537
}
3638
}
@@ -93,6 +95,12 @@ fun configureTasks() {
9395
tasks.build {
9496
dependsOn(tasks.getByName("stageServices"))
9597
}
98+
99+
tasks.clean {
100+
this@Build_gradle.projections.forEach { projection ->
101+
delete("services/${projection.name}")
102+
}
103+
}
96104
}
97105

98106
/**
Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
1+
import org.gradle.tooling.GradleConnector
12
import software.amazon.smithy.kotlin.codegen.rendering.smoketests.SERVICE_FILTER
23
import software.amazon.smithy.kotlin.codegen.rendering.smoketests.SKIP_TAGS
4+
import java.io.ByteArrayOutputStream
35
import java.io.File
46
import kotlin.test.*
57

68
class SmokeTestE2ETest {
79
@Test
810
fun successService() {
9-
val smokeTestRunnerOutput = runSmokeTests("successService")
11+
val smokeTestRunnerOutput = runSmokeTests()
1012

1113
assertContains(smokeTestRunnerOutput, "ok SuccessService SuccessTest - no error expected from service")
1214
assertContains(smokeTestRunnerOutput, "ok SuccessService SuccessTestWithTags - no error expected from service")
1315
}
1416

1517
@Test
1618
fun failureService() {
17-
val smokeTestRunnerOutput = runSmokeTests("failureService")
19+
val smokeTestRunnerOutput = runSmokeTests()
1820

1921
assertContains(smokeTestRunnerOutput, "ok FailureService FailuresTest - error expected from service")
2022
}
2123

2224
@Test
2325
fun successServiceSkipTags() {
2426
val envVars = mapOf(SKIP_TAGS to "success")
25-
val smokeTestRunnerOutput = runSmokeTests("successService", envVars)
27+
val smokeTestRunnerOutput = runSmokeTests(envVars)
2628

2729
assertContains(smokeTestRunnerOutput, "ok SuccessService SuccessTest - no error expected from service")
2830
assertContains(smokeTestRunnerOutput, "ok SuccessService SuccessTestWithTags - no error expected from service # skip")
@@ -31,34 +33,28 @@ class SmokeTestE2ETest {
3133
@Test
3234
fun successServiceServiceFilter() {
3335
val envVars = mapOf(SERVICE_FILTER to "Failure") // Only run tests for services with this SDK ID
34-
val smokeTestRunnerOutput = runSmokeTests("successService", envVars)
36+
val smokeTestRunnerOutput = runSmokeTests(envVars)
3537

3638
assertContains(smokeTestRunnerOutput, "ok SuccessService SuccessTest - no error expected from service # skip")
3739
assertContains(smokeTestRunnerOutput, "ok SuccessService SuccessTestWithTags - no error expected from service # skip")
3840
}
3941
}
4042

41-
private fun runSmokeTests(service: String, envVars: Map<String, String> = emptyMap()): String {
42-
val sdkRootDir = System.getProperty("user.dir") + "/../../../"
43-
44-
val output = StringBuilder()
45-
val smokeTests = ProcessBuilder()
46-
.command("ls")
47-
.directory(File(sdkRootDir))
48-
.redirectErrorStream(true)
49-
50-
envVars.forEach { (key, value) ->
51-
smokeTests
52-
.environment()
53-
.put(key, value)
43+
private fun runSmokeTests(envVars: Map<String, String> = emptyMap()): String {
44+
val currentDir = System.getProperty("user.dir")
45+
val outputStream = ByteArrayOutputStream()
46+
val connector = GradleConnector.newConnector()
47+
.forProjectDirectory(File(currentDir))
48+
.connect()
49+
50+
connector.use {
51+
it.newBuild()
52+
.forTasks("smokeTest")
53+
.setStandardOutput(outputStream)
54+
.setStandardError(outputStream)
55+
.setEnvironmentVariables(envVars)
56+
.run()
5457
}
5558

56-
smokeTests
57-
.start()
58-
.inputStream
59-
.bufferedReader()
60-
.forEachLine { output.append("$it\n") }
61-
62-
throw Exception(output.toString())
63-
return output.toString()
59+
return outputStream.toString()
6460
}

0 commit comments

Comments
 (0)