use of org.testcontainers.containers.PostgreSQLContainer in project hazelcast by hazelcast.
the class DebeziumCdcIntegrationTest method postgres.
@Test
public void postgres() throws Exception {
PostgreSQLContainer<?> container = postgresContainer();
try {
container.start();
// given
List<String> expectedRecords = Arrays.asList("1001/0:SYNC:Customer {id=1001, firstName=Sally, lastName=Thomas, email=sally.thomas@acme.com}", "1002/0:SYNC:Customer {id=1002, firstName=George, lastName=Bailey, email=gbailey@foobar.com}", "1003/0:SYNC:Customer {id=1003, firstName=Edward, lastName=Walker, email=ed@walker.com}", "1004/0:SYNC:Customer {id=1004, firstName=Anne, lastName=Kretchmar, email=annek@noanswer.org}", "1004/1:UPDATE:Customer {id=1004, firstName=Anne Marie, lastName=Kretchmar, email=annek@noanswer.org}", "1005/0:INSERT:Customer {id=1005, firstName=Jason, lastName=Bourne, email=jason@bourne.org}", "1005/1:DELETE:Customer {id=1005, firstName=Jason, lastName=Bourne, email=jason@bourne.org}");
StreamSource<ChangeRecord> source = DebeziumCdcSources.debezium("postgres", "io.debezium.connector.postgresql.PostgresConnector").setProperty("database.server.name", "dbserver1").setProperty("database.hostname", container.getContainerIpAddress()).setProperty("database.port", Integer.toString(container.getMappedPort(POSTGRESQL_PORT))).setProperty("database.user", "postgres").setProperty("database.password", "postgres").setProperty("database.dbname", "postgres").setProperty("table.whitelist", "inventory.customers").build();
Pipeline pipeline = Pipeline.create();
pipeline.readFrom(source).withNativeTimestamps(0).<ChangeRecord>customTransform("filter_timestamps", filterTimestampsProcessorSupplier()).groupingKey(record -> (Integer) record.key().toMap().get("id")).mapStateful(LongAccumulator::new, (accumulator, customerId, record) -> {
long count = accumulator.get();
accumulator.add(1);
Operation operation = record.operation();
RecordPart value = record.value();
Customer customer = value.toObject(Customer.class);
return entry(customerId + "/" + count, operation + ":" + customer);
}).setLocalParallelism(1).writeTo(Sinks.map("results"));
// when
HazelcastInstance hz = createHazelcastInstances(2)[0];
Job job = hz.getJet().newJob(pipeline);
// then
assertEqualsEventually(() -> hz.getMap("results").size(), 4);
// when
try (Connection connection = getPostgreSqlConnection(container.getJdbcUrl(), container.getUsername(), container.getPassword())) {
connection.setSchema("inventory");
Statement statement = connection.createStatement();
statement.addBatch("UPDATE customers SET first_name='Anne Marie' WHERE id=1004");
statement.addBatch("INSERT INTO customers VALUES (1005, 'Jason', 'Bourne', 'jason@bourne.org')");
statement.addBatch("DELETE FROM customers WHERE id=1005");
statement.executeBatch();
}
// then
try {
assertEqualsEventually(() -> mapResultsToSortedList(hz.getMap("results")), expectedRecords);
} finally {
job.cancel();
assertJobStatusEventually(job, JobStatus.FAILED);
}
} finally {
container.stop();
}
}
use of org.testcontainers.containers.PostgreSQLContainer in project spring-data-jdbc by spring-projects.
the class PostgresDataSourceConfiguration method createDataSource.
/*
* (non-Javadoc)
* @see org.springframework.data.jdbc.testing.DataSourceConfiguration#createDataSource()
*/
@Override
protected DataSource createDataSource() {
if (POSTGRESQL_CONTAINER == null) {
PostgreSQLContainer<?> container = new PostgreSQLContainer<>();
container.start();
POSTGRESQL_CONTAINER = container;
}
PGSimpleDataSource dataSource = new PGSimpleDataSource();
dataSource.setUrl(POSTGRESQL_CONTAINER.getJdbcUrl());
dataSource.setUser(POSTGRESQL_CONTAINER.getUsername());
dataSource.setPassword(POSTGRESQL_CONTAINER.getPassword());
return dataSource;
}
use of org.testcontainers.containers.PostgreSQLContainer in project hazelcast by hazelcast.
the class PostgresCdcNetworkIntegrationTest method initPostgres.
private PostgreSQLContainer<?> initPostgres(Network network, Integer fixedExposedPort) {
PostgreSQLContainer<?> postgres = namedTestContainer(new PostgreSQLContainer<>(AbstractPostgresCdcIntegrationTest.DOCKER_IMAGE).withDatabaseName("postgres").withUsername("postgres").withPassword("postgres"));
if (fixedExposedPort != null) {
Consumer<CreateContainerCmd> cmd = e -> e.withPortBindings(new PortBinding(Ports.Binding.bindPort(fixedExposedPort), new ExposedPort(POSTGRESQL_PORT)));
postgres = postgres.withCreateContainerCmdModifier(cmd);
}
if (network != null) {
postgres = postgres.withNetwork(network);
}
postgres.start();
return postgres;
}
use of org.testcontainers.containers.PostgreSQLContainer in project pinpoint by naver.
the class PostgreSQLContainerFactory method newContainer.
public static JdbcDatabaseContainer newContainer(String loggerName) {
PostgreSQLContainer container = new PostgreSQLContainer();
container.withInitScript("init_postgresql.sql");
Log4jLoggerFactory log4jLoggerFactory = new Log4jLoggerFactory();
org.slf4j.Logger logger = log4jLoggerFactory.getLogger(loggerName);
container.withLogConsumer(new Slf4jLogConsumer(logger));
return container;
}
Aggregations