Skip to content

Commit 35ff928

Browse files
authored
109 integration tests using docker fail with mac m1 arm (#114)
- Fix testcontainers for integration tests - startDockerContainer takes http endpoint for up check - Exclude jna from spring-shell as more recent version is required by testcontainers - Bump rocksdbjni to 7.1.2 - Use testcontainers 9baede using jitpack to solve testcontainers/testcontainers-java#5121 - Fix Mule integration tests by excluding WMQ when running on Mac M1 - Move dependency to RocksDB into openrewrite module
1 parent 5b21820 commit 35ff928

File tree

10 files changed

+88
-44
lines changed

10 files changed

+88
-44
lines changed

applications/spring-shell/pom.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
<dependency>
6767
<groupId>org.springframework.shell</groupId>
6868
<artifactId>spring-shell-starter</artifactId>
69+
<exclusions>
70+
<exclusion>
71+
<groupId>net.java.dev.jna</groupId>
72+
<artifactId>jna</artifactId>
73+
</exclusion>
74+
</exclusions>
6975
</dependency>
7076
<dependency>
7177
<groupId>org.springframework.boot</groupId>
@@ -79,9 +85,9 @@
7985
<scope>test</scope>
8086
</dependency>
8187
<dependency>
82-
<groupId>org.testcontainers</groupId>
83-
<artifactId>junit-jupiter</artifactId>
84-
<version>1.16.3</version>
88+
<groupId>com.github.testcontainers.testcontainers-java</groupId>
89+
<artifactId>testcontainers</artifactId>
90+
<version>${testcontainers.version}</version>
8591
<scope>test</scope>
8692
</dependency>
8793
<dependency>

applications/spring-shell/src/test/java/org/springframework/sbm/BootifyAnnotatedServletsIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ void happyPath() {
110110

111111
executeMavenGoals(getTestDir(), "package", "spring-boot:build-image");
112112

113-
int port = startDockerContainer("jboss-sample:1.0.0", 8080);
113+
Integer port = startDockerContainer("jboss-sample:1.0.0", "/HelloWorld", 8080);
114114

115115
TestRestTemplate testRestTemplate = new TestRestTemplate();
116116
String response = testRestTemplate.getForObject("http://localhost:" + port + "/HelloWorld", String.class);

applications/spring-shell/src/test/java/org/springframework/sbm/BootifySimpleJeeAppIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ void migrateSimpleJeeApp() {
9191
assertThat(ejbJarXml).doesNotExist();
9292

9393
executeMavenGoals(getTestDir(), "clean", "package", "spring-boot:build-image");
94-
int port = startDockerContainer("jee-app:8.0.5-SNAPSHOT", 8080);
94+
Integer port = startDockerContainer("jee-app:8.0.5-SNAPSHOT", "/HelloWorld", 8080);
9595

9696
TestRestTemplate testRestTemplate = new TestRestTemplate();
9797

applications/spring-shell/src/test/java/org/springframework/sbm/BootifySimpleMuleAppIntegrationTest.java

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,17 @@
1616
package org.springframework.sbm;
1717

1818
import com.rabbitmq.client.Channel;
19-
import org.junit.jupiter.api.BeforeEach;
20-
import org.junit.jupiter.api.Tag;
21-
import org.junit.jupiter.api.Test;
19+
import org.jruby.RubyProcess;
20+
import org.junit.jupiter.api.*;
21+
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
22+
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
23+
import org.junit.jupiter.api.condition.DisabledOnOs;
2224
import org.springframework.http.HttpStatus;
2325
import org.springframework.http.ResponseEntity;
2426
import org.springframework.sbm.mule.amqp.RabbitMqChannelBuilder;
2527
import org.springframework.sbm.mule.amqp.RabbitMqListener;
26-
import org.springframework.sbm.mule.wmq.WmqListener;
27-
import org.springframework.sbm.mule.wmq.WmqSender;
28+
import org.springframework.sbm.mule.wmq.JmsListener;
29+
import org.springframework.sbm.mule.wmq.JmsSender;
2830
import org.springframework.web.client.RestTemplate;
2931
import org.testcontainers.containers.Network;
3032

@@ -37,12 +39,14 @@
3739

3840
import static org.assertj.core.api.Assertions.assertThat;
3941

42+
@TestMethodOrder(MethodOrderer.MethodName.class)
4043
public class BootifySimpleMuleAppIntegrationTest extends IntegrationTestBaseClass {
4144

4245
private static final String FIRST_QUEUE_NAME = "sbm-integration-queue-one";
4346
private static final String SECOND_QUEUE_NAME = "sbm-integration-queue-two";
4447
private String messageContent;
4548
private final RestTemplate restTemplate = new RestTemplate();
49+
private static RunningNetworkedContainer rabbitMqContainer;
4650

4751
@Override
4852
protected String getTestSubDir() {
@@ -56,23 +60,47 @@ public void setUp() {
5660
messageContent = "Integration test message " + UUID.randomUUID();
5761
}
5862

63+
@BeforeAll
64+
public static void beforeAll() {
65+
IntegrationTestBaseClass.beforeAll();
66+
// start RabbitMQ
67+
rabbitMqContainer = startDockerContainer(
68+
new NetworkedContainer(
69+
"rabbitmq:3-management",
70+
List.of(5672, 15672),
71+
"amqphost"),
72+
null,
73+
Collections.emptyMap());
74+
if(!rabbitMqContainer.getContainer().isRunning()) {
75+
throw new RuntimeException("RabbitMQ container could not be started");
76+
}
77+
}
78+
79+
@AfterAll
80+
public static void afterAll() {
81+
if(rabbitMqContainer != null && rabbitMqContainer.getContainer() != null) {
82+
rabbitMqContainer.getContainer().stop();
83+
}
84+
}
85+
86+
@Test
87+
@Tag("integration")
88+
@DisabledIfSystemProperty(named= "os.arch", matches = "aarch64", disabledReason = "imbcom/mq image not supported with Apple Silicon")
89+
void t1_testWebsphereMqMigration() throws JMSException, InterruptedException {
90+
checkWmqIntegration(rabbitMqContainer.getNetwork());
91+
}
92+
5993
@Test
6094
@Tag("integration")
61-
public void springIntegrationWorks() throws IOException, TimeoutException, InterruptedException, JMSException {
95+
public void t0_springIntegrationWorks() throws IOException, TimeoutException, InterruptedException {
6296
intializeTestProject();
6397
scanProject();
6498
applyRecipe("initialize-spring-boot-migration");
6599
applyRecipe("migrate-mule-to-boot");
66100

67101
executeMavenGoals(getTestDir(), "clean", "package", "spring-boot:build-image");
68102

69-
RunningNetworkedContainer rabbitMqContainer = startDockerContainer(
70-
new NetworkedContainer(
71-
"rabbitmq:3-management",
72-
List.of(5672, 15672),
73-
"amqphost"),
74-
null,
75-
Collections.emptyMap());
103+
76104
int amqpPort = rabbitMqContainer.getContainer().getMappedPort(5672);
77105
Channel ampqChannel = new RabbitMqChannelBuilder().initializeChannelAndQueues(amqpPort);
78106

@@ -84,9 +112,11 @@ public void springIntegrationWorks() throws IOException, TimeoutException, Inter
84112
checkSendHttpMessage(container.getContainer().getMappedPort(9081));
85113
checkInboundGatewayHttpMessage(container.getContainer().getMappedPort(9081));
86114
checkRabbitMqIntegration(ampqChannel);
87-
checkWmqIntegration(rabbitMqContainer.getNetwork());
88115
}
89116

117+
118+
119+
90120
private void checkRabbitMqIntegration(Channel amqpChannel)
91121
throws IOException, InterruptedException {
92122

@@ -101,7 +131,7 @@ private void checkRabbitMqIntegration(Channel amqpChannel)
101131
assertThat(latch).isTrue();
102132
}
103133

104-
private RunningNetworkedContainer startWmqContainer(Network rabbitContainerNetwork) {
134+
private RunningNetworkedContainer startJmsContainer(Network rabbitContainerNetwork) {
105135
Map<String, String> wmqMap = new HashMap<>();
106136
wmqMap.put("LICENSE", "accept");
107137
wmqMap.put("MQ_QMGR_NAME", "QM1");
@@ -116,16 +146,16 @@ private RunningNetworkedContainer startWmqContainer(Network rabbitContainerNetwo
116146
}
117147

118148
private void checkWmqIntegration(Network rabbitMqNetwork) throws InterruptedException, JMSException {
119-
RunningNetworkedContainer wmqContainer = startWmqContainer(rabbitMqNetwork);
120-
WmqSender wmqSender = new WmqSender();
149+
RunningNetworkedContainer jmsContainer = startJmsContainer(rabbitMqNetwork);
150+
JmsSender jmsSender = new JmsSender();
121151
CountDownLatch latch = new CountDownLatch(1);
122-
WmqListener wmqListener = new WmqListener();
123-
int mappedPort = wmqContainer.getContainer().getMappedPort(1414);
152+
JmsListener wmqListener = new JmsListener();
153+
int mappedPort = jmsContainer.getContainer().getMappedPort(1414);
124154
wmqListener.listenForMessage(mappedPort, "DEV.QUEUE.2", message -> {
125155
System.out.println(" [x] Received wmq message: '" + message + "'");
126156
latch.countDown();
127157
});
128-
wmqSender.sendMessage(mappedPort, "DEV.QUEUE.1", "Test WMQ message");
158+
jmsSender.sendMessage(mappedPort, "DEV.QUEUE.1", "Test WMQ message");
129159
boolean latchResult = latch.await(1000000, TimeUnit.MILLISECONDS);
130160
assertThat(latchResult).isTrue();
131161
}

applications/spring-shell/src/test/java/org/springframework/sbm/IntegrationTestBaseClass.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.springframework.util.SocketUtils;
4242
import org.testcontainers.containers.GenericContainer;
4343
import org.testcontainers.containers.Network;
44+
import org.testcontainers.containers.wait.strategy.Wait;
4445
import org.testcontainers.utility.DockerImageName;
4546

4647
import java.io.File;
@@ -78,14 +79,14 @@ public abstract class IntegrationTestBaseClass {
7879
/**
7980
* Points to the source root directory where example projects are expected.
8081
*
81-
* @see {@link #getTestSubDir()}.
82+
* See {@link #getTestSubDir()}.
8283
*/
8384
public static final String TESTCODE_DIR = "src/test/resources/testcode/";
8485

8586
/**
8687
* Points to the target root directory where example projects will be copied to.
8788
*
88-
* @see {@link #getTestSubDir()}.
89+
* See {@link #getTestSubDir()}.
8990
*/
9091
public static final String INTEGRATION_TEST_DIR = "./target/sbm-integration-test/";
9192
@Autowired
@@ -105,7 +106,8 @@ public abstract class IntegrationTestBaseClass {
105106
@BeforeAll
106107
public static void beforeAll() {
107108
if (System.getenv("MAVEN_HOME") == null) {
108-
throw new RuntimeException("You must set $MAVEN_HOME on your system for the integration test to run.");
109+
System.err.println("You must set $MAVEN_HOME on your system for the integration test to run.");
110+
throw new RuntimeException();
109111
}
110112
System.setProperty("maven.home", System.getenv("MAVEN_HOME"));
111113
}
@@ -233,9 +235,6 @@ protected void executeMavenGoals(Path executionDir, String... goals) {
233235
}
234236
}
235237

236-
/**
237-
*
238-
*/
239238
protected Path writeFile(String content, String fileName) {
240239
try {
241240
return Files.writeString(getTestDir().resolve(fileName), content);
@@ -315,14 +314,19 @@ protected String loadJavaFile(String packageName, String className) {
315314
}
316315
}
317316

318-
protected int startDockerContainer(String image, Integer... ports) {
319-
GenericContainer genericContainer = new GenericContainer(DockerImageName.parse(image)).withExposedPorts(ports);
317+
/**
318+
* Starts {@code image} as Docker container exposing {@code ports} and waiting for {@code httpEndpoint} to be available.
319+
*/
320+
protected Integer startDockerContainer(String image, String httpEndpoint, Integer... ports) {
321+
GenericContainer genericContainer = new GenericContainer(DockerImageName.parse(image))
322+
.withExposedPorts(ports)
323+
.waitingFor(Wait.forHttp(httpEndpoint));
320324
genericContainer.start();
321325
return genericContainer.getFirstMappedPort();
322326
}
323327

324-
protected RunningNetworkedContainer startDockerContainer(NetworkedContainer networkedContainer,
325-
Network attachNetwork, Map<String, String> envMap) {
328+
protected static RunningNetworkedContainer startDockerContainer(NetworkedContainer networkedContainer,
329+
Network attachNetwork, Map<String, String> envMap) {
326330

327331
Network network = attachNetwork == null ? Network.newNetwork() : attachNetwork;
328332

applications/spring-shell/src/test/java/org/springframework/sbm/mule/wmq/WmqListener.java renamed to applications/spring-shell/src/test/java/org/springframework/sbm/mule/wmq/JmsListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import javax.jms.*;
1919
import java.util.function.Consumer;
2020

21-
public class WmqListener {
21+
public class JmsListener {
2222

2323
public void listenForMessage(int port, String queueName, final Consumer<String> messageConsumer) throws JMSException {
2424
WmqFactory wmqFactory = new WmqFactory();

applications/spring-shell/src/test/java/org/springframework/sbm/mule/wmq/WmqSender.java renamed to applications/spring-shell/src/test/java/org/springframework/sbm/mule/wmq/JmsSender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import javax.jms.*;
2020

21-
public class WmqSender {
21+
public class JmsSender {
2222

2323
public void sendMessage(int port, String queueName, String messageContent) throws JMSException {
2424
WmqFactory wmqFactory = new WmqFactory();

components/sbm-core/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,6 @@
3838
<version>0.10.1-SNAPSHOT</version>
3939
</dependency>
4040

41-
<dependency>
42-
<groupId>org.rocksdb</groupId>
43-
<artifactId>rocksdbjni</artifactId>
44-
<version>7.1.1</version>
45-
</dependency>
46-
4741
<dependency>
4842
<groupId>org.springframework.boot</groupId>
4943
<artifactId>spring-boot-starter-freemarker</artifactId>

components/sbm-openrewrite/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@
5656
<groupId>org.openrewrite</groupId>
5757
<artifactId>rewrite-java-11</artifactId>
5858
</dependency>
59+
<dependency>
60+
<groupId>org.rocksdb</groupId>
61+
<artifactId>rocksdbjni</artifactId>
62+
<version>7.1.2</version>
63+
</dependency>
5964
<dependency>
6065
<groupId>org.projectlombok</groupId>
6166
<artifactId>lombok</artifactId>

pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<openrewrite.spring.version>4.14.1</openrewrite.spring.version>
3434
<spring-boot.version>2.5.12</spring-boot.version>
3535
<progressbar.version>0.9.0</progressbar.version>
36-
<testcontainers.version>1.16.3</testcontainers.version>
36+
<testcontainers.version>9baedef17589ff70f7a585c809e0b1beb27eff62</testcontainers.version>
3737
<maven-invoker.version>3.0.1</maven-invoker.version>
3838
<spring-shell-starter.version>2.0.1.RELEASE</spring-shell-starter.version>
3939
<shrinkwrap.resolvers.version>3.1.4</shrinkwrap.resolvers.version>
@@ -77,6 +77,11 @@
7777
<name>mavencentral</name>
7878
<url>https://repo.maven.apache.org/maven2</url>
7979
</repository>
80+
<!-- TODO: remove after b umping testcontainers to > 1.17.1 -->
81+
<repository>
82+
<id>jitpack.io</id>
83+
<url>https://jitpack.io</url>
84+
</repository>
8085
</repositories>
8186

8287
<dependencyManagement>

0 commit comments

Comments
 (0)