Skip to content

Commit 995b577

Browse files
committed
Add non-regression tests for offline startup
1 parent 1766976 commit 995b577

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package io.quarkus.hibernate.orm.offline;
2+
3+
import jakarta.inject.Inject;
4+
import jakarta.transaction.Transactional;
5+
6+
import org.assertj.core.api.Assertions;
7+
import org.hibernate.Session;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.MyEntity;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
/**
16+
* If nothing requires DB access on startup, we expect startup to proceed even if the database is not reachable.
17+
* <p>
18+
* There will likely be warnings being logged, but the application will start.
19+
*/
20+
public class DbOfflineOnStartupTest {
21+
22+
@RegisterExtension
23+
static QuarkusUnitTest runner = new QuarkusUnitTest()
24+
.withApplicationRoot((jar) -> jar
25+
.addClass(SmokeTestUtils.class)
26+
.addClass(MyEntity.class))
27+
.withConfigurationResource("application.properties")
28+
// Disable schema management
29+
.overrideConfigKey("quarkus.hibernate-orm.schema-management.strategy",
30+
"none")
31+
// Pick a DB URL that is offline
32+
.overrideConfigKey("quarkus.datasource.jdbc.url",
33+
"jdbc:h2:tcp://localhost:9999/~/sample");
34+
35+
@Inject
36+
Session session;
37+
38+
@Test
39+
@Transactional
40+
public void smokeTest() {
41+
// We expect startup to succeed, but any DB access would obviously fail
42+
var entity = new MyEntity("someName");
43+
Assertions.assertThatThrownBy(() -> {
44+
session.persist(entity);
45+
session.flush();
46+
})
47+
.hasMessageContaining("Connection refused");
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package io.quarkus.hibernate.reactive.offline;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.reactive.mutiny.Mutiny;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.reactive.MyEntity;
12+
import io.quarkus.hibernate.reactive.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
import io.quarkus.test.vertx.RunOnVertxContext;
15+
import io.quarkus.test.vertx.UniAsserter;
16+
17+
/**
18+
* If nothing requires DB access on startup, we expect startup to proceed even if the database is not reachable.
19+
* <p>
20+
* There will likely be warnings being logged, but the application will start.
21+
*/
22+
public class DbOfflineOnStartupTest {
23+
24+
@RegisterExtension
25+
static QuarkusUnitTest runner = new QuarkusUnitTest()
26+
.withApplicationRoot((jar) -> jar
27+
.addClass(SmokeTestUtils.class)
28+
.addClass(MyEntity.class))
29+
.withConfigurationResource("application.properties")
30+
// Disable schema management
31+
.overrideConfigKey("quarkus.hibernate-orm.schema-management.strategy",
32+
"none")
33+
// Pick a DB URL that is offline
34+
.overrideConfigKey("quarkus.datasource.reactive.url",
35+
"vertx-reactive:postgresql://localhost:9999/hibernate_orm_test");
36+
37+
@Inject
38+
Mutiny.SessionFactory sessionFactory;
39+
40+
@Test
41+
@RunOnVertxContext
42+
public void smokeTest(UniAsserter asserter) {
43+
// We expect startup to succeed, but any DB access would obviously fail
44+
var entity = new MyEntity("someName");
45+
asserter.assertFailedWith(
46+
() -> sessionFactory.withTransaction(session -> session.persist(entity).chain(session::flush)),
47+
t -> assertThat(t).hasMessageContaining("Connection refused"));
48+
}
49+
}

0 commit comments

Comments
 (0)