Skip to content

Commit e170584

Browse files
committed
test: replace JUnit's Arguments with type safe data classes so parameterized tests are easier to filter
Signed-off-by: Vladimir Sitnikov <[email protected]>
1 parent bfd0cd6 commit e170584

File tree

5 files changed

+80
-53
lines changed

5 files changed

+80
-53
lines changed

sigstore-gradle/sigstore-gradle-sign-base-plugin/src/test/kotlin/dev/sigstore/gradle/SigstoreSignTest.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package dev.sigstore.gradle
1818

1919
import dev.sigstore.testkit.BaseGradleTest
2020
import dev.sigstore.testkit.TestedGradle
21+
import dev.sigstore.testkit.TestedGradleAndSigstoreJava
2122
import dev.sigstore.testkit.TestedSigstoreJava
2223
import dev.sigstore.testkit.annotations.EnabledIfOidcExists
2324
import org.assertj.core.api.Assertions.assertThat
@@ -28,15 +29,15 @@ import org.junit.jupiter.params.provider.MethodSource
2829
class SigstoreSignTest: BaseGradleTest() {
2930
@ParameterizedTest
3031
@MethodSource("gradleAndSigstoreJavaVersions")
31-
fun `sign file`(gradle: TestedGradle, sigstoreJava: TestedSigstoreJava) {
32+
fun `sign file`(case: TestedGradleAndSigstoreJava) {
3233
writeBuildGradle(
3334
"""
3435
import dev.sigstore.sign.tasks.SigstoreSignFilesTask
3536
plugins {
3637
id("java")
3738
id("dev.sigstore.sign-base")
3839
}
39-
${declareRepositoryAndDependency(sigstoreJava)}
40+
${declareRepositoryAndDependency(case.sigstoreJava)}
4041
group = "dev.sigstore.test"
4142
def helloProps = tasks.register("helloProps", WriteProperties) {
4243
outputFile = file("build/helloProps.txt")
@@ -53,15 +54,15 @@ class SigstoreSignTest: BaseGradleTest() {
5354
rootProject.name = 'sigstore-test'
5455
""".trimIndent()
5556
)
56-
enableConfigurationCache(gradle)
57-
prepare(gradle.version, "signFile", "-s")
57+
enableConfigurationCache(case.gradle)
58+
prepare(case.gradle.version, "signFile", "-s")
5859
.build()
5960
assertThat(projectDir.resolve("build/helloProps.txt.sigstore"))
6061
.content()
6162
.basicSigstoreStructure()
6263

63-
if (gradle.configurationCache == ConfigurationCache.ON) {
64-
val result = prepare(gradle.version, "signFile", "-s")
64+
if (case.gradle.configurationCache == ConfigurationCache.ON) {
65+
val result = prepare(case.gradle.version, "signFile", "-s")
6566
.build()
6667

6768
assertThat(result.output)

sigstore-gradle/sigstore-gradle-sign-plugin/src/test/kotlin/dev/sigstore/gradle/RemoveSigstoreAscTest.kt

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package dev.sigstore.gradle
1818

1919
import dev.sigstore.testkit.BaseGradleTest
2020
import dev.sigstore.testkit.TestedGradle
21+
import dev.sigstore.testkit.TestedGradleAndSigstoreJava
2122
import dev.sigstore.testkit.TestedSigstoreJava
2223
import dev.sigstore.testkit.annotations.EnabledIfOidcExists
2324
import org.assertj.core.api.Assertions.assertThat
@@ -32,34 +33,34 @@ import org.junit.jupiter.params.provider.MethodSource
3233
class RemoveSigstoreAscTest : BaseGradleTest() {
3334
companion object {
3435
@JvmStatic
35-
fun signingSupportedGradleAndSigstoreJavaVersions(): Iterable<Arguments> =
36-
if (isCI) {
37-
gradleAndSigstoreJavaVersions()
38-
} else {
39-
// Find the first version that supports configuration cache for Gradle's signing plugin (8.1+)
40-
listOf(
41-
arguments(
42-
TestedGradle(
36+
fun signingSupportedGradleAndSigstoreJavaVersions(): Iterable<TestedGradleAndSigstoreJava> =
37+
gradleAndSigstoreJavaVersions()
38+
.filter {
39+
it.gradle.configurationCache == ConfigurationCache.OFF ||
4340
// Signing plugin supports configuration cache since 8.1
44-
gradleVersions().first { it >= GradleVersion.version("8.1") },
45-
ConfigurationCache.ON
46-
),
47-
SIGSTORE_JAVA_CURRENT_VERSION
41+
it.gradle.version >= GradleVersion.version("8.1")
42+
}.ifEmpty {
43+
// When executing tests locally, the above gradleAndSigstoreJavaVersions might produce
44+
// Gradle < 8.1 + configuration cache=on which is incompatible with signing plugin.
45+
listOf(
46+
TestedGradleAndSigstoreJava(
47+
TestedGradle(GradleVersion.version("8.1"), ConfigurationCache.OFF),
48+
SIGSTORE_JAVA_CURRENT_VERSION
49+
)
4850
)
49-
)
50-
}
51+
}
5152

5253
@JvmStatic
53-
fun oneSigningSupportedGradleAndSigstoreJavaVersions(): Iterable<Arguments> =
54+
fun oneSigningSupportedGradleAndSigstoreJavaVersions(): Iterable<TestedGradleAndSigstoreJava> =
5455
signingSupportedGradleAndSigstoreJavaVersions().take(1)
5556
}
5657

5758
@ParameterizedTest
5859
@MethodSource("signingSupportedGradleAndSigstoreJavaVersions")
59-
fun `basic configuration avoids signing sigstore with pgp`(gradle: TestedGradle, sigstoreJava: TestedSigstoreJava) {
60-
prepareBuildScripts(gradle, sigstoreJava)
60+
fun `basic configuration avoids signing sigstore with pgp`(case: TestedGradleAndSigstoreJava) {
61+
prepareBuildScripts(case)
6162

62-
prepare(gradle.version, "publishAllPublicationsToTmpRepository", "-s")
63+
prepare(case.gradle.version, "publishAllPublicationsToTmpRepository", "-s")
6364
.build()
6465

6566
assertSoftly {
@@ -69,8 +70,8 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
6970
assertSignatures("sigstore-test-1.0.pom")
7071
}
7172

72-
if (gradle.configurationCache == ConfigurationCache.ON) {
73-
val result = prepare(gradle.version, "publishAllPublicationsToTmpRepository", "-s")
73+
if (case.gradle.configurationCache == ConfigurationCache.ON) {
74+
val result = prepare(case.gradle.version, "publishAllPublicationsToTmpRepository", "-s")
7475
.build()
7576

7677
assertThat(result.output)
@@ -83,8 +84,8 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
8384

8485
@ParameterizedTest
8586
@MethodSource("oneSigningSupportedGradleAndSigstoreJavaVersions")
86-
fun `crossign sigstore with pgp`(gradle: TestedGradle, sigstoreJava: TestedSigstoreJava) {
87-
prepareBuildScripts(gradle, sigstoreJava)
87+
fun `crossign sigstore with pgp`(case: TestedGradleAndSigstoreJava) {
88+
prepareBuildScripts(case)
8889
projectDir.resolve("gradle.properties").toFile().appendText(
8990
"""
9091
@@ -93,7 +94,7 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
9394
dev.sigstore.sign.remove.sigstore.asc=false
9495
""".trimIndent()
9596
)
96-
prepare(gradle.version, "publishAllPublicationsToTmpRepository", "-s")
97+
prepare(case.gradle.version, "publishAllPublicationsToTmpRepository", "-s")
9798
.build()
9899
assertSoftly {
99100
assertSignatures("sigstore-test-1.0.pom", expectSigstoreAsc = true)
@@ -103,7 +104,7 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
103104
}
104105
}
105106

106-
private fun prepareBuildScripts(gradle: TestedGradle, sigstoreJava: TestedSigstoreJava) {
107+
private fun prepareBuildScripts(case: TestedGradleAndSigstoreJava) {
107108
writeBuildGradle(
108109
"""
109110
plugins {
@@ -112,7 +113,7 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
112113
id("maven-publish")
113114
id("dev.sigstore.sign")
114115
}
115-
${declareRepositoryAndDependency(sigstoreJava)}
116+
${declareRepositoryAndDependency(case.sigstoreJava)}
116117
117118
group = "dev.sigstore.test"
118119
java {
@@ -148,9 +149,7 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
148149
rootProject.name = 'sigstore-test'
149150
""".trimIndent()
150151
)
151-
if (gradle.version >= GradleVersion.version("8.1")) {
152-
enableConfigurationCache(gradle)
153-
}
152+
enableConfigurationCache(case.gradle)
154153
}
155154

156155
private fun SoftAssertions.assertSignatures(name: String, expectSigstoreAsc: Boolean = false) {

sigstore-gradle/sigstore-gradle-sign-plugin/src/test/kotlin/dev/sigstore/gradle/SigstorePublishSignTest.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package dev.sigstore.gradle
1818

1919
import dev.sigstore.testkit.BaseGradleTest
2020
import dev.sigstore.testkit.TestedGradle
21+
import dev.sigstore.testkit.TestedGradleAndSigstoreJava
2122
import dev.sigstore.testkit.TestedSigstoreJava
2223
import dev.sigstore.testkit.annotations.EnabledIfOidcExists
2324
import org.assertj.core.api.Assertions.assertThat
@@ -28,15 +29,15 @@ import org.junit.jupiter.params.provider.MethodSource
2829
class SigstorePublishSignTest : BaseGradleTest() {
2930
@ParameterizedTest
3031
@MethodSource("gradleAndSigstoreJavaVersions")
31-
fun `sign file`(gradle: TestedGradle, sigstoreJava: TestedSigstoreJava) {
32+
fun `sign file`(case: TestedGradleAndSigstoreJava) {
3233
writeBuildGradle(
3334
"""
3435
plugins {
3536
id("java")
3637
id("maven-publish")
3738
id("dev.sigstore.sign")
3839
}
39-
${declareRepositoryAndDependency(sigstoreJava)}
40+
${declareRepositoryAndDependency(case.sigstoreJava)}
4041
4142
group = "dev.sigstore.test"
4243
java {
@@ -65,8 +66,8 @@ class SigstorePublishSignTest : BaseGradleTest() {
6566
rootProject.name = 'sigstore-test'
6667
""".trimIndent()
6768
)
68-
enableConfigurationCache(gradle)
69-
prepare(gradle.version, "publishAllPublicationsToTmpRepository", "-s")
69+
enableConfigurationCache(case.gradle)
70+
prepare(case.gradle.version, "publishAllPublicationsToTmpRepository", "-s")
7071
.build()
7172

7273
assertThat(projectDir.resolve("build/tmp-repo/dev/sigstore/test/sigstore-test/1.0/sigstore-test-1.0.pom.sigstore"))
@@ -82,8 +83,8 @@ class SigstorePublishSignTest : BaseGradleTest() {
8283
.content()
8384
.basicSigstoreStructure()
8485

85-
if (gradle.configurationCache == ConfigurationCache.ON) {
86-
val result = prepare(gradle.version, "publishAllPublicationsToTmpRepository", "-s")
86+
if (case.gradle.configurationCache == ConfigurationCache.ON) {
87+
val result = prepare(case.gradle.version, "publishAllPublicationsToTmpRepository", "-s")
8788
.build()
8889

8990
assertThat(result.output)

sigstore-testkit/src/main/kotlin/dev/sigstore/testkit/BaseGradleTest.kt

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,38 +58,42 @@ open class BaseGradleTest {
5858
).map { GradleVersion.version(it) }
5959

6060
@JvmStatic
61-
fun gradleVersionAndSettings(): Iterable<Arguments> {
61+
fun gradleVersionAndSettings(): Iterable<TestedGradle> {
6262
if (!isCI) {
6363
// Execute a single combination only when running locally
64-
return listOf(arguments(TestedGradle(gradleVersions().first(), ConfigurationCache.ON)))
64+
return listOf(
65+
TestedGradle(gradleVersions().first(), ConfigurationCache.ON)
66+
)
6567
}
6668
return buildList {
6769
addAll(
68-
gradleVersions().map { arguments(TestedGradle(it, ConfigurationCache.ON)) }
70+
gradleVersions().map { TestedGradle(it, ConfigurationCache.ON) }
6971
)
70-
add(arguments(TestedGradle(gradleVersions().first(), ConfigurationCache.OFF)))
72+
// Test the first and the last version without configuration cache
73+
add(TestedGradle(gradleVersions().first(), ConfigurationCache.OFF))
74+
add(TestedGradle(gradleVersions().last(), ConfigurationCache.OFF))
7175
}
7276
}
7377

7478
@JvmStatic
75-
fun sigstoreJavaVersions(): Iterable<Arguments> {
79+
fun sigstoreJavaVersions(): Iterable<TestedSigstoreJava> {
7680
return buildList {
77-
add(arguments(SIGSTORE_JAVA_CURRENT_VERSION))
81+
add(SIGSTORE_JAVA_CURRENT_VERSION)
7882
// For now, we test the plugins only with locally-built sigstore-java version
7983
if (isCI && false) {
80-
add(arguments(TestedSigstoreJava.Default))
84+
add(TestedSigstoreJava.Default)
8185
// 0.3.0 is the minimal version that supports generating Sigstore Bundle
82-
add(arguments(TestedSigstoreJava.Version("0.3.0")))
86+
add(TestedSigstoreJava.Version("0.3.0"))
8387
}
8488
}
8589
}
8690

8791
@JvmStatic
88-
fun gradleAndSigstoreJavaVersions(): Iterable<Arguments> {
92+
fun gradleAndSigstoreJavaVersions(): Iterable<TestedGradleAndSigstoreJava> {
8993
val gradle = gradleVersionAndSettings()
9094
val sigstore = sigstoreJavaVersions()
9195
return gradle.flatMap { gradleVersion ->
92-
sigstore.map { arguments(*gradleVersion.get(), *it.get()) }
96+
sigstore.map { TestedGradleAndSigstoreJava(gradleVersion, it) }
9397
}
9498
}
9599
}
@@ -187,9 +191,6 @@ open class BaseGradleTest {
187191
if (gradle.configurationCache != ConfigurationCache.ON) {
188192
return
189193
}
190-
if (gradle.version < GradleVersion.version("7.0")) {
191-
Assertions.fail<Unit>("Gradle version $gradle does not support configuration cache")
192-
}
193194
// Gradle 6.5 expects values ON, OFF, WARN, so we add the option for 7.0 only
194195
projectDir.resolve("gradle.properties").toFile().appendText(
195196
"""
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright 2022 The Sigstore Authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
package dev.sigstore.testkit
18+
19+
/**
20+
* Lists Gradle versions and Sigstore Gradle plugin versions.
21+
*/
22+
data class TestedGradleAndSigstoreJava(
23+
val gradle: TestedGradle,
24+
val sigstoreJava: TestedSigstoreJava,
25+
)

0 commit comments

Comments
 (0)