Skip to content

Commit

Permalink
Fix a few test injecting the session factory with -reactive just for …
Browse files Browse the repository at this point in the history
…metadata
  • Loading branch information
lucamolteni committed Nov 21, 2024
1 parent c078375 commit eeba221
Show file tree
Hide file tree
Showing 11 changed files with 42 additions and 54 deletions.
2 changes: 1 addition & 1 deletion extensions/hibernate-reactive/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@
import jakarta.persistence.Id;

import org.hibernate.SessionFactory;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
import org.hibernate.reactive.mutiny.Mutiny;
import org.hibernate.resource.transaction.spi.TransactionCoordinatorBuilder;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

Expand All @@ -29,21 +25,12 @@ public class NoJtaTest {
.addClass(MyEntity.class)
.addAsResource("application.properties"));

@Inject
SessionFactory sessionFactory; // This is an ORM SessionFactory, but it's backing Hibernate Reactive.

@Inject
Mutiny.SessionFactory factory;

@Test
@RunOnVertxContext
public void test(UniAsserter asserter) {
ServiceRegistryImplementor serviceRegistry = sessionFactory.unwrap(SessionFactoryImplementor.class)
.getServiceRegistry();

// Two assertions are necessary, because these values are influenced by separate configuration
assertThat(serviceRegistry.getService(JtaPlatform.class).retrieveTransactionManager()).isNull();
assertThat(serviceRegistry.getService(TransactionCoordinatorBuilder.class).isJta()).isFalse();

// Quick test to make sure HRX works
MyEntity entity = new MyEntity("default");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,25 @@
import java.util.HashSet;
import java.util.Set;

import jakarta.persistence.EntityManagerFactory;

import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.generator.Generator;
import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.metamodel.mapping.SelectableConsumer;
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.persister.entity.AbstractEntityPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.reactive.mutiny.Mutiny;

public final class SchemaUtil {

private SchemaUtil() {
}

public static Set<String> getColumnNames(EntityManagerFactory entityManagerFactory, Class<?> entityType) {
public static Set<String> getColumnNames(
Class<?> entityType,
MappingMetamodel metamodel) {
Set<String> result = new HashSet<>();
AbstractEntityPersister persister = (AbstractEntityPersister) entityManagerFactory
.unwrap(SessionFactoryImplementor.class)
.getMetamodel().entityPersister(entityType);

AbstractEntityPersister persister = (AbstractEntityPersister) metamodel.locateEntityDescriptor(entityType);
if (persister == null) {
return result;
}
Expand All @@ -33,11 +32,11 @@ public static Set<String> getColumnNames(EntityManagerFactory entityManagerFacto
return result;
}

public static String getColumnTypeName(EntityManagerFactory entityManagerFactory, Class<?> entityType,
String columnName) {
MappingMetamodel domainModel = entityManagerFactory
.unwrap(SessionFactoryImplementor.class).getRuntimeMetamodels().getMappingMetamodel();
EntityPersister entityDescriptor = domainModel.findEntityDescriptor(entityType);
public static String getColumnTypeName(
Class<?> entityType,
String columnName,
MappingMetamodel mappingMetaModel) {
EntityPersister entityDescriptor = mappingMetaModel.findEntityDescriptor(entityType);
var columnFinder = new SelectableConsumer() {
private SelectableMapping found;

Expand All @@ -52,10 +51,12 @@ public void accept(int selectionIndex, SelectableMapping selectableMapping) {
return columnFinder.found.getJdbcMapping().getJdbcType().getFriendlyName();
}

public static Generator getGenerator(EntityManagerFactory entityManagerFactory, Class<?> entityType) {
MappingMetamodel domainModel = entityManagerFactory
.unwrap(SessionFactoryImplementor.class).getRuntimeMetamodels().getMappingMetamodel();
EntityPersister entityDescriptor = domainModel.findEntityDescriptor(entityType);
public static Generator getGenerator(Class<?> entityType, MappingMetamodel mappingMetamodel) {
EntityPersister entityDescriptor = mappingMetamodel.findEntityDescriptor(entityType);
return entityDescriptor.getGenerator();
}

public static MappingMetamodel mappingMetamodel(Mutiny.SessionFactory sessionFactory) {
return (MappingMetamodel) sessionFactory.getMetamodel();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@

public abstract class AbstractIdOptimizerDefaultTest {

@Inject
SessionFactory ormSessionFactory; // This is an ORM SessionFactory, but it's backing Hibernate Reactive.

@Inject
Mutiny.SessionFactory sessionFactory;

Expand Down Expand Up @@ -64,7 +61,7 @@ public void ids(UniAsserter asserter) {
}

AbstractObjectAssert<?, Optimizer> assertOptimizer(Class<?> entityType) {
return assertThat(SchemaUtil.getGenerator(ormSessionFactory, entityType))
return assertThat(SchemaUtil.getGenerator(entityType, SchemaUtil.mappingMetamodel(sessionFactory)))
.as("Reactive ID generator wrapper for entity type " + entityType.getSimpleName())
.asInstanceOf(InstanceOfAssertFactories.type(ReactiveGeneratorWrapper.class))
.extracting("generator") // Needs reflection, unfortunately the blocking generator is not exposed...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
import jakarta.inject.Inject;

import org.assertj.core.api.SoftAssertions;
import org.hibernate.SessionFactory;
import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.reactive.mutiny.Mutiny;

import io.quarkus.hibernate.reactive.SchemaUtil;
import io.quarkus.test.vertx.UniAsserter;

public class AbstractTimezoneDefaultStorageTest {
Expand All @@ -24,12 +25,13 @@ public class AbstractTimezoneDefaultStorageTest {
public static final OffsetTime PERSISTED_OFFSET_TIME = LOCAL_DATE_TIME_TO_TEST.toLocalTime()
.atOffset(ZoneOffset.ofHours(3));

@Inject
SessionFactory ormSessionFactory; // This is an ORM SessionFactory, but it's backing Hibernate Reactive.

@Inject
Mutiny.SessionFactory sessionFactory;

MappingMetamodel mappingMetamodel() {
return SchemaUtil.mappingMetamodel(sessionFactory);
}

protected void assertPersistedThenLoadedValues(UniAsserter asserter, ZonedDateTime expectedZonedDateTime,
OffsetDateTime expectedOffsetDateTime, OffsetTime expectedOffsetTime) {
asserter.assertThat(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ public class TimezoneDefaultStorageAutoTest extends AbstractTimezoneDefaultStora

@Test
public void schema() {
assertThat(SchemaUtil.getColumnNames(ormSessionFactory, EntityWithTimezones.class))
assertThat(SchemaUtil.getColumnNames(EntityWithTimezones.class, mappingMetamodel()))
.contains("zonedDateTime_tz", "offsetDateTime_tz", "offsetTime_tz");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "zonedDateTime"))

assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "zonedDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "offsetDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "offsetDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ public class TimezoneDefaultStorageColumnTest extends AbstractTimezoneDefaultSto

@Test
public void schema() {
assertThat(SchemaUtil.getColumnNames(ormSessionFactory, EntityWithTimezones.class))
assertThat(SchemaUtil.getColumnNames(EntityWithTimezones.class, mappingMetamodel()))
.contains("zonedDateTime_tz", "offsetDateTime_tz", "offsetTime_tz");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "zonedDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "zonedDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "offsetDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "offsetDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public class TimezoneDefaultStorageDefaultTest extends AbstractTimezoneDefaultSt

@Test
public void schema() {
assertThat(SchemaUtil.getColumnNames(ormSessionFactory, EntityWithTimezones.class))
assertThat(SchemaUtil.getColumnNames(EntityWithTimezones.class, mappingMetamodel()))
.doesNotContain("zonedDateTime_tz", "offsetDateTime_tz", "offsetTime_tz");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "zonedDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "zonedDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "offsetDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "offsetDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ public class TimezoneDefaultStorageNormalizeTest extends AbstractTimezoneDefault

@Test
public void schema() {
assertThat(SchemaUtil.getColumnNames(ormSessionFactory, EntityWithTimezones.class))
assertThat(SchemaUtil.getColumnNames(EntityWithTimezones.class, mappingMetamodel()))
.doesNotContain("zonedDateTime_tz", "offsetDateTime_tz", "offsetTime_tz");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "zonedDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "zonedDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "offsetDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "offsetDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public class TimezoneDefaultStorageNormalizeUtcTest extends AbstractTimezoneDefa

@Test
public void schema() {
assertThat(SchemaUtil.getColumnNames(ormSessionFactory, EntityWithTimezones.class))
assertThat(SchemaUtil.getColumnNames(EntityWithTimezones.class, mappingMetamodel()))
.doesNotContain("zonedDateTime_tz", "offsetDateTime_tz", "offsetTime_tz");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "zonedDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "zonedDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
assertThat(SchemaUtil.getColumnTypeName(ormSessionFactory, EntityWithTimezones.class, "offsetDateTime"))
assertThat(SchemaUtil.getColumnTypeName(EntityWithTimezones.class, "offsetDateTime", mappingMetamodel()))
.isEqualTo("TIMESTAMP_UTC");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class FileNotFoundSqlLoadScriptTestCase {
.assertException(t -> assertThat(t)
.isInstanceOf(ConfigurationException.class)
.hasMessageContainingAll("Unable to find file referenced in '"
+ "quarkus.hibernate-orm.sql-load-script=file-that-does-not-exist.sql'. Remove property or add file to your path."));
+ "quarkus.hibernate-orm.\"<default-reactive>\".sql-load-script=file-that-does-not-exist.sql'. Remove property or add file to your path."));

@Test
public void testSqlLoadScriptFileAbsentTest() {
Expand Down

0 comments on commit eeba221

Please sign in to comment.