Skip to content

Commit 3a5a601

Browse files
committed
HSEARCH-5464 Test different clients
1 parent b99f031 commit 3a5a601

File tree

12 files changed

+3160
-49
lines changed

12 files changed

+3160
-49
lines changed

backend/elasticsearch-client/elasticsearch-java-client/src/main/java/org/hibernate/search/backend/elasticsearch/client/elasticsearch/restclient/impl/ElasticsearchClientFactoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ private HttpAsyncClientBuilder customizeHttpClientConfig(HttpAsyncClientBuilder
261261
// .setSslContext(
262262
// SSLContextBuilder.create()
263263
// .loadTrustMaterial(null, new TrustAllStrategy())
264-
// .build()
264+
// .buildAsync()
265265
// )
266266
// .setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
267267
// .build()

backend/elasticsearch-client/opensearch-rest-client/src/main/java/org/hibernate/search/backend/elasticsearch/client/opensearch/lowlevel/impl/ElasticsearchClientFactoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ private HttpAsyncClientBuilder customizeHttpClientConfig(HttpAsyncClientBuilder
260260
// .setSslContext(
261261
// SSLContextBuilder.create()
262262
// .loadTrustMaterial(null, new TrustAllStrategy())
263-
// .build()
263+
// .buildAsync()
264264
// )
265265
// .setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
266266
// .build()

integrationtest/backend/elasticsearch/pom.xml

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@
1414

1515
<properties>
1616
<surefire.module>elasticsearch</surefire.module>
17+
18+
<failsafe.client.elasticsearch.reportsDirectory>${project.build.directory}/failsafe-reports/opensearch-rest</failsafe.client.elasticsearch.reportsDirectory>
19+
<failsafe.client.elasticsearch.summaryFile>${failsafe.client.elasticsearch.reportsDirectory}/failsafe-summary.xml</failsafe.client.elasticsearch.summaryFile>
20+
<failsafe.jvm.args.jacoco.client.elasticsearch></failsafe.jvm.args.jacoco.client.elasticsearch>
21+
22+
<failsafe.client.opensearch.reportsDirectory>${project.build.directory}/failsafe-reports/elasticsearch-rest</failsafe.client.opensearch.reportsDirectory>
23+
<failsafe.client.opensearch.summaryFile>${failsafe.client.opensearch.reportsDirectory}/failsafe-summary.xml</failsafe.client.opensearch.summaryFile>
24+
<failsafe.jvm.args.jacoco.client.opensearch></failsafe.jvm.args.jacoco.client.opensearch>
25+
26+
<failsafe.client.elasticsearch.java.reportsDirectory>${project.build.directory}/failsafe-reports/elasticsearch-java</failsafe.client.elasticsearch.java.reportsDirectory>
27+
<failsafe.client.elasticsearch.java.summaryFile>${failsafe.client.elasticsearch.java.reportsDirectory}/failsafe-summary.xml</failsafe.client.elasticsearch.java.summaryFile>
28+
<failsafe.jvm.args.jacoco.client.elasticsearch.java></failsafe.jvm.args.jacoco.client.elasticsearch.java>
1729
</properties>
1830

1931
<dependencies>
@@ -22,6 +34,14 @@
2234
<artifactId>hibernate-search-backend-elasticsearch</artifactId>
2335
<scope>test</scope>
2436
</dependency>
37+
<dependency>
38+
<groupId>org.hibernate.search</groupId>
39+
<artifactId>hibernate-search-backend-elasticsearch-client-opensearch-rest</artifactId>
40+
</dependency>
41+
<dependency>
42+
<groupId>org.hibernate.search</groupId>
43+
<artifactId>hibernate-search-backend-elasticsearch-client-elasticsearch-java</artifactId>
44+
</dependency>
2545

2646
<dependency>
2747
<groupId>org.hibernate.search</groupId>
@@ -66,10 +86,73 @@
6686
</goals>
6787
<configuration>
6888
<skip>${test.elasticsearch.skip}</skip>
89+
<reportNameSuffix>${surefire.executionIdentifier}-elasticsearch-rest</reportNameSuffix>
90+
<reportsDirectory>${failsafe.client.elasticsearch.reportsDirectory}</reportsDirectory>
91+
<summaryFile>${failsafe.client.elasticsearch.summaryFile}</summaryFile>
92+
<argLine>${failsafe.jvm.args.no-jacoco} @{failsafe.jvm.args.jacoco.client.elasticsearch}</argLine>
6993
<!-- WARNING: When using <dependenciesToScan>, be sure to set the Maven property surefire.module -->
7094
<dependenciesToScan>
7195
<dependency>${project.groupId}:hibernate-search-integrationtest-backend-tck</dependency>
7296
</dependenciesToScan>
97+
<classpathDependencyExcludes>
98+
<exclude>org.hibernate.search:hibernate-search-backend-elasticsearch-client-opensearch-rest</exclude>
99+
<exclude>org.hibernate.search:hibernate-search-backend-elasticsearch-client-elasticsearch-java</exclude>
100+
</classpathDependencyExcludes>
101+
<excludes>
102+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.client.ElasticsearchClientFactoryImplElasticsearchJavaIT</exclude>
103+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.client.ElasticsearchClientFactoryImplOpensearchIT</exclude>
104+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.ElasticsearchExtensionElasticsearchJavaIT</exclude>
105+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.ElasticsearchExtensionOpenSearchLowLevelIT</exclude>
106+
</excludes>
107+
</configuration>
108+
</execution>
109+
<execution>
110+
<id>it-opensearch-client</id>
111+
<goals>
112+
<goal>integration-test</goal>
113+
<goal>verify</goal>
114+
</goals>
115+
<configuration>
116+
<skip>${test.elasticsearch.skip}</skip>
117+
<reportNameSuffix>${surefire.executionIdentifier}-opensearch-rest</reportNameSuffix>
118+
<reportsDirectory>${failsafe.client.opensearch.reportsDirectory}</reportsDirectory>
119+
<summaryFile>${failsafe.client.opensearch.summaryFile}</summaryFile>
120+
<argLine>${failsafe.jvm.args.no-jacoco} @{failsafe.jvm.args.jacoco.client.opensearch}</argLine>
121+
<classpathDependencyExcludes>
122+
<!-- Do not remove the "default" client so that we can test this scenario where a user drops a dependency to a nondefault one -->
123+
<!-- <exclude>org.hibernate.search:hibernate-search-backend-elasticsearch-client-elasticsearch-rest</exclude>-->
124+
<exclude>org.hibernate.search:hibernate-search-backend-elasticsearch-client-elasticsearch-java</exclude>
125+
</classpathDependencyExcludes>
126+
<excludes>
127+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.client.ElasticsearchClientFactoryImplElasticsearchJavaIT</exclude>
128+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.client.ElasticsearchClientFactoryImplIT</exclude>
129+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.ElasticsearchExtensionLowLevelIT</exclude>
130+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.ElasticsearchExtensionElasticsearchJavaIT</exclude>
131+
</excludes>
132+
</configuration>
133+
</execution>
134+
<execution>
135+
<id>it-elasticsearch-java-client</id>
136+
<goals>
137+
<goal>integration-test</goal>
138+
<goal>verify</goal>
139+
</goals>
140+
<configuration>
141+
<skip>${test.elasticsearch.skip}</skip>
142+
<reportNameSuffix>${surefire.executionIdentifier}-elasticsearch-java</reportNameSuffix>
143+
<reportsDirectory>${failsafe.client.elasticsearch.java.reportsDirectory}</reportsDirectory>
144+
<summaryFile>${failsafe.client.elasticsearch.java.summaryFile}</summaryFile>
145+
<argLine>${failsafe.jvm.args.no-jacoco} @{failsafe.jvm.args.jacoco.client.elasticsearch.java}</argLine>
146+
<classpathDependencyExcludes>
147+
<exclude>org.hibernate.search:hibernate-search-backend-elasticsearch-client-elasticsearch-java</exclude>
148+
<exclude>org.hibernate.search:hibernate-search-backend-elasticsearch-client-opensearch-rest</exclude>
149+
</classpathDependencyExcludes>
150+
<excludes>
151+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.client.ElasticsearchClientFactoryImplIT</exclude>
152+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.client.ElasticsearchClientFactoryImplOpensearchIT</exclude>
153+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.ElasticsearchExtensionLowLevelIT</exclude>
154+
<exclude>org.hibernate.search.integrationtest.backend.elasticsearch.ElasticsearchExtensionOpenSearchLowLevelIT</exclude>
155+
</excludes>
73156
</configuration>
74157
</execution>
75158
</executions>
@@ -94,6 +177,60 @@
94177
</dependency>
95178
</dependencies>
96179
</profile>
180+
<profile>
181+
<id>coverage</id>
182+
<build>
183+
<plugins>
184+
<!-- We need to send the jacoco report of each test execution to a different file,
185+
otherwise Develocity won't be able to cache test executions. -->
186+
<plugin>
187+
<groupId>org.jacoco</groupId>
188+
<artifactId>jacoco-maven-plugin</artifactId>
189+
<executions>
190+
<execution>
191+
<id>jacoco-prepare-agent-integration</id>
192+
<configuration>
193+
<skip>true</skip>
194+
</configuration>
195+
</execution>
196+
<execution>
197+
<id>jacoco-prepare-agent-integration-elasticsearch</id>
198+
<phase>initialize</phase>
199+
<goals>
200+
<goal>prepare-agent-integration</goal>
201+
</goals>
202+
<configuration>
203+
<propertyName>failsafe.jvm.args.jacoco.client.elasticsearch</propertyName>
204+
<destFile>${project.build.directory}/${jacoco.environment.sub-directory}/elasticsearch/jacoco.exec</destFile>
205+
</configuration>
206+
</execution>
207+
<execution>
208+
<id>jacoco-prepare-agent-integration-elasticsearch-java</id>
209+
<phase>initialize</phase>
210+
<goals>
211+
<goal>prepare-agent-integration</goal>
212+
</goals>
213+
<configuration>
214+
<propertyName>failsafe.jvm.args.jacoco.client.elasticsearch.java</propertyName>
215+
<destFile>${project.build.directory}/${jacoco.environment.sub-directory}/elasticsearch-java/jacoco.exec</destFile>
216+
</configuration>
217+
</execution>
218+
<execution>
219+
<id>jacoco-prepare-agent-integration-opensearch</id>
220+
<phase>initialize</phase>
221+
<goals>
222+
<goal>prepare-agent-integration</goal>
223+
</goals>
224+
<configuration>
225+
<propertyName>failsafe.jvm.args.jacoco.client.opensearch</propertyName>
226+
<destFile>${project.build.directory}/${jacoco.environment.sub-directory}/opensearch/jacoco.exec</destFile>
227+
</configuration>
228+
</execution>
229+
</executions>
230+
</plugin>
231+
</plugins>
232+
</build>
233+
</profile>
97234
</profiles>
98235

99236
</project>
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.search.integrationtest.backend.elasticsearch;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
9+
10+
import org.hibernate.search.backend.elasticsearch.ElasticsearchBackend;
11+
import org.hibernate.search.engine.backend.Backend;
12+
import org.hibernate.search.engine.backend.document.IndexFieldReference;
13+
import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaElement;
14+
import org.hibernate.search.engine.backend.types.Projectable;
15+
import org.hibernate.search.engine.common.spi.SearchIntegration;
16+
import org.hibernate.search.integrationtest.backend.tck.testsupport.util.extension.SearchSetupHelper;
17+
import org.hibernate.search.util.common.SearchException;
18+
import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex;
19+
20+
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Test;
22+
import org.junit.jupiter.api.extension.RegisterExtension;
23+
24+
import co.elastic.clients.transport.rest5_client.low_level.Request;
25+
import co.elastic.clients.transport.rest5_client.low_level.Response;
26+
import co.elastic.clients.transport.rest5_client.low_level.Rest5Client;
27+
import org.apache.hc.client5.http.async.HttpAsyncClient;
28+
29+
class ElasticsearchExtensionElasticsearchJavaIT {
30+
31+
@RegisterExtension
32+
public final SearchSetupHelper setupHelper = SearchSetupHelper.create();
33+
34+
private final SimpleMappedIndex<IndexBinding> mainIndex = SimpleMappedIndex.of( IndexBinding::new ).name( "main" );
35+
36+
37+
private SearchIntegration integration;
38+
39+
@BeforeEach
40+
void setup() {
41+
this.integration = setupHelper.start().withIndexes( mainIndex ).setup().integration();
42+
}
43+
44+
@Test
45+
void backend_getClient() throws Exception {
46+
Backend backend = integration.backend();
47+
ElasticsearchBackend elasticsearchBackend = backend.unwrap( ElasticsearchBackend.class );
48+
Rest5Client restClient = elasticsearchBackend.client( Rest5Client.class );
49+
50+
// Test that the client actually works
51+
Response response = restClient.performRequest( new Request( "GET", "/" ) );
52+
assertThat( response.getStatusCode() ).isEqualTo( 200 );
53+
}
54+
55+
@Test
56+
void backend_getClient_error_invalidClass() {
57+
Backend backend = integration.backend();
58+
ElasticsearchBackend elasticsearchBackend = backend.unwrap( ElasticsearchBackend.class );
59+
60+
assertThatThrownBy( () -> elasticsearchBackend.client( HttpAsyncClient.class ) )
61+
.isInstanceOf( SearchException.class )
62+
.hasMessageContainingAll(
63+
"Invalid requested type for client",
64+
HttpAsyncClient.class.getName(),
65+
"The Elasticsearch low-level client can only be unwrapped to",
66+
Rest5Client.class.getName()
67+
);
68+
}
69+
70+
private static class IndexBinding {
71+
final IndexFieldReference<String> string;
72+
73+
IndexBinding(IndexSchemaElement root) {
74+
string = root.field( "string", f -> f.asString().projectable( Projectable.YES ) ).toReference();
75+
}
76+
}
77+
}

integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/ElasticsearchExtensionIT.java

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,7 @@
6868
import com.google.gson.JsonObject;
6969
import com.google.gson.JsonPrimitive;
7070

71-
import org.apache.http.nio.client.HttpAsyncClient;
7271
import org.assertj.core.api.InstanceOfAssertFactories;
73-
import org.elasticsearch.client.Request;
74-
import org.elasticsearch.client.Response;
75-
import org.elasticsearch.client.RestClient;
7672
import org.json.JSONException;
7773
import org.skyscreamer.jsonassert.JSONCompareMode;
7874

@@ -1057,32 +1053,6 @@ void backend_unwrap_error_unknownType() {
10571053
);
10581054
}
10591055

1060-
@Test
1061-
void backend_getClient() throws Exception {
1062-
Backend backend = integration.backend();
1063-
ElasticsearchBackend elasticsearchBackend = backend.unwrap( ElasticsearchBackend.class );
1064-
RestClient restClient = elasticsearchBackend.client( RestClient.class );
1065-
1066-
// Test that the client actually works
1067-
Response response = restClient.performRequest( new Request( "GET", "/" ) );
1068-
assertThat( response.getStatusLine().getStatusCode() ).isEqualTo( 200 );
1069-
}
1070-
1071-
@Test
1072-
void backend_getClient_error_invalidClass() {
1073-
Backend backend = integration.backend();
1074-
ElasticsearchBackend elasticsearchBackend = backend.unwrap( ElasticsearchBackend.class );
1075-
1076-
assertThatThrownBy( () -> elasticsearchBackend.client( HttpAsyncClient.class ) )
1077-
.isInstanceOf( SearchException.class )
1078-
.hasMessageContainingAll(
1079-
"Invalid requested type for client",
1080-
HttpAsyncClient.class.getName(),
1081-
"The Elasticsearch low-level client can only be unwrapped to",
1082-
RestClient.class.getName()
1083-
);
1084-
}
1085-
10861056
@Test
10871057
void mainIndex_unwrap() {
10881058
IndexManager mainIndexFromIntegration = integration.indexManager( mainIndex.name() );

0 commit comments

Comments
 (0)