Skip to content

Commit 7994a71

Browse files
authored
Merge branch 'main' into RyukResourceReaper-debug
2 parents a2e7ecc + 43c6a97 commit 7994a71

File tree

79 files changed

+178
-278
lines changed

Some content is hidden

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

79 files changed

+178
-278
lines changed

.github/dependabot.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ updates:
1818
update-types: [ "version-update:semver-major" ]
1919
- dependency-name: "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
2020
update-types: [ "version-update:semver-minor", "version-update:semver-patch" ]
21+
- dependency-name: "org.junit.jupiter:junit-jupiter"
22+
update-types: [ "version-update:semver-major" ]
23+
- dependency-name: "org.junit.platform:junit-platform-launcher"
24+
update-types: [ "version-update:semver-major" ]
2125
- package-ecosystem: "gradle"
2226
directory: "/"
2327
allow:
@@ -30,6 +34,10 @@ updates:
3034
ignore:
3135
- dependency-name: "com.gradleup.shadow"
3236
update-types: [ "version-update:semver-major" ]
37+
- dependency-name: "org.junit.jupiter:junit-jupiter"
38+
update-types: [ "version-update:semver-major" ]
39+
- dependency-name: "org.junit.platform:junit-platform-launcher"
40+
update-types: [ "version-update:semver-major" ]
3341

3442
# Explicit entry for each module
3543
- package-ecosystem: "gradle"
@@ -143,6 +151,8 @@ updates:
143151
ignore:
144152
- dependency-name: "org.apache.tomcat:tomcat-jdbc"
145153
update-types: [ "version-update:semver-minor" ]
154+
- dependency-name: "org.junit.jupiter:junit-jupiter"
155+
update-types: [ "version-update:semver-major" ]
146156
- package-ecosystem: "gradle"
147157
directory: "/modules/junit-jupiter"
148158
schedule:
@@ -151,6 +161,8 @@ updates:
151161
ignore:
152162
- dependency-name: "org.mockito:mockito-core"
153163
update-types: [ "version-update:semver-major" ]
164+
- dependency-name: "org.junit:junit-bom"
165+
update-types: [ "version-update:semver-major" ]
154166
- package-ecosystem: "gradle"
155167
directory: "/modules/k3s"
156168
schedule:
@@ -304,6 +316,8 @@ updates:
304316
ignore:
305317
- dependency-name: "io.r2dbc:r2dbc-spi"
306318
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
319+
- dependency-name: "org.junit.jupiter:junit-jupiter"
320+
update-types: [ "version-update:semver-major" ]
307321
- package-ecosystem: "gradle"
308322
directory: "/modules/rabbitmq"
309323
schedule:
@@ -347,6 +361,9 @@ updates:
347361
directory: "/modules/spock"
348362
schedule:
349363
interval: "monthly"
364+
ignore:
365+
- dependency-name: "org.junit:junit-bom"
366+
update-types: [ "version-update:semver-major" ]
350367
open-pull-requests-limit: 10
351368
- package-ecosystem: "gradle"
352369
directory: "/modules/tidb"
@@ -412,6 +429,12 @@ updates:
412429
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
413430
- dependency-name: "com.hazelcast:hazelcast"
414431
update-types: [ "version-update:semver-minor" ]
432+
- dependency-name: "org.junit.jupiter:junit-jupiter"
433+
update-types: [ "version-update:semver-major" ]
434+
- dependency-name: "org.junit.platform:junit-platform-launcher"
435+
update-types: [ "version-update:semver-major" ]
436+
- dependency-name: "com.gradleup.shadow"
437+
update-types: [ "version-update:semver-major" ]
415438

416439
# Smoke test
417440
- package-ecosystem: "gradle"
@@ -424,6 +447,12 @@ updates:
424447
update-types: [ "version-update:semver-minor" ]
425448
- dependency-name: "com.diffplug.spotless"
426449
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
450+
- dependency-name: "org.junit.jupiter:junit-jupiter"
451+
update-types: [ "version-update:semver-major" ]
452+
- dependency-name: "org.junit.platform:junit-platform-launcher"
453+
update-types: [ "version-update:semver-major" ]
454+
- dependency-name: "com.gradleup.shadow"
455+
update-types: [ "version-update:semver-major" ]
427456

428457
# GitHub Actions
429458
- package-ecosystem: "github-actions"

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ jobs:
9898
# we should not push empty results to the cache
9999
READ_ONLY_REMOTE_GRADLE_CACHE: true
100100
run: |
101-
TASKS=$(./gradlew --no-daemon --parallel -q testMatrix | jq 'del(.[] | select(. == ":testcontainers-databend:check" or . == ":testcontainers:check" or startswith(":docs:")))' --compact-output)
101+
TASKS=$(./gradlew --no-daemon --parallel -q testMatrix | jq 'del(.[] | select(. == ":testcontainers:check" or startswith(":docs:")))' --compact-output)
102102
echo $TASKS
103103
echo "matrix={\"gradle_args\":$TASKS}" >> $GITHUB_OUTPUT
104104
check:

.github/workflows/moby-latest.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ name: Tests against recent Docker engine releases
22

33
on:
44
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: 'Docker version'
8+
required: false
9+
default: 'latest'
10+
type: string
511
schedule:
612
# nightly build, at 23:59 CEST
713
- cron: '59 23 * * *'
@@ -14,9 +20,9 @@ jobs:
1420
strategy:
1521
matrix:
1622
include:
17-
- { install-docker-type: "STABLE", channel: stable, rootless: false }
18-
- { install-docker-type: "ROOTLESS", channel: stable, rootless: true }
19-
- { install-docker-type: "ROOTFUL", channel: test, rootless: false }
23+
- { install-docker-type: "STABLE", version: "${{ inputs.version }}", channel: stable, rootless: false }
24+
- { install-docker-type: "ROOTLESS", version: "${{ inputs.version }}", channel: stable, rootless: true }
25+
- { install-docker-type: "ROOTFUL", version: edge, channel: test, rootless: false }
2026
name: "Core tests using Docker ${{ matrix.install-docker-type }} (channel ${{ matrix.channel }})"
2127
runs-on: ubuntu-22.04
2228
continue-on-error: true
@@ -28,6 +34,7 @@ jobs:
2834
id: setup_docker
2935
uses: docker/setup-docker-action@v4
3036
with:
37+
version: ${{ matrix.version }}
3138
channel: ${{ matrix.channel }}
3239
rootless: ${{ matrix.rootless }}
3340

.github/workflows/update-docs-version.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ jobs:
2020
ref: main
2121
- name: Update latest_version property in mkdocs.yml
2222
run: |
23-
sed -i "s/latest_version: .*/latest_version: ${GITHUB_REF##*/}/g" mkdocs.yml
23+
sed -i "s/latest_version: .*/latest_version: ${GITHUB_REF_NAME}/g" mkdocs.yml
2424
git diff
2525
- name: Create Pull Request
2626
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v3.10.1
2727
with:
28-
title: Update docs version to ${GITHUB_REF##*/}
28+
title: Update docs version to ${{ github.ref_name }}
2929
body: |
30-
Update docs version to ${GITHUB_REF##*/}
30+
Update docs version to ${{ github.ref_name }}
3131
skip-checks: true
3232
branch: update-docs-version
3333
delete-branch: true

.github/workflows/update-testcontainers-version.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ jobs:
2020
ref: main
2121
- name: Update testcontainers.version property in gradle.properties
2222
run: |
23-
sed -i "s/^testcontainers\.version=.*/testcontainers\.version=${GITHUB_REF##*/}/g" gradle.properties
23+
sed -i "s/^testcontainers\.version=.*/testcontainers\.version=${GITHUB_REF_NAME}/g" gradle.properties
2424
git diff
2525
- name: Create Pull Request
2626
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v3.10.1
2727
with:
28-
title: Update testcontainers version to ${GITHUB_REF##*/}
28+
title: Update testcontainers version to ${{ github.ref_name }}
2929
body: |
30-
Update testcontainers version to ${GITHUB_REF##*/}
30+
Update testcontainers version to ${{ github.ref_name }}
3131
branch: update-tc-version
3232
delete-branch: true

core/build.gradle

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -47,36 +47,9 @@ tasks.japicmp {
4747
"org.testcontainers.shaded.*",
4848
]
4949

50-
classExcludes = [
51-
"org.testcontainers.utility.RyukResourceReaper",
52-
"org.testcontainers.containers.FailureDetectingExternalResource",
53-
"org.testcontainers.containers.ComposeContainer",
54-
"org.testcontainers.containers.DockerComposeContainer",
55-
"org.testcontainers.containers.GenericContainer"
56-
]
50+
classExcludes = []
5751

58-
methodExcludes = [
59-
"org.testcontainers.containers.Container#getDockerClient()",
60-
"org.testcontainers.containers.ContainerState#getDockerClient()",
61-
"org.testcontainers.containers.ContainerState#execInContainer(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()'
79-
]
52+
methodExcludes = []
8053

8154
fieldExcludes = []
8255
}
@@ -107,8 +80,8 @@ dependencies {
10780

10881
shaded 'org.awaitility:awaitility:4.3.0'
10982

110-
api platform('com.github.docker-java:docker-java-bom:3.6.0')
111-
shaded platform('com.github.docker-java:docker-java-bom:3.6.0')
83+
api platform('com.github.docker-java:docker-java-bom:3.7.0')
84+
shaded platform('com.github.docker-java:docker-java-bom:3.7.0')
11285

11386
api "com.github.docker-java:docker-java-api"
11487

core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -401,21 +401,34 @@ public static DockerClient getClientForConfig(TransportConfig transportConfig) {
401401
throw new IllegalArgumentException("Unknown transport type '" + transportType + "'");
402402
}
403403

404-
DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig.createDefaultConfigBuilder();
404+
DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig
405+
.createDefaultConfigBuilder()
406+
.withDockerHost(transportConfig.getDockerHost().toString());
405407

406-
if (configBuilder.build().getApiVersion() == RemoteApiVersion.UNKNOWN_VERSION) {
407-
configBuilder.withApiVersion(RemoteApiVersion.VERSION_1_32);
408-
}
409408
Map<String, String> headers = new HashMap<>();
410409
headers.put("x-tc-sid", DockerClientFactory.SESSION_ID);
411410
headers.put("User-Agent", String.format("tc-java/%s", DockerClientFactory.TESTCONTAINERS_VERSION));
412411

413-
return DockerClientImpl.getInstance(
414-
new AuthDelegatingDockerClientConfig(
415-
configBuilder.withDockerHost(transportConfig.getDockerHost().toString()).build()
416-
),
417-
new HeadersAddingDockerHttpClient(dockerHttpClient, headers)
418-
);
412+
try {
413+
if (configBuilder.build().getApiVersion() == RemoteApiVersion.UNKNOWN_VERSION) {
414+
configBuilder.withApiVersion(RemoteApiVersion.VERSION_1_44);
415+
}
416+
DockerClient client = DockerClientImpl.getInstance(
417+
new AuthDelegatingDockerClientConfig(configBuilder.build()),
418+
new HeadersAddingDockerHttpClient(dockerHttpClient, headers)
419+
);
420+
log.debug("Pinging Docker API version 1.44.");
421+
client.pingCmd().exec();
422+
return client;
423+
} catch (Exception ex) {
424+
log.debug("Fallback to Docker API version 1.32.");
425+
return DockerClientImpl.getInstance(
426+
new AuthDelegatingDockerClientConfig(
427+
configBuilder.withApiVersion(RemoteApiVersion.VERSION_1_32).build()
428+
),
429+
new HeadersAddingDockerHttpClient(dockerHttpClient, headers)
430+
);
431+
}
419432
}
420433

421434
public synchronized String getDockerHostIpAddress() {

core/src/test/java/org/testcontainers/containers/ComposeContainerWithServicesTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class ComposeContainerWithServicesTest {
3131
@Test
3232
void testDesiredSubsetOfServicesAreStarted() {
3333
try (
34-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE)
34+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), SIMPLE_COMPOSE_FILE)
3535
.withServices("redis")
3636
) {
3737
compose.start();
@@ -43,7 +43,7 @@ void testDesiredSubsetOfServicesAreStarted() {
4343
@Test
4444
void testDesiredSubsetOfScaledServicesAreStarted() {
4545
try (
46-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE)
46+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), SIMPLE_COMPOSE_FILE)
4747
.withScaledService("redis", 2)
4848
) {
4949
compose.start();
@@ -55,7 +55,7 @@ void testDesiredSubsetOfScaledServicesAreStarted() {
5555
@Test
5656
void testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted() {
5757
try (
58-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE)
58+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), SIMPLE_COMPOSE_FILE)
5959
.withServices("redis")
6060
.withScaledService("redis", 2)
6161
) {
@@ -68,7 +68,7 @@ void testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted() {
6868
@Test
6969
void testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted() {
7070
try (
71-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE)
71+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), SIMPLE_COMPOSE_FILE)
7272
.withServices("other")
7373
.withScaledService("redis", 2)
7474
) {
@@ -81,7 +81,7 @@ void testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted() {
8181
@Test
8282
void testAllServicesAreStartedIfNotSpecified() {
8383
try (
84-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), SIMPLE_COMPOSE_FILE)
84+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), SIMPLE_COMPOSE_FILE)
8585
) {
8686
compose.start();
8787

@@ -93,7 +93,7 @@ void testAllServicesAreStartedIfNotSpecified() {
9393
void testScaleInComposeFileIsRespected() {
9494
try (
9595
ComposeContainer compose = new ComposeContainer(
96-
DockerImageName.parse("docker:24.0.2"),
96+
DockerImageName.parse("docker:25.0.5"),
9797
COMPOSE_FILE_WITH_INLINE_SCALE
9898
)
9999
) {
@@ -110,7 +110,7 @@ void testStartupTimeoutSetsTheHighestTimeout() {
110110
catchThrowable(() -> {
111111
try (
112112
ComposeContainer compose = new ComposeContainer(
113-
DockerImageName.parse("docker:24.0.2"),
113+
DockerImageName.parse("docker:25.0.5"),
114114
SIMPLE_COMPOSE_FILE
115115
)
116116
.withServices("redis")
@@ -133,7 +133,7 @@ void testStartupTimeoutSetsTheHighestTimeout() {
133133
void testWaitingForHealthcheck() {
134134
try (
135135
ComposeContainer compose = new ComposeContainer(
136-
DockerImageName.parse("docker:24.0.2"),
136+
DockerImageName.parse("docker:25.0.5"),
137137
COMPOSE_FILE_WITH_HEALTHCHECK
138138
)
139139
.waitingFor("redis", Wait.forHealthcheck().withStartupTimeout(Duration.ofMinutes(2)))
@@ -148,7 +148,7 @@ void testWaitingForHealthcheck() {
148148
void testWaitingForHealthcheckWithRestartDoesNotCrash() {
149149
try (
150150
ComposeContainer compose = new ComposeContainer(
151-
DockerImageName.parse("docker:24.0.2"),
151+
DockerImageName.parse("docker:25.0.5"),
152152
COMPOSE_FILE_WITH_HEALTHCHECK
153153
)
154154
.waitingFor("redis", Wait.forHealthcheck().withStartupTimeout(Duration.ofMinutes(1)))

core/src/test/java/org/testcontainers/junit/ComposeContainerOverrideTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ComposeContainerOverrideTest {
1919
@Test
2020
void readEnvironment() {
2121
try (
22-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), BASE)
22+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), BASE)
2323
.withExposedService("redis", 6379)
2424
) {
2525
compose.start();
@@ -34,7 +34,7 @@ void readEnvironment() {
3434
@Test
3535
void resetEnvironment() {
3636
try (
37-
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:24.0.2"), BASE, OVERRIDE)
37+
ComposeContainer compose = new ComposeContainer(DockerImageName.parse("docker:25.0.5"), BASE, OVERRIDE)
3838
.withExposedService("redis", 6379)
3939
) {
4040
compose.start();

core/src/test/java/org/testcontainers/junit/ComposeContainerPortViaEnvTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class ComposeContainerPortViaEnvTest extends BaseComposeTest {
1010

1111
@AutoClose
1212
public ComposeContainer environment = new ComposeContainer(
13-
DockerImageName.parse("docker:24.0.2"),
13+
DockerImageName.parse("docker:25.0.5"),
1414
new File("src/test/resources/v2-compose-test-port-via-env.yml")
1515
)
1616
.withExposedService("redis-1", REDIS_PORT)

0 commit comments

Comments
 (0)