Skip to content

Commit aa3ec28

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

File tree

5 files changed

+51
-16
lines changed

5 files changed

+51
-16
lines changed

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

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
11
package io.vertx.tests.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.pgclient.PgConnectOptions;
79
import io.vertx.pgclient.PgConnection;
810
import io.vertx.sqlclient.Cursor;
911
import io.vertx.sqlclient.Tuple;
12+
import org.apache.commons.compress.utils.IOUtils;
1013
import org.junit.After;
1114
import org.junit.Before;
1215
import org.junit.Test;
1316
import org.junit.runner.RunWith;
1417
import org.testcontainers.Testcontainers;
1518
import org.testcontainers.containers.FixedHostPortGenericContainer;
1619
import org.testcontainers.containers.GenericContainer;
17-
import org.testcontainers.utility.DockerImageName;
18-
19-
import java.util.*;
20+
import org.testcontainers.images.builder.ImageFromDockerfile;
21+
import org.testcontainers.images.builder.Transferable;
22+
23+
import java.io.IOException;
24+
import java.io.InputStream;
25+
import java.util.ArrayList;
26+
import java.util.Arrays;
27+
import java.util.List;
2028
import java.util.concurrent.TimeUnit;
2129
import java.util.stream.Collectors;
2230

2331
import static org.junit.Assert.assertEquals;
32+
import static org.testcontainers.containers.BindMode.READ_ONLY;
2433

2534
@RunWith(VertxUnitRunner.class)
2635
public class PgBouncerTest {
@@ -41,21 +50,15 @@ public void setUp() {
4150
pgContainer.withNetworkAliases("foo");
4251
pgContainer.start();
4352
Integer pgPort = pgContainer.getFirstMappedPort();
44-
String pgHost = pgContainer.getHost();
4553

4654
Testcontainers.exposeHostPorts(pgPort);
4755

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

78+
private static Transferable resourceTransferable(String resourceName) {
79+
try (InputStream stream = PgBouncerTest.class.getClassLoader().getResourceAsStream(resourceName)) {
80+
assert stream != null;
81+
return Transferable.of(IOUtils.toByteArray(stream));
82+
} catch (IOException e) {
83+
throw new RuntimeException(e);
84+
}
85+
}
86+
7587
@After
7688
public void tearDown() throws Exception {
7789
Testcontainers.exposeHostPorts();

vertx-pg-client/src/test/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
requires junit;
1313
requires testcontainers;
1414
requires static org.slf4j;
15+
requires org.apache.commons.compress;
1516

1617
}
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)