From 0dd0d07c34783f4aadb1ad7e71a692fd1045ed80 Mon Sep 17 00:00:00 2001 From: Fabio Massimo Ercoli Date: Tue, 2 Mar 2021 03:36:32 +0100 Subject: [PATCH] HSEARCH-4132 Test outbox table indexing strategy --- ...tboxTableAutomaticIndexingStrategyIT.java} | 60 ++++++++----------- 1 file changed, 24 insertions(+), 36 deletions(-) rename integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/{OutboxSyntheticEntityMappingIT.java => OutboxTableAutomaticIndexingStrategyIT.java} (66%) diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/OutboxSyntheticEntityMappingIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/OutboxTableAutomaticIndexingStrategyIT.java similarity index 66% rename from integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/OutboxSyntheticEntityMappingIT.java rename to integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/OutboxTableAutomaticIndexingStrategyIT.java index 14a5e785d1c..195a2280098 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/OutboxSyntheticEntityMappingIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/outbox/OutboxTableAutomaticIndexingStrategyIT.java @@ -10,22 +10,22 @@ import static org.hibernate.search.mapper.orm.outbox.impl.OutboxAdditionalJaxbMappingProducer.ENTITY_ID_PROPERTY_NAME; import static org.hibernate.search.mapper.orm.outbox.impl.OutboxAdditionalJaxbMappingProducer.ENTITY_NAME_PROPERTY_NAME; import static org.hibernate.search.mapper.orm.outbox.impl.OutboxAdditionalJaxbMappingProducer.OUTBOX_ENTITY_NAME; -import static org.hibernate.search.mapper.orm.outbox.impl.OutboxAdditionalJaxbMappingProducer.ROUTING_KEY_PROPERTY_NAME; +import static org.hibernate.search.mapper.orm.outbox.impl.OutboxAdditionalJaxbMappingProducer.ROUTE_PROPERTY_NAME; -import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import javax.persistence.Entity; import javax.persistence.Id; -import javax.persistence.metamodel.EntityType; import org.hibernate.SessionFactory; +import org.hibernate.query.Query; import org.hibernate.search.engine.backend.analysis.AnalyzerNames; import org.hibernate.search.mapper.orm.cfg.HibernateOrmMapperSettings; import org.hibernate.search.mapper.orm.mapping.HibernateOrmSearchMappingConfigurer; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.ProgrammaticMappingConfigurationContext; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; -import org.hibernate.search.util.common.serializzation.spi.SerializationUtils; +import org.hibernate.search.mapper.pojo.route.DocumentRoutesDescriptor; +import org.hibernate.search.util.common.serialization.spi.SerializationUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmUtils; @@ -34,7 +34,7 @@ import org.junit.Rule; import org.junit.Test; -public class OutboxSyntheticEntityMappingIT { +public class OutboxTableAutomaticIndexingStrategyIT { private static final String INDEX_NAME = "IndexedEntity"; @@ -63,54 +63,42 @@ public void setup() { } ) .withProperty( HibernateOrmMapperSettings.FILL_OUTBOX_TABLE, true ) + .withProperty( + "hibernate.search.automatic_indexing.strategy", + "org.hibernate.search.mapper.orm.outbox.impl.OutboxTableAutomaticIndexingStrategy" + ) .setup( IndexedEntity.class ); backendMock.verifyExpectationsMet(); } @Test - public void index_workingAsUsual() { + public void test() { OrmUtils.withinTransaction( sessionFactory, session -> { IndexedEntity indexedPojo = new IndexedEntity( 1, "Using some text here" ); session.save( indexedPojo ); - - backendMock.expectWorks( IndexedEntity.class.getSimpleName() ).add( "1", b -> b - .field( "text", "Using some text here" ) - ).createdThenExecuted(); } ); - } - - @Test - public void saveAndLoadOutboxSyntheticEntity() { - EntityType entityType = sessionFactory.getMetamodel().getEntities().iterator().next(); - String entityName = entityType.getName(); - AtomicInteger id = new AtomicInteger(); OrmUtils.withinTransaction( sessionFactory, session -> { - HashMap entityData = new HashMap<>(); - entityData.put( ENTITY_NAME_PROPERTY_NAME, entityName ); - entityData.put( ENTITY_ID_PROPERTY_NAME, "739" ); - entityData.put( ROUTING_KEY_PROPERTY_NAME, SerializationUtils.serialize( "fake-routing-key" ) ); - - session.save( OUTBOX_ENTITY_NAME, entityData ); + Query query = session.createQuery( "select e from " + OUTBOX_ENTITY_NAME + " e", Map.class ); - @SuppressWarnings("unchecked") // this field is defined as integer - Integer generatedId = (Integer) entityData.get( "id" ); + List list = query.list(); + assertThat( list ).hasSize( 1 ); - id.set( generatedId ); - } ); + Map load = list.get( 0 ); + assertThat( load ).containsEntry( ENTITY_NAME_PROPERTY_NAME, "IndexedEntity" ); + assertThat( load ).containsEntry( ENTITY_ID_PROPERTY_NAME, "1" ); - OrmUtils.withinTransaction( sessionFactory, session -> { - @SuppressWarnings("unchecked") // synthetic entities are loaded as map - Map load = (Map) session.load( OUTBOX_ENTITY_NAME, id.get() ); - assertThat( load ).isNotNull(); + byte[] serializedRoutingKeys = (byte[]) load.get( ROUTE_PROPERTY_NAME ); + DocumentRoutesDescriptor routesDescriptor = SerializationUtils.deserialize( + DocumentRoutesDescriptor.class, serializedRoutingKeys ); - assertThat( load ).containsEntry( ENTITY_NAME_PROPERTY_NAME, entityName ); - assertThat( load ).containsEntry( ENTITY_ID_PROPERTY_NAME, "739" ); - assertThat( load ).containsEntry( ROUTING_KEY_PROPERTY_NAME, SerializationUtils.serialize( "fake-routing-key" ) ); + assertThat( routesDescriptor ).isNotNull(); + assertThat( routesDescriptor.currentRoute().routingKey() ).isNull(); + assertThat( routesDescriptor.previousRoutes() ).isEmpty(); } ); } - @Entity + @Entity(name = "IndexedEntity") public static class IndexedEntity { @Id