Skip to content

Commit e3f352f

Browse files
authored
Merge branch 'main' into java-25
2 parents b675d8d + 1540256 commit e3f352f

File tree

315 files changed

+4407
-3263
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

315 files changed

+4407
-3263
lines changed

.github/workflows/ci-rootless.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
with:
5353
rootless: true
5454
- name: Setup Gradle Build Action
55-
uses: gradle/actions/setup-gradle@v4
55+
uses: gradle/actions/setup-gradle@v5
5656
- name: Build with Gradle
5757
run: ./gradlew --no-daemon --scan testcontainers:test --tests '*GenericContainerRuleTest'
5858
- uses: ./.github/actions/setup-junit-report

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ jobs:
9191
- uses: actions/checkout@v5
9292
- uses: ./.github/actions/setup-java
9393
- name: Setup Gradle Build Action
94-
uses: gradle/actions/setup-gradle@v4
94+
uses: gradle/actions/setup-gradle@v5
9595
- id: set-matrix
9696
env:
9797
# Since we override the tests executor,
@@ -126,7 +126,7 @@ jobs:
126126
- uses: actions/checkout@v5
127127
- uses: ./.github/actions/setup-java
128128
- name: Setup Gradle Build Action
129-
uses: gradle/actions/setup-gradle@v4
129+
uses: gradle/actions/setup-gradle@v5
130130
- id: set-matrix
131131
working-directory: ./examples/
132132
env:
@@ -163,7 +163,7 @@ jobs:
163163
- uses: actions/checkout@v5
164164
- uses: ./.github/actions/setup-java
165165
- name: Setup Gradle Build Action
166-
uses: gradle/actions/setup-gradle@v4
166+
uses: gradle/actions/setup-gradle@v5
167167
- id: set-matrix
168168
env:
169169
# Since we override the tests executor,

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
run: docker image prune -af
2222

2323
- name: Setup Gradle Build Action
24-
uses: gradle/actions/setup-gradle@v4
24+
uses: gradle/actions/setup-gradle@v5
2525

2626
- name: Run Gradle Build
2727
run: ./gradlew build --scan --no-daemon -i -x test

.github/workflows/update-gradle-wrapper.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ jobs:
2424
repo-token: ${{ secrets.GITHUB_TOKEN }}
2525
labels: dependencies
2626

27-
- uses: gradle/actions/wrapper-validation@v4
27+
- uses: gradle/actions/wrapper-validation@v5

.sdkmanrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Enable auto-env through the sdkman_auto_env config
22
# Add key=value pairs of SDKs to use below
3-
java=17.0.12-tem
3+
java=17.0.16-tem

build.gradle

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ plugins {
1515
id 'com.gradleup.shadow' version '8.3.9'
1616
id 'me.champeau.gradle.japicmp' version '0.4.3' apply false
1717
id 'com.diffplug.spotless' version '6.22.0' apply false
18-
id 'org.jreleaser' version '1.18.0' apply false
18+
id 'org.jreleaser' version '1.20.0' apply false
1919
}
2020

2121
apply from: "$rootDir/gradle/ci-support.gradle"
@@ -89,6 +89,8 @@ subprojects {
8989
}
9090

9191
test {
92+
useJUnitPlatform()
93+
9294
defaultCharacterEncoding = "UTF-8"
9395
testLogging {
9496
displayGranularity 1
@@ -133,6 +135,10 @@ subprojects {
133135

134136
dependencies {
135137
testImplementation 'ch.qos.logback:logback-classic:1.3.15'
138+
testImplementation 'org.assertj:assertj-core:3.27.4'
139+
testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
140+
141+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'
136142
}
137143

138144
checkstyle {

core/build.gradle

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ shadowJar {
3030
}
3131

3232
task jarFileTest(type: Test) {
33+
useJUnitPlatform()
3334
testClassesDirs = sourceSets.jarFileTest.output.classesDirs
3435
classpath = sourceSets.jarFileTest.runtimeClasspath
3536

@@ -48,13 +49,33 @@ tasks.japicmp {
4849

4950
classExcludes = [
5051
"org.testcontainers.utility.RyukResourceReaper",
52+
"org.testcontainers.containers.FailureDetectingExternalResource",
53+
"org.testcontainers.containers.ComposeContainer",
54+
"org.testcontainers.containers.DockerComposeContainer",
55+
"org.testcontainers.containers.GenericContainer"
5156
]
5257

5358
methodExcludes = [
5459
"org.testcontainers.containers.Container#getDockerClient()",
5560
"org.testcontainers.containers.ContainerState#getDockerClient()",
5661
"org.testcontainers.containers.ContainerState#execInContainer(org.testcontainers.containers.ExecConfig)",
57-
"org.testcontainers.containers.ContainerState#execInContainer(java.nio.charset.Charset,org.testcontainers.containers.ExecConfig)"
62+
"org.testcontainers.containers.ContainerState#execInContainer(java.nio.charset.Charset,org.testcontainers.containers.ExecConfig)",
63+
"org.testcontainers.containers.ComposeContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)",
64+
"org.testcontainers.containers.ComposeContainer#failed(java.lang.Throwable, org.junit.runner.Description)",
65+
"org.testcontainers.containers.ComposeContainer#finished(org.junit.runner.Description)",
66+
"org.testcontainers.containers.ComposeContainer#starting(org.junit.runner.Description)",
67+
"org.testcontainers.containers.ComposeContainer#succeeded(org.junit.runner.Description)",
68+
"org.testcontainers.containers.DockerComposeContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)",
69+
"org.testcontainers.containers.DockerComposeContainer#failed(java.lang.Throwable, org.junit.runner.Description)",
70+
"org.testcontainers.containers.DockerComposeContainer#finished(org.junit.runner.Description)",
71+
"org.testcontainers.containers.DockerComposeContainer#starting(org.junit.runner.Description)",
72+
"org.testcontainers.containers.DockerComposeContainer#succeeded(org.junit.runner.Description)",
73+
"org.testcontainers.containers.GenericContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)",
74+
"org.testcontainers.containers.GenericContainer#failed(java.lang.Throwable, org.junit.runner.Description)",
75+
"org.testcontainers.containers.GenericContainer#finished(org.junit.runner.Description)",
76+
"org.testcontainers.containers.GenericContainer#starting(org.junit.runner.Description)",
77+
"org.testcontainers.containers.GenericContainer#succeeded(org.junit.runner.Description)",
78+
'org.testcontainers.containers.Network$NetworkImpl#after()'
5879
]
5980

6081
fieldExcludes = []
@@ -68,7 +89,6 @@ configurations.all {
6889
}
6990

7091
dependencies {
71-
api 'junit:junit:4.13.2'
7292
api 'org.slf4j:slf4j-api:1.7.36'
7393
compileOnly 'org.jetbrains:annotations:26.0.2-1'
7494
testCompileOnly 'org.jetbrains:annotations:26.0.2-1'
@@ -105,6 +125,9 @@ dependencies {
105125

106126
shaded 'org.zeroturnaround:zt-exec:1.12'
107127

128+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'
129+
130+
testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
108131
testImplementation('com.google.cloud.tools:jib-core:0.27.3') {
109132
exclude group: 'com.google.guava', module: 'guava'
110133
}
@@ -124,7 +147,8 @@ dependencies {
124147

125148
jarFileTestCompileOnly "org.projectlombok:lombok:${lombok.version}"
126149
jarFileTestAnnotationProcessor "org.projectlombok:lombok:${lombok.version}"
127-
jarFileTestImplementation 'junit:junit:4.13.2'
150+
jarFileTestRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'
151+
jarFileTestImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
128152
jarFileTestImplementation 'org.assertj:assertj-core:3.27.6'
129153
jarFileTestImplementation 'org.ow2.asm:asm-debug-all:5.2'
130154
}
@@ -135,3 +159,14 @@ tasks.generatePomFileForMavenJavaPublication.finalizedBy(
135159
]
136160
}
137161
)
162+
163+
compileTestJava {
164+
javaCompiler = javaToolchains.compilerFor {
165+
languageVersion = JavaLanguageVersion.of(17)
166+
}
167+
options.release.set(17)
168+
}
169+
170+
test {
171+
useJUnitPlatform()
172+
}

core/src/jarFileTest/java/org/testcontainers/JarFileShadingTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
package org.testcontainers;
22

33
import org.assertj.core.api.ListAssert;
4-
import org.junit.Test;
4+
import org.junit.jupiter.api.Test;
55

66
import java.io.IOException;
77
import java.nio.file.Files;
88
import java.nio.file.Path;
99

1010
import static org.assertj.core.api.Assertions.assertThat;
1111

12-
public class JarFileShadingTest extends AbstractJarFileTest {
12+
class JarFileShadingTest extends AbstractJarFileTest {
1313

1414
@Test
15-
public void testPackages() throws Exception {
15+
void testPackages() throws Exception {
1616
assertThatFileList(root).containsOnly("org", "META-INF");
1717

1818
assertThatFileList(root.resolve("org")).containsOnly("testcontainers");
1919
}
2020

2121
@Test
22-
public void testMetaInf() throws Exception {
22+
void testMetaInf() throws Exception {
2323
assertThatFileList(root.resolve("META-INF"))
2424
.containsOnly(
2525
"MANIFEST.MF",
@@ -33,7 +33,7 @@ public void testMetaInf() throws Exception {
3333
}
3434

3535
@Test
36-
public void testMetaInfServices() throws Exception {
36+
void testMetaInfServices() throws Exception {
3737
assertThatFileList(root.resolve("META-INF").resolve("services"))
3838
.allMatch(it -> it.startsWith("org.testcontainers."));
3939
}

core/src/jarFileTest/java/org/testcontainers/PublicBinaryAPITest.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import lombok.RequiredArgsConstructor;
44
import org.assertj.core.api.Assertions;
5-
import org.junit.Assume;
6-
import org.junit.Before;
7-
import org.junit.Test;
8-
import org.junit.runner.RunWith;
9-
import org.junit.runners.Parameterized;
10-
import org.junit.runners.Parameterized.Parameters;
5+
import org.junit.jupiter.api.Assumptions;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.params.Parameter;
9+
import org.junit.jupiter.params.ParameterizedClass;
10+
import org.junit.jupiter.params.provider.MethodSource;
1111
import org.objectweb.asm.ClassReader;
1212
import org.objectweb.asm.Opcodes;
1313
import org.objectweb.asm.Type;
@@ -30,23 +30,22 @@
3030

3131
/**
3232
* This test checks that we don't expose any shaded class in our public API.
33-
* We use {@link Parameterized} runner here to create a test per public class in Testcontainers' JAR file.
3433
*/
35-
@RunWith(Parameterized.class)
34+
@ParameterizedClass
35+
@MethodSource("data")
3636
@RequiredArgsConstructor
3737
public class PublicBinaryAPITest extends AbstractJarFileTest {
3838

39-
private static String SHADED_PACKAGE = "org.testcontainers.shaded.";
39+
private static final String SHADED_PACKAGE = "org.testcontainers.shaded.";
4040

41-
private static String SHADED_PACKAGE_PATH = SHADED_PACKAGE.replaceAll("\\.", "/");
41+
private static final String SHADED_PACKAGE_PATH = SHADED_PACKAGE.replaceAll("\\.", "/");
4242

4343
static {
4444
Assertions.registerFormatterForType(ClassNode.class, it -> it.name);
4545
Assertions.registerFormatterForType(FieldNode.class, it -> it.name);
4646
Assertions.registerFormatterForType(MethodNode.class, it -> it.name + it.desc);
4747
}
4848

49-
@Parameters(name = "{0}")
5049
public static List<Object[]> data() throws Exception {
5150
List<Object[]> result = new ArrayList<>();
5251

@@ -85,41 +84,43 @@ public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IO
8584
return result;
8685
}
8786

88-
private final String fileName;
87+
@Parameter(0)
88+
private String fileName;
8989

90-
private final ClassNode classNode;
90+
@Parameter(1)
91+
private ClassNode classNode;
9192

92-
@Before
93+
@BeforeEach
9394
public void setUp() {
9495
switch (classNode.name) {
9596
// Necessary evil
9697
case "org/testcontainers/dockerclient/UnixSocketClientProviderStrategy":
9798
case "org/testcontainers/dockerclient/DockerClientProviderStrategy":
9899
case "org/testcontainers/dockerclient/WindowsClientProviderStrategy":
99100
case "org/testcontainers/utility/DynamicPollInterval":
100-
Assume.assumeTrue(false);
101+
Assumptions.assumeTrue(false);
101102
}
102103
}
103104

104105
@Test
105-
public void testSuperClass() {
106+
void testSuperClass() {
106107
assertThat(classNode.superName).doesNotStartWith(SHADED_PACKAGE_PATH);
107108
}
108109

109110
@Test
110-
public void testInterfaces() {
111+
void testInterfaces() {
111112
assertThat(classNode.interfaces).allSatisfy(it -> assertThat(it).doesNotStartWith(SHADED_PACKAGE_PATH));
112113
}
113114

114115
@Test
115-
public void testMethodReturnTypes() {
116+
void testMethodReturnTypes() {
116117
assertThat(classNode.methods)
117118
.filteredOn(it -> (it.access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) != 0)
118119
.allSatisfy(it -> assertThat(Type.getReturnType(it.desc).getClassName()).doesNotStartWith(SHADED_PACKAGE));
119120
}
120121

121122
@Test
122-
public void testMethodArguments() {
123+
void testMethodArguments() {
123124
assertThat(classNode.methods)
124125
.filteredOn(it -> (it.access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) != 0)
125126
.allSatisfy(method -> {
@@ -130,7 +131,7 @@ public void testMethodArguments() {
130131
}
131132

132133
@Test
133-
public void testFields() {
134+
void testFields() {
134135
assertThat(classNode.fields)
135136
.filteredOn(it -> (it.access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) != 0)
136137
.allSatisfy(it -> assertThat(Type.getType(it.desc).getClassName()).doesNotStartWith(SHADED_PACKAGE));

core/src/main/java/org/testcontainers/containers/ComposeContainer.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import lombok.NonNull;
66
import lombok.extern.slf4j.Slf4j;
77
import org.apache.commons.lang3.SystemUtils;
8-
import org.junit.runner.Description;
9-
import org.junit.runners.model.Statement;
108
import org.testcontainers.containers.output.OutputFrame;
119
import org.testcontainers.containers.wait.strategy.Wait;
1210
import org.testcontainers.containers.wait.strategy.WaitStrategy;
@@ -31,7 +29,7 @@
3129
* It uses either Compose V2 contained within the Docker binary, or a containerised version of Compose V2.
3230
*/
3331
@Slf4j
34-
public class ComposeContainer extends FailureDetectingExternalResource implements Startable {
32+
public class ComposeContainer implements Startable {
3533

3634
private final Map<String, Integer> scalingPreferences = new HashMap<>();
3735

@@ -93,32 +91,6 @@ public ComposeContainer(String identifier, List<File> composeFiles) {
9391
this.project = this.composeDelegate.getProject();
9492
}
9593

96-
@Override
97-
@Deprecated
98-
public Statement apply(Statement base, Description description) {
99-
return super.apply(base, description);
100-
}
101-
102-
@Override
103-
@Deprecated
104-
public void starting(Description description) {
105-
start();
106-
}
107-
108-
@Override
109-
@Deprecated
110-
protected void succeeded(Description description) {}
111-
112-
@Override
113-
@Deprecated
114-
protected void failed(Throwable e, Description description) {}
115-
116-
@Override
117-
@Deprecated
118-
public void finished(Description description) {
119-
stop();
120-
}
121-
12294
@Override
12395
public void start() {
12496
synchronized (MUTEX) {

0 commit comments

Comments
 (0)