Skip to content

Commit

Permalink
Upgraded strimzi/kafka image + removed workaround for j17
Browse files Browse the repository at this point in the history
  • Loading branch information
JiriOndrusek authored and jamesnetherton committed Sep 5, 2024
1 parent 9f0cf77 commit dbf2853
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,25 @@
import java.util.Map;
import java.util.function.Function;

import com.github.dockerjava.api.exception.NotFoundException;
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
import io.strimzi.test.container.StrimziKafkaContainer;
import org.apache.camel.quarkus.test.FipsModeUtil;
import org.eclipse.microprofile.config.ConfigProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.ContainerFetchException;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.images.builder.ImageFromDockerfile;
import org.testcontainers.utility.TestcontainersConfiguration;

public class KafkaTestResource implements QuarkusTestResourceLifecycleManager {
protected static final String KAFKA_IMAGE_NAME = ConfigProvider.getConfig().getValue("kafka.container.image", String.class);
private static final Logger LOGGER = LoggerFactory.getLogger(KafkaTestResource.class);

private StrimziKafkaContainer container;
private GenericContainer j17container;

@Override
public Map<String, String> start() {
LOGGER.info(TestcontainersConfiguration.getInstance().toString());

try {
startContainer(KAFKA_IMAGE_NAME, name -> new StrimziKafkaContainer(name));
start(name -> new StrimziKafkaContainer(name));

return Collections.singletonMap("camel.component.kafka.brokers", container.getBootstrapServers());
} catch (Exception e) {
Expand All @@ -54,58 +48,15 @@ public Map<String, String> start() {

public String start(Function<String, StrimziKafkaContainer> containerSupplier) {
LOGGER.info(TestcontainersConfiguration.getInstance().toString());

//if FIPS environment is present, custom container using J17 has to used because:
// Password-based encryption support in FIPs mode was implemented in the Red Hat build of OpenJDK 17 update 4
if (FipsModeUtil.isFipsMode()) {
//custom image should be cached for the next usages with following id
String customImageName = "camel-quarkus-test-custom-" + KAFKA_IMAGE_NAME.replaceAll("[\\./]", "-");

try {
//in case that the image is not accessible, fetch exception is thrown
startContainer(customImageName, containerSupplier);
} catch (ContainerFetchException e) {
if (e.getCause() instanceof NotFoundException) {
LOGGER.info("Custom image for kafka (%s) does not exist. Has to be created.", customImageName);

//start of the customized container will create the image
//it is not possible to customize existing StrimziKafkaContainer. Testcontainer API doe not allow
//to customize the image.
// This workaround can be removed once the strimzi container with openjdk 17 is released.
// According to https://strimzi.io/blog/2023/01/25/running-apache-kafka-on-fips-enabled-kubernetes-cluster/
// image should exist
j17container = new GenericContainer(
new ImageFromDockerfile(customImageName, false)
.withDockerfileFromBuilder(builder -> builder
.from("quay.io/strimzi-test-container/test-container:latest-kafka-3.2.1")
.env("JAVA_HOME", "/usr/lib/jvm/jre-17")
.env("PATH", "/usr/lib/jvm/jre-17/bin:$PATH")
.user("root")
.run("microdnf install -y --nodocs java-17-openjdk-headless glibc-langpack-en && microdnf clean all")));
j17container.start();

LOGGER.info("Custom image for kafka (%s) has been created.", customImageName);

//start kafka container again
startContainer(customImageName, containerSupplier);
}
}
} else {
startContainer(KAFKA_IMAGE_NAME, containerSupplier);
}

return container.getBootstrapServers();

}

private void startContainer(String imageName, Function<String, StrimziKafkaContainer> containerSupplier) {
container = containerSupplier.apply(imageName);
container = containerSupplier.apply(KAFKA_IMAGE_NAME);

/* Added container startup logging because of https://github.com/apache/camel-quarkus/issues/2461 */
container.withLogConsumer(frame -> System.out.print(frame.getUtf8String()))
// .withEnv("KAFKA_LOG4J_OPTS", "-Dlog4j.configuration=file:/log4j.properties")
.waitForRunning()
.start();

return container.getBootstrapServers();
}

@Override
Expand All @@ -117,13 +68,6 @@ public void stop() {
// ignored
}
}
if (j17container != null) {
try {
j17container.stop();
} catch (Exception e) {
// ignored
}
}
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@
<hashicorp-vault.container.image>docker.io/hashicorp/vault:1.17</hashicorp-vault.container.image>
<ibm-mq.container.image>icr.io/ibm-messaging/mq:9.3.2.1-r1</ibm-mq.container.image>
<influxdb.container.image>docker.io/influxdb:1.8.10</influxdb.container.image>
<kafka.container.image>quay.io/strimzi-test-container/test-container:latest-kafka-3.2.1</kafka.container.image>
<kafka.container.image>quay.io/strimzi-test-container/test-container:latest-kafka-3.8.0</kafka.container.image>
<kafka-oauth.container.image>quay.io/strimzi/kafka:latest-kafka-3.7.0</kafka-oauth.container.image>
<keycloak.container.image>quay.io/keycloak/keycloak:23.0.7</keycloak.container.image>
<kudu.container.image>docker.io/apache/kudu:1.17.0</kudu.container.image>
Expand Down

0 comments on commit dbf2853

Please sign in to comment.