Search code examples
javayamlh2quarkus

Failed to start quarkus for tests. "Datasource '<default>' is not configured." YAML configuration problem


I am covering my features in my new Quarkus REST API with tests. I am currently learning how to develop microservices using Quarkus and I am experimenting with Liquibase. This project includes working with H2 for testing and Liquibase. Quarkus dev works perfectly fine but when I am running tests I encounter these errors:


java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus

    at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:638)
    at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:722)
    at java.base/java.util.Optional.orElseGet(Optional.java:364)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.RuntimeException: Failed to start quarkus
    at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
    at io.quarkus.runtime.Application.start(Application.java:101)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.runner.bootstrap.StartupActionImpl.run(StartupActionImpl.java:285)
    at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:252)
    at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:605)
    at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:655)
    ... 1 more
Caused by: java.lang.IllegalStateException: Error starting Liquibase
    at io.quarkus.liquibase.runtime.LiquibaseRecorder.doStartActions(LiquibaseRecorder.java:90)
    at io.quarkus.deployment.steps.LiquibaseProcessor$startLiquibase1744275855.deploy_0(Unknown Source)
    at io.quarkus.deployment.steps.LiquibaseProcessor$startLiquibase1744275855.deploy(Unknown Source)
    ... 8 more
Caused by: jakarta.enterprise.inject.CreationException: Error creating synthetic bean [1d48OwssPZoQytD2p8kGRAP54yY]: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unable to find datasource '<default>' for Liquibase: Datasource '<default>' is not configured. To solve this, configure datasource '<default>'. Refer to https://quarkus.io/guides/datasource for guidance.
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.doCreate(Unknown Source)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.create(Unknown Source)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.create(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.c18(Unknown Source)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.computeIfAbsent(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:21)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_ClientProxy.arc$delegate(Unknown Source)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_ClientProxy.getConfiguration(Unknown Source)
    at io.quarkus.liquibase.runtime.LiquibaseRecorder.doStartActions(LiquibaseRecorder.java:65)
    ... 10 more
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unable to find datasource '<default>' for Liquibase: Datasource '<default>' is not configured. To solve this, configure datasource '<default>'. Refer to https://quarkus.io/guides/datasource for guidance.
    at io.quarkus.liquibase.runtime.LiquibaseRecorder$1.apply(LiquibaseRecorder.java:42)
    at io.quarkus.liquibase.runtime.LiquibaseRecorder$1.apply(LiquibaseRecorder.java:32)
    at io.quarkus.liquibase.LiquibaseFactory_1d48OwssPZoQytD2p8kGRAP54yY_Synthetic_Bean.createSynthetic(Unknown Source)
    ... 23 more
Caused by: io.quarkus.runtime.configuration.ConfigurationException: Datasource '<default>' is not configured. To solve this, configure datasource '<default>'. Refer to https://quarkus.io/guides/datasource for guidance.
    at io.quarkus.datasource.common.runtime.DataSourceUtil.dataSourceNotConfigured(DataSourceUtil.java:47)
    at io.quarkus.liquibase.runtime.LiquibaseRecorder$1.apply(LiquibaseRecorder.java:39)
    ... 25 more

I tried running the tests using the IntelliJ Idea and by quarkus test into the terminal. The result is always the same.

My project\src\test\resources folder:

enter image description here

application-dev.yml: (it's the same in the src\main\resources and it's working in dev mode)

quarkus:
  datasource:
    db-kind: h2
    username: sa
    password: password
    jdbc:
      driver: org.h2.Driver
      url: jdbc:h2:file:./database;AUTO_SERVER=true;DB_CLOSE_DELAY=-1;
  liquibase:
    migrate-at-start: false
  hibernate-orm:
    log:
      sql: true
    database:
      generation: drop-and-create
    scripts:
      generation:
        create-target: dev-changelog/release-1.0/migrations/schema-1.sql
        drop-target: dev-changelog/release-1.0/migrations/drop-1.sql
    sql-load-script: dev-changelog/release-1.0/migrations/level-1.sql

An example of a test class:

@QuarkusTest
public class LevelResourceTest {

    @Test
    public void testPostRequest() {
        //REST ASSURED TEST
    }
}

I tried adding more dependencies to pom.xml that could be related but it kept the same problem. I tried my configuration by changing the URL of the H2 DB. And I couldn't find anyone with a similar problem on the net. Reloading, maven clean install, and rebooting everything also didn't help.

Its expected behavior is obviously to run the test. My previous project works with pretty much the same configurations without any trouble.


Solution

  • I found the solution. The problem is that Quarkus runs tests using application.yml, not application-dev.yml. So I just renamed the application-dev into the application. Now it works. But for some reason, my other project runs tests using application-dev.