diff --git a/extensions/flyway/deployment/src/test/java/io/quarkus/flyway/test/FlywayMultiDataSourcesDevModeTest.java b/extensions/flyway/deployment/src/test/java/io/quarkus/flyway/test/FlywayMultiDataSourcesDevModeTest.java new file mode 100644 index 00000000000000..2d0482cfe55227 --- /dev/null +++ b/extensions/flyway/deployment/src/test/java/io/quarkus/flyway/test/FlywayMultiDataSourcesDevModeTest.java @@ -0,0 +1,83 @@ +package io.quarkus.flyway.test; + +import static org.hamcrest.CoreMatchers.containsString; + +import java.util.Arrays; +import java.util.stream.Collectors; + +import javax.inject.Inject; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; + +import org.flywaydb.core.Flyway; +import org.flywaydb.core.api.Location; +import org.flywaydb.core.api.configuration.Configuration; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.flyway.FlywayDataSource; +import io.quarkus.test.QuarkusDevModeTest; +import io.restassured.RestAssured; + +// see https://github.com/quarkusio/quarkus/issues/9415 +public class FlywayMultiDataSourcesDevModeTest { + + @RegisterExtension + static final QuarkusDevModeTest config = new QuarkusDevModeTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addClasses(Endpoint.class) + .addAsResource("config-for-multiple-datasources.properties", "application.properties")); + + @Test + public void testProperConfigApplied() { + RestAssured.get("/fly").then() + .statusCode(200) + .body(containsString("db/location1,db/location2")); + + RestAssured.get("/fly?name=users").then() + .statusCode(200) + .body(containsString("db/users/location1,db/users/location2")); + + RestAssured.get("/fly?name=inventory").then() + .statusCode(200) + .body(containsString("db/inventory/location1,db/inventory/location")); + } + + @Path("/fly") + public static class Endpoint { + + @Inject + Flyway flywayDefault; + + @Inject + @FlywayDataSource("users") + Flyway flywayUsers; + + @Inject + @FlywayDataSource("inventory") + Flyway flywayInventory; + + @GET + @Produces("text/plain") + public String locations(@QueryParam("name") @DefaultValue("default") String name) { + Configuration configuration; + if ("default".equals(name)) { + configuration = flywayDefault.getConfiguration(); + } else if ("users".equals(name)) { + configuration = flywayUsers.getConfiguration(); + } else if ("inventory".equals(name)) { + configuration = flywayInventory.getConfiguration(); + } else { + throw new RuntimeException("Flyway " + name + " not found"); + } + + return Arrays.stream(configuration.getLocations()).map(Location::getPath).collect(Collectors.joining(",")); + } + + } +}