Skip to content

Commit 71a0679

Browse files
authored
Run tests using shaded dependencies (#5146)
* Test shaded JARs * Find shaded projects recursively * Add missing space * fix core tests * fix HiveMQ module * Simplify the HiveMQ workaround * Add a comment that explains why we pin Jackson version in k3s
1 parent 30e8635 commit 71a0679

File tree

4 files changed

+42
-17
lines changed

4 files changed

+42
-17
lines changed

core/src/test/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategyTest.java

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

33
import com.github.dockerjava.core.DefaultDockerClientConfig;
4-
import com.github.dockerjava.core.LocalDirectorySSLConfig;
54
import com.github.dockerjava.transport.SSLConfig;
5+
import org.assertj.core.api.Assertions;
66
import org.junit.Before;
77
import org.junit.Rule;
88
import org.junit.Test;
@@ -16,15 +16,12 @@
1616
import java.net.URI;
1717
import java.nio.file.Files;
1818
import java.nio.file.Path;
19-
import java.util.Collections;
20-
import java.util.HashMap;
21-
import java.util.Map;
19+
import java.util.Properties;
2220

2321
import static org.junit.Assert.assertEquals;
2422
import static org.junit.Assert.assertFalse;
2523
import static org.junit.Assert.assertNotNull;
2624
import static org.junit.Assert.assertTrue;
27-
import static org.mockito.ArgumentMatchers.any;
2825
import static org.mockito.ArgumentMatchers.anyString;
2926
import static org.mockito.ArgumentMatchers.eq;
3027
import static org.mockito.ArgumentMatchers.isNull;
@@ -93,21 +90,24 @@ public void testWhenDockerHostAndSSLConfigPresent() throws IOException {
9390
assertEquals("tcp://1.2.3.4:2375", transportConfig.getDockerHost().toString());
9491

9592
SSLConfig sslConfig = transportConfig.getSslConfig();
96-
assertNotNull(sslConfig);
97-
assertTrue(sslConfig instanceof LocalDirectorySSLConfig);
98-
assertEquals(tempDirPath, ((LocalDirectorySSLConfig) sslConfig).getDockerCertPath());
93+
Assertions.assertThat(sslConfig)
94+
.extracting("dockerCertPath")
95+
.isEqualTo(tempDirPath);
9996
}
10097

10198
@Test
10299
public void applicableWhenIgnoringUserPropertiesAndConfigured() {
103100
Mockito.doReturn("autoIgnoringUserProperties").when(TestcontainersConfiguration.getInstance()).getEnvVarOrProperty(eq("dockerconfig.source"), anyString());
104101

105-
DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig.createDefaultConfigBuilder()
106-
.withDockerHost("tcp://1.2.3.4:2375");
102+
Properties oldProperties = System.getProperties();
103+
try {
104+
System.setProperty("DOCKER_HOST", "tcp://1.2.3.4:2375");
105+
EnvironmentAndSystemPropertyClientProviderStrategy strategy = new EnvironmentAndSystemPropertyClientProviderStrategy();
107106

108-
EnvironmentAndSystemPropertyClientProviderStrategy strategy = new EnvironmentAndSystemPropertyClientProviderStrategy(configBuilder);
109-
110-
assertTrue(strategy.isApplicable());
107+
assertTrue(strategy.isApplicable());
108+
} finally {
109+
System.setProperties(oldProperties);
110+
}
111111
}
112112

113113
@Test

gradle/shading.gradle

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,16 @@ project.afterEvaluate {
5555

5656
tasks.shadowJar.relocate(pkg, "org.testcontainers.shaded.${pkg}")
5757
}
58+
59+
// Add shaded JARs first
60+
tasks.test.classpath = findShadedProjects(project)
61+
.plus(project)
62+
.sum { it.tasks.findByName("shadowJar").outputs.files }
63+
.plus(sourceSets.test.runtimeClasspath)
64+
}
65+
66+
static Set<Project> findShadedProjects(Project project) {
67+
Set<Project> dependencies = project.configurations.api.dependencies.withType(ProjectDependency)*.dependencyProject
68+
69+
return dependencies + dependencies.collectMany { it -> findShadedProjects(it) }
5870
}

modules/hivemq/src/main/java/org/testcontainers/hivemq/HiveMQExtension.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
import javassist.NotFoundException;
55
import lombok.Getter;
66
import org.apache.commons.io.FileUtils;
7+
import org.jboss.shrinkwrap.api.ExtensionLoader;
78
import org.jboss.shrinkwrap.api.ShrinkWrap;
89
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
910
import org.jboss.shrinkwrap.api.spec.JavaArchive;
11+
import org.jboss.shrinkwrap.impl.base.exporter.zip.ZipExporterImpl;
12+
import org.jboss.shrinkwrap.impl.base.spec.JavaArchiveImpl;
1013
import org.jetbrains.annotations.NotNull;
1114
import org.jetbrains.annotations.Nullable;
1215
import org.slf4j.Logger;
@@ -101,9 +104,16 @@ private HiveMQExtension(
101104
}
102105
}
103106

104-
final JavaArchive javaArchive =
105-
ShrinkWrap.create(JavaArchive.class)
106-
.addAsServiceProvider(EXTENSION_MAIN_CLASS_NAME, hiveMQExtension.getMainClass().getName());
107+
// Shadow Gradle plugin doesn't know how to handle ShrinkWrap's SPI definitions
108+
// This workaround creates the mappings programmatically
109+
// TODO write a custom Gradle Shadow transformer?
110+
ExtensionLoader extensionLoader = ShrinkWrap.getDefaultDomain().getConfiguration().getExtensionLoader();
111+
extensionLoader.addOverride(JavaArchive.class, JavaArchiveImpl.class);
112+
extensionLoader.addOverride(ZipExporter.class, ZipExporterImpl.class);
113+
114+
final JavaArchive javaArchive = ShrinkWrap
115+
.create(JavaArchive.class)
116+
.addAsServiceProvider(EXTENSION_MAIN_CLASS_NAME, hiveMQExtension.getMainClass().getName());
107117

108118
putSubclassesIntoJar(hiveMQExtension.getId(), hiveMQExtension.getMainClass(), javaArchive);
109119
for (final Class<?> additionalClass : hiveMQExtension.getAdditionalClasses()) {

modules/k3s/build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ description = "Testcontainers :: K3S"
33
dependencies {
44
api project(":testcontainers")
55

6-
shaded 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.1'
6+
// https://youtu.be/otCpCn0l4Wo
7+
// The core module depends on jackson-databind 2.8.x for backward compatibility.
8+
// Any >2.8 version here is not compatible with jackson-databind 2.8.x.
9+
shaded 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.8'
710

811
testImplementation 'io.fabric8:kubernetes-client:5.11.0'
912
testImplementation 'io.kubernetes:client-java:14.0.0'

0 commit comments

Comments
 (0)