1 package de.juplo.kafka.chat.backend;
3 import lombok.extern.slf4j.Slf4j;
4 import org.testcontainers.containers.BindMode;
5 import org.testcontainers.containers.GenericContainer;
6 import org.testcontainers.containers.Network;
7 import org.testcontainers.containers.output.Slf4jLogConsumer;
8 import org.testcontainers.containers.wait.strategy.Wait;
9 import org.testcontainers.images.ImagePullPolicy;
10 import org.testcontainers.utility.DockerImageName;
12 import java.util.Arrays;
16 public abstract class ContainerTemplates
18 static final ImagePullPolicy NEVER_PULL = imageName -> false;
19 static final Network NETWORK = Network.newNetwork();
21 static GenericContainer createHaproxyContainer()
23 return new GenericContainer(DockerImageName.parse("haproxytech/haproxy-debian:2.8"))
25 .withNetworkAliases("haproxy")
26 .withClasspathResourceMapping(
28 "/usr/local/etc/haproxy/haproxy.cfg",
30 .withClasspathResourceMapping(
32 "/usr/local/etc/haproxy/sharding.map",
34 .withExposedPorts(8400, 8401, 8404)
35 .withLogConsumer(new Slf4jLogConsumer(log, true).withPrefix("HAPROXY"));
38 static GenericContainer createBackendContainer(String id, String[] command)
40 return new GenericContainer(DockerImageName.parse("juplo/chat-backend:0.0.1-SNAPSHOT"))
41 .withImagePullPolicy(NEVER_PULL)
43 .withNetworkAliases("backend-ID".replaceAll("ID", id))
44 .withCommand(Arrays.stream(command)
45 .map(commandPart -> commandPart.replaceAll("ID", id))
46 .toArray(size -> new String[size]))
47 .withExposedPorts(8080)
48 .waitingFor(Wait.forLogMessage(".*Started\\ ChatBackendApplication.*\\n", 1))
49 .withLogConsumer(new Slf4jLogConsumer(
53 .withPrefix("BACKEND-ID".replaceAll("ID", id)));