Skip to content

Commit

Permalink
HSEARCH-4674 Make java modules tests aware of testcontainers
Browse files Browse the repository at this point in the history
  • Loading branch information
marko-bekhta committed Nov 8, 2023
1 parent c5d89ac commit d0277b6
Show file tree
Hide file tree
Showing 19 changed files with 161 additions and 64 deletions.
10 changes: 10 additions & 0 deletions integrationtest/java/modules/orm-elasticsearch/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@
<artifactId>hibernate-search-backend-elasticsearch</artifactId>
</dependency>

<!-- Access to testcontainers -->
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-mapper-orm</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-backend-elasticsearch</artifactId>
</dependency>

<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-test-orm</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
requires org.hibernate.orm.core;
requires org.hibernate.search.mapper.orm;
requires org.hibernate.search.backend.elasticsearch;
// Access to testcontainers:
requires hibernate.search.util.internal.integrationtest.mapper.orm;
requires hibernate.search.util.internal.integrationtest.backend.elasticsearch;
// Since testcontainers is using log4j we need to explicitly require it to make things work:
requires org.apache.logging.log4j;

/*
* This is necessary in order to use SessionFactory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
*/
package org.hibernate.search.integrationtest.java.modules.orm.elasticsearch.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
Expand All @@ -21,6 +23,8 @@
import org.hibernate.search.mapper.orm.cfg.HibernateOrmMapperSettings;
import org.hibernate.search.mapper.orm.session.SearchSession;
import org.hibernate.search.util.common.AssertionFailure;
import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.SearchBackendContainer;
import org.hibernate.search.util.impl.integrationtest.mapper.orm.DatabaseContainer;
import org.hibernate.service.spi.ServiceRegistryImplementor;

public class AuthorService implements AutoCloseable {
Expand All @@ -32,15 +36,15 @@ public AuthorService() {
}

private SessionFactory createSessionFactory() {
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistryBuilder registryBuilder = applyConnectionProperties( new StandardServiceRegistryBuilder() );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) registryBuilder.build();
Metadata metadata = new MetadataSources( serviceRegistry ).addAnnotatedClass( Author.class ).buildMetadata();
SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder();
return sfb.build();
}

public void triggerValidationFailure() {
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistryBuilder registryBuilder = applyConnectionProperties( new StandardServiceRegistryBuilder() );
registryBuilder.applySetting( HibernateOrmMapperSettings.SCHEMA_MANAGEMENT_STRATEGY, "none" );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) registryBuilder.build();
Metadata metadata = new MetadataSources( serviceRegistry )
Expand All @@ -53,6 +57,38 @@ public void triggerValidationFailure() {
}
}

private StandardServiceRegistryBuilder applyConnectionProperties(StandardServiceRegistryBuilder registryBuilder) {
// DB properties:
Map<String, Object> db = new HashMap<>();
DatabaseContainer.configuration().add( db );
registryBuilder.applySettings( db );
// ES connection:
registryBuilder.applySetting( "hibernate.search.backend.uris", SearchBackendContainer.connectionUrl() );
// Other settings:

// # Hibernate ORM properties:
// ## Connection info: see above
registryBuilder.applySetting( "hibernate.hbm2ddl.auto", "create-drop" );
registryBuilder.applySetting( "hibernate.show_sql", true );
registryBuilder.applySetting( "hibernate.format_sql", true );
registryBuilder.applySetting( "hibernate.max_fetch_depth", 5 );
// We can't use classes from the hibernate-testing module unless we add an explicit dependency to that module.
// registryBuilder.applySetting( "hibernate.cache.region_prefix","hibernate.test");
// registryBuilder.applySetting( "hibernate.cache.region.factory_class", "org.hibernate.testing.cache.CachingRegionFactory");

// # Hibernate Search properties:
// ## Connection info: see above
registryBuilder.applySetting( "hibernate.search.indexing.plan.synchronization.strategy", "sync" );
registryBuilder.applySetting( "hibernate.search.backend.log.json_pretty_printing", "true" );
registryBuilder.applySetting(
"hibernate.search.backend.analysis.configurer",
org.hibernate.search.integrationtest.java.modules.orm.elasticsearch.config.MyElasticsearchAnalysisConfigurer.class
);


return registryBuilder;
}

public void add(String name) {
try ( Session session = sessionFactory.openSession() ) {
session.getTransaction().begin();
Expand Down

This file was deleted.

6 changes: 6 additions & 0 deletions integrationtest/java/modules/orm-lucene/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@
<artifactId>hibernate-search-backend-lucene</artifactId>
</dependency>

<!-- Access to testcontainers -->
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-mapper-orm</artifactId>
</dependency>

<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-test-orm</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,7 @@
*/
requires java.naming;

// Access to testcontainers:
requires hibernate.search.util.internal.integrationtest.mapper.orm;

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
*/
package org.hibernate.search.integrationtest.java.modules.orm.lucene.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
Expand All @@ -18,6 +20,7 @@
import org.hibernate.search.integrationtest.java.modules.orm.lucene.entity.Author;
import org.hibernate.search.mapper.orm.Search;
import org.hibernate.search.mapper.orm.session.SearchSession;
import org.hibernate.search.util.impl.integrationtest.mapper.orm.DatabaseContainer;
import org.hibernate.service.spi.ServiceRegistryImplementor;

public class AuthorService implements AutoCloseable {
Expand All @@ -29,13 +32,41 @@ public AuthorService() {
}

private SessionFactory createSessionFactory() {
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistryBuilder registryBuilder = applyConnectionProperties( new StandardServiceRegistryBuilder() );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) registryBuilder.build();
Metadata metadata = new MetadataSources( serviceRegistry ).addAnnotatedClass( Author.class ).buildMetadata();
SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder();
return sfb.build();
}

private StandardServiceRegistryBuilder applyConnectionProperties(StandardServiceRegistryBuilder registryBuilder) {
// DB properties:
Map<String, Object> db = new HashMap<>();
DatabaseContainer.configuration().add( db );
registryBuilder.applySettings( db );
// Other settings:

// # Hibernate ORM properties:
// ## Connection info: see above
registryBuilder.applySetting( "hibernate.hbm2ddl.auto", "create-drop" );
registryBuilder.applySetting( "hibernate.show_sql", true );
registryBuilder.applySetting( "hibernate.format_sql", true );
registryBuilder.applySetting( "hibernate.max_fetch_depth", 5 );
// We can't use classes from the hibernate-testing module unless we add an explicit dependency to that module.
// registryBuilder.applySetting( "hibernate.cache.region_prefix","hibernate.test");
// registryBuilder.applySetting( "hibernate.cache.region.factory_class", "org.hibernate.testing.cache.CachingRegionFactory");

// # Hibernate Search properties:
// ## Connection info: see above
registryBuilder.applySetting( "hibernate.search.backend.type", "lucene" );
registryBuilder.applySetting( "hibernate.search.indexing.plan.synchronization.strategy", "sync" );
registryBuilder.applySetting( "hibernate.search.backend.directory.type", "local-heap" );
registryBuilder.applySetting( "hibernate.search.backend.analysis.configurer",
org.hibernate.search.integrationtest.java.modules.orm.lucene.config.MyLuceneAnalysisConfigurer.class );

return registryBuilder;
}

public void add(String name) {
try ( Session session = sessionFactory.openSession() ) {
session.getTransaction().begin();
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@
<artifactId>byte-buddy</artifactId>
</dependency>

<!-- Access to testcontainers -->
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-mapper-orm</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-backend-elasticsearch</artifactId>
</dependency>

<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-test-orm</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
requires org.hibernate.search.mapper.orm;
requires org.hibernate.search.backend.elasticsearch;
requires org.hibernate.search.mapper.orm.outboxpolling;
// Access to testcontainers:
requires hibernate.search.util.internal.integrationtest.mapper.orm;
requires hibernate.search.util.internal.integrationtest.backend.elasticsearch;

/*
* This is necessary in order to use SessionFactory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
*/
package org.hibernate.search.integrationtest.java.modules.orm.elasticsearch.outboxpolling.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
Expand All @@ -21,6 +23,8 @@
import org.hibernate.search.mapper.orm.cfg.HibernateOrmMapperSettings;
import org.hibernate.search.mapper.orm.session.SearchSession;
import org.hibernate.search.util.common.AssertionFailure;
import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.SearchBackendContainer;
import org.hibernate.search.util.impl.integrationtest.mapper.orm.DatabaseContainer;
import org.hibernate.service.spi.ServiceRegistryImplementor;

public class AuthorService implements AutoCloseable {
Expand All @@ -32,15 +36,15 @@ public AuthorService() {
}

private SessionFactory createSessionFactory() {
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistryBuilder registryBuilder = applyConnectionProperties( new StandardServiceRegistryBuilder() );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) registryBuilder.build();
Metadata metadata = new MetadataSources( serviceRegistry ).addAnnotatedClass( Author.class ).buildMetadata();
SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder();
return sfb.build();
}

public void triggerValidationFailure() {
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistryBuilder registryBuilder = applyConnectionProperties( new StandardServiceRegistryBuilder() );
registryBuilder.applySetting( HibernateOrmMapperSettings.SCHEMA_MANAGEMENT_STRATEGY, "none" );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) registryBuilder.build();
Metadata metadata = new MetadataSources( serviceRegistry )
Expand All @@ -53,6 +57,33 @@ public void triggerValidationFailure() {
}
}

private StandardServiceRegistryBuilder applyConnectionProperties(StandardServiceRegistryBuilder registryBuilder) {
// DB properties:
Map<String, Object> db = new HashMap<>();
DatabaseContainer.configuration().add( db );
registryBuilder.applySettings( db );
// ES connection:
registryBuilder.applySetting( "hibernate.search.backend.uris", SearchBackendContainer.connectionUrl() );
// # Hibernate ORM properties:
// ## Connection info: see above
registryBuilder.applySetting( "hibernate.hbm2ddl.auto", "create-drop" );
registryBuilder.applySetting( "hibernate.show_sql", true );
registryBuilder.applySetting( "hibernate.format_sql", true );
registryBuilder.applySetting( "hibernate.max_fetch_depth", 5 );
// We can't use classes from the hibernate-testing module unless we add an explicit dependency to that module.
// registryBuilder.applySetting( "hibernate.cache.region_prefix","hibernate.test");
// registryBuilder.applySetting( "hibernate.cache.region.factory_class", "org.hibernate.testing.cache.CachingRegionFactory");

// # Hibernate Search properties:
// ## Connection info: see above
registryBuilder.applySetting( "hibernate.search.backend.log.json_pretty_printing", true );
registryBuilder.applySetting( "hibernate.search.coordination.strategy", "outbox-polling" );
registryBuilder.applySetting( "hibernate.search.backend.analysis.configurer",
org.hibernate.search.integrationtest.java.modules.orm.elasticsearch.outboxpolling.config.MyElasticsearchAnalysisConfigurer.class );

return registryBuilder;
}

public void add(String name) {
try ( Session session = sessionFactory.openSession() ) {
session.getTransaction().begin();
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@
<artifactId>hibernate-search-backend-elasticsearch</artifactId>
</dependency>

<!-- Access to testcontainers -->
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-mapper-pojo-standalone</artifactId>
<scope>test</scope>
<artifactId>hibernate-search-util-internal-integrationtest-backend-elasticsearch</artifactId>
</dependency>

<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-util-internal-integrationtest-backend-elasticsearch</artifactId>
<artifactId>hibernate-search-util-internal-integrationtest-mapper-pojo-standalone</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@
requires org.hibernate.search.backend.elasticsearch;
requires org.hibernate.search.mapper.pojo.standalone;

// Access to testcontainers:
requires hibernate.search.util.internal.integrationtest.backend.elasticsearch;
// Since testcontainers is using log4j we need to explicitly require it to make things work:
requires org.apache.logging.log4j;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.hibernate.search.mapper.pojo.standalone.mapping.StandalonePojoMappingConfigurer;
import org.hibernate.search.mapper.pojo.standalone.session.SearchSession;
import org.hibernate.search.mapper.pojo.work.IndexingPlanSynchronizationStrategy;
import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.SearchBackendContainer;

public class AuthorService implements AutoCloseable {

Expand All @@ -32,6 +33,7 @@ public AuthorService() {

private CloseableSearchMapping createSearchMapping() {
return SearchMapping.builder()
.property( "hibernate.search.backend.uris", SearchBackendContainer.connectionUrl() )
.property( "hibernate.search.backend.log.json_pretty_printing", true )
.property(
"hibernate.search.backend.analysis.configurer",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static Map<String, Object> connectionProperties() {
if ( "elasticsearch_pu".equals( PersistenceUnitTestUtil.getPersistenceUnitName() ) ) {
properties.put(
BackendSettings.backendKey( ElasticsearchBackendSettings.URIS ),
SearchBackendContainer.host() + ":" + SearchBackendContainer.mappedPort( 9200 )
SearchBackendContainer.connectionUrl()
);
}
DatabaseContainer.configuration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public String[] resolve(Class<?> testClass) {
testBackend = "lucene";
}
if ( "elasticsearch".equals( testBackend ) ) {
System.setProperty( "ES_HOSTS", SearchContainer.host() + ":" + SearchContainer.mappedPort( 9200 ) );
System.setProperty( "ES_HOSTS", SearchContainer.connectionUrl() );
}
DatabaseContainer.springConfiguration();
// The test profiles must be mentioned last, to allow them to override properties
Expand Down

0 comments on commit d0277b6

Please sign in to comment.