Skip to content

Commit

Permalink
Introduce quarkus.datasource.devservices.init-script-path
Browse files Browse the repository at this point in the history
- This enables specifying a SQL initialization script for Dev Services Databases

Added tests
  • Loading branch information
gastaldi committed Jan 18, 2023
1 parent 29617d4 commit f1c2ce2
Show file tree
Hide file tree
Showing 15 changed files with 205 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class DevServicesDatasourceContainerConfig {
private final Optional<String> dbName;
private final Optional<String> username;
private final Optional<String> password;
private final Optional<String> initScriptPath;

public DevServicesDatasourceContainerConfig(Optional<String> imageName,
Map<String, String> containerProperties,
Expand All @@ -22,7 +23,8 @@ public DevServicesDatasourceContainerConfig(Optional<String> imageName,
Optional<String> command,
Optional<String> dbName,
Optional<String> username,
Optional<String> password) {
Optional<String> password,
Optional<String> initScriptPath) {
this.imageName = imageName;
this.containerProperties = containerProperties;
this.additionalJdbcUrlProperties = additionalJdbcUrlProperties;
Expand All @@ -31,6 +33,7 @@ public DevServicesDatasourceContainerConfig(Optional<String> imageName,
this.dbName = dbName;
this.username = username;
this.password = password;
this.initScriptPath = initScriptPath;
}

public Optional<String> getImageName() {
Expand Down Expand Up @@ -64,4 +67,8 @@ public Optional<String> getUsername() {
public Optional<String> getPassword() {
return password;
}

public Optional<String> getInitScriptPath() {
return initScriptPath;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ private RunningDevService startDevDb(String dbName,
dataSourceBuildTimeConfig.devservices.command,
dataSourceBuildTimeConfig.devservices.dbName,
dataSourceBuildTimeConfig.devservices.username,
dataSourceBuildTimeConfig.devservices.password);
dataSourceBuildTimeConfig.devservices.password,
dataSourceBuildTimeConfig.devservices.initScriptPath);

DevServicesDatasourceProvider.RunningDevServicesDatasource datasource = devDbProvider
.startDatabase(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,12 @@ public class DevServicesBuildTimeConfig {
*/
@ConfigItem
public Optional<String> password;

/**
* Path to a SQL script that will be loaded from the classpath and applied to the Dev Service database
*
* If the provider is not container based (e.g. a H2 or Derby Database) then this has no effect.
*/
@ConfigItem
public Optional<String> initScriptPath;
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);
container.start();

LOG.info("Dev Services for IBM Db2 started.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt
containerConfig.getFixedExposedPort(),
!devServicesSharedNetworkBuildItem.isEmpty());
startupTimeout.ifPresent(container::withStartupTimeout);

String effectiveUsername = containerConfig.getUsername().orElse(username.orElse(DEFAULT_DATABASE_USERNAME));
String effectivePassword = containerConfig.getPassword().orElse(password.orElse(DEFAULT_DATABASE_PASSWORD));
String effectiveDbName = containerConfig.getDbName().orElse(datasourceName.orElse(DEFAULT_DATABASE_NAME));
Expand All @@ -60,6 +59,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
126 changes: 126 additions & 0 deletions integration-tests/jdbc-postgresql/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>quarkus-integration-tests-parent</artifactId>
<groupId>io.quarkus</groupId>
<version>999-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>quarkus-integration-test-jdbc-postgresql</artifactId>
<name>Quarkus - Integration Tests - JDBC - PostgreSQL</name>
<description>Module that contains PostgreSQL related tests</description>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-agroal</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<!-- test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- Minimal test dependencies to *-deployment artifacts for consistent build order -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-agroal-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.it.jdbc.postgresql;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.inject.Inject;
import javax.sql.DataSource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/postgresql")
public class PostgreSQLResource {

@Inject
DataSource ds;

@GET
@Path("/init-script-execution")
public int checkInitScriptExecution() throws SQLException {
int result = 0;
try (Connection con = ds.getConnection();
CallableStatement cs = con.prepareCall("SELECT my_func()");
ResultSet rs = cs.executeQuery()) {
if (rs.next()) {
result = rs.getInt(1);
}
}
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Agroal config
quarkus.datasource.db-kind=postgresql
quarkus.datasource.devservices.init-script-path=init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE OR REPLACE FUNCTION my_func() RETURNS integer LANGUAGE plpgsql as $func$ BEGIN return 100; END $func$;
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.quarkus.it.jdbc.postgresql;

import static io.restassured.RestAssured.when;
import static org.hamcrest.Matchers.is;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
public class DevServicesTest {
@Test
@DisplayName("Returns whether the init-sql-path executed successfully or not")
public void testReturnInitSql() {
when().get("/postgresql/init-script-execution").then().log().ifValidationFails().body(is("100"));
}
}
1 change: 1 addition & 0 deletions integration-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@
<module>kafka-avro-apicurio2</module>
<module>kafka-streams</module>
<module>kafka-devservices</module>
<module>jdbc-postgresql</module>
<module>jpa</module>
<module>jpa-mapping-xml</module>
<module>jpa-db2</module>
Expand Down

0 comments on commit f1c2ce2

Please sign in to comment.