Skip to content

Commit f821920

Browse files
authored
Use a custom pgBouncer container image (#1589) (#1591)
See vert-x3/issues#662 Migrate away from bitnami images Signed-off-by: Thomas Segismont <[email protected]>
1 parent 9f4d4e3 commit f821920

File tree

4 files changed

+50
-16
lines changed

4 files changed

+50
-16
lines changed

vertx-pg-client/src/test/java/io/vertx/pgclient/PgBouncerTest.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,33 @@
11
package io.vertx.pgclient;
22

33

4-
import io.vertx.core.*;
4+
import io.vertx.core.CompositeFuture;
5+
import io.vertx.core.Future;
6+
import io.vertx.core.Vertx;
57
import io.vertx.ext.unit.junit.VertxUnitRunner;
68
import io.vertx.sqlclient.Cursor;
79
import io.vertx.sqlclient.Tuple;
10+
import org.apache.commons.compress.utils.IOUtils;
811
import org.junit.After;
912
import org.junit.Before;
1013
import org.junit.Test;
1114
import org.junit.runner.RunWith;
1215
import org.testcontainers.Testcontainers;
1316
import org.testcontainers.containers.FixedHostPortGenericContainer;
1417
import org.testcontainers.containers.GenericContainer;
15-
import org.testcontainers.utility.DockerImageName;
16-
17-
import java.util.*;
18+
import org.testcontainers.images.builder.ImageFromDockerfile;
19+
import org.testcontainers.images.builder.Transferable;
20+
21+
import java.io.IOException;
22+
import java.io.InputStream;
23+
import java.util.ArrayList;
24+
import java.util.Arrays;
25+
import java.util.List;
1826
import java.util.concurrent.TimeUnit;
1927
import java.util.stream.Collectors;
2028

2129
import static org.junit.Assert.assertEquals;
30+
import static org.testcontainers.containers.BindMode.READ_ONLY;
2231

2332
@RunWith(VertxUnitRunner.class)
2433
public class PgBouncerTest {
@@ -39,21 +48,15 @@ public void setUp() {
3948
pgContainer.withNetworkAliases("foo");
4049
pgContainer.start();
4150
Integer pgPort = pgContainer.getFirstMappedPort();
42-
String pgHost = pgContainer.getHost();
4351

4452
Testcontainers.exposeHostPorts(pgPort);
4553

46-
47-
pgBouncerContainer = new GenericContainer(DockerImageName.parse("bitnamilegacy/pgbouncer:1.20.1-debian-11-r30"));
48-
pgBouncerContainer.withEnv("POSTGRESQL_USERNAME", "postgres");
49-
pgBouncerContainer.withEnv("POSTGRESQL_PASSWORD", "postgres");
50-
pgBouncerContainer.withEnv("POSTGRESQL_DATABASE", "postgres");
51-
pgBouncerContainer.withEnv("POSTGRESQL_HOST", "host.testcontainers.internal");
52-
pgBouncerContainer.withEnv("POSTGRESQL_PORT", "" + pgPort);
53-
pgBouncerContainer.withEnv("PGBOUNCER_IGNORE_STARTUP_PARAMETERS", "extra_float_digits");
54-
pgBouncerContainer.withEnv("PGBOUNCER_POOL_MODE", "transaction");
55-
pgBouncerContainer.withEnv("PGBOUNCER_MAX_DB_CONNECTIONS", "2");
56-
pgBouncerContainer.withExposedPorts(6432);
54+
pgBouncerContainer = new GenericContainer<>(
55+
new ImageFromDockerfile()
56+
.withFileFromTransferable("Dockerfile", resourceTransferable("pgBouncer/Dockerfile")))
57+
.withClasspathResourceMapping("pgBouncer/pgbouncer.ini", "/etc/pgbouncer/pgbouncer.ini", READ_ONLY)
58+
.withClasspathResourceMapping("pgBouncer/userlist.txt", "/etc/pgbouncer/userlist.txt", READ_ONLY)
59+
.withExposedPorts(6432);
5760
pgBouncerContainer.start();
5861
Integer bouncerPort = pgBouncerContainer.getFirstMappedPort();
5962
String bouncerHost = pgBouncerContainer.getHost();
@@ -70,6 +73,15 @@ public void setUp() {
7073
vertx = Vertx.vertx();
7174
}
7275

76+
private static Transferable resourceTransferable(String resourceName) {
77+
try (InputStream stream = PgBouncerTest.class.getClassLoader().getResourceAsStream(resourceName)) {
78+
assert stream != null;
79+
return Transferable.of(IOUtils.toByteArray(stream));
80+
} catch (IOException e) {
81+
throw new RuntimeException(e);
82+
}
83+
}
84+
7385
@After
7486
public void tearDown() throws Exception {
7587
Testcontainers.exposeHostPorts();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM fedora:43
2+
RUN dnf -y update \
3+
&& dnf -y install pgbouncer \
4+
&& dnf clean all
5+
RUN mkdir -p /var/run/pgbouncer /var/log/pgbouncer \
6+
&& chown -R pgbouncer:pgbouncer /var/run/pgbouncer /var/log/pgbouncer /etc/pgbouncer
7+
EXPOSE 6432
8+
USER pgbouncer
9+
CMD ["pgbouncer", "/etc/pgbouncer/pgbouncer.ini"]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[databases]
2+
* = host=host.testcontainers.internal port=5432
3+
4+
[pgbouncer]
5+
listen_addr = 0.0.0.0
6+
listen_port = 6432
7+
auth_type = md5
8+
auth_file = /etc/pgbouncer/userlist.txt
9+
pool_mode = transaction
10+
max_client_conn = 2
11+
admin_users = postgres
12+
ignore_startup_parameters = extra_float_digits
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"postgres" "md53175bce1d3201d16594cebf9d7eb3f9d"

0 commit comments

Comments
 (0)