Skip to content

Improve integration test setup #2072

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ target
*.ipr
*.iws
.idea
/.env
21 changes: 20 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

<properties>
<elasticsearch>7.16.3</elasticsearch>
<log4j>2.17.0</log4j>
<log4j>2.17.1</log4j>
<netty>4.1.65.Final</netty>
<springdata.commons>2.7.0-SNAPSHOT</springdata.commons>
<testcontainers>1.16.2</testcontainers>
Expand Down Expand Up @@ -208,6 +208,25 @@
</exclusions>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>${log4j}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>io.projectreactor.tools</groupId>
<artifactId>blockhound-junit-platform</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,6 @@
import org.springframework.data.elasticsearch.annotations.MultiField;
import org.springframework.data.elasticsearch.annotations.ScriptedField;
import org.springframework.data.elasticsearch.annotations.Setting;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.ScriptField;
import org.springframework.data.elasticsearch.core.document.Explanation;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.data.elasticsearch.core.index.AliasAction;
Expand Down Expand Up @@ -150,7 +147,7 @@ public void before() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test // DATAES-106
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public void beforeEach() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete().block();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete().block();
}
// endregion

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void setUp() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test // #1971
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@
import org.springframework.context.annotation.Import;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.IndexOperations;
import org.springframework.data.elasticsearch.core.MappingContextBaseTests;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm;
import org.springframework.data.elasticsearch.core.suggest.Completion;
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
Expand Down Expand Up @@ -107,7 +107,7 @@ public void before() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void before() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test // DATAES-706
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package org.springframework.data.elasticsearch.junit.jupiter;

import static org.springframework.util.StringUtils.*;

import java.io.InputStream;
import java.util.Collections;
import java.util.LinkedHashMap;
Expand All @@ -24,6 +26,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable;
import org.testcontainers.elasticsearch.ElasticsearchContainer;
import org.testcontainers.utility.DockerImageName;
Expand All @@ -40,6 +44,9 @@ public class ClusterConnection implements ExtensionContext.Store.CloseableResour

private static final Log LOGGER = LogFactory.getLog(ClusterConnection.class);

private static final String ENV_ELASTICSEARCH_HOST = "DATAES_ELASTICSEARCH_HOST";
private static final String ENV_ELASTICSEARCH_PORT = "DATAES_ELASTICSEARCH_PORT";

private static final String SDE_TESTCONTAINER_IMAGE_NAME = "sde.testcontainers.image-name";
private static final String SDE_TESTCONTAINER_IMAGE_VERSION = "sde.testcontainers.image-version";
private static final int ELASTICSEARCH_DEFAULT_PORT = 9200;
Expand All @@ -52,7 +59,7 @@ public class ClusterConnection implements ExtensionContext.Store.CloseableResour
* creates the ClusterConnection, starting a container
*/
public ClusterConnection() {
clusterConnectionInfo = startElasticsearchContainer();
clusterConnectionInfo = createClusterConnectionInfo();

if (clusterConnectionInfo != null) {
if (LOGGER.isDebugEnabled()) {
Expand All @@ -79,6 +86,32 @@ public ClusterConnectionInfo getClusterConnectionInfo() {
return clusterConnectionInfo;
}

@Nullable
private ClusterConnectionInfo createClusterConnectionInfo() {

String host = System.getenv(ENV_ELASTICSEARCH_HOST);

if (hasText(host)) {

String envPort = System.getenv(ENV_ELASTICSEARCH_PORT);

int port = 9200;

try {
if (hasText(envPort)) {
port = Integer.parseInt(envPort);
}
} catch (NumberFormatException e) {
LOGGER.warn("DATAES_ELASTICSEARCH_PORT does not contain a number");
}

return ClusterConnectionInfo.builder().withIntegrationtestEnvironment(IntegrationtestEnvironment.get())
.withHostAndPort(host, port).build();
}

return startElasticsearchContainer();
}

@Nullable
private ClusterConnectionInfo startElasticsearchContainer() {

Expand All @@ -97,7 +130,7 @@ private ClusterConnectionInfo startElasticsearchContainer() {

DockerImageName dockerImageName = getDockerImageName(testcontainersProperties);

ElasticsearchContainer elasticsearchContainer = new ElasticsearchContainer(dockerImageName)
ElasticsearchContainer elasticsearchContainer = new SpringDataElasticsearchContainer(dockerImageName)
.withEnv(testcontainersProperties);
elasticsearchContainer.start();

Expand Down Expand Up @@ -169,4 +202,19 @@ public void close() {
LOGGER.debug("closed");
}
}

private static class SpringDataElasticsearchContainer extends ElasticsearchContainer {

public SpringDataElasticsearchContainer(DockerImageName dockerImageName) {
super(dockerImageName);
}

/*
* don't need that fancy docker whale in the logger name, this makes configuration of the log level impossible
*/
@Override
protected Logger logger() {
return LoggerFactory.getLogger(SpringDataElasticsearchContainer.class);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package org.springframework.data.elasticsearch.junit.jupiter;

import static org.springframework.util.StringUtils.*;

import java.time.Duration;

import org.elasticsearch.client.RestHighLevelClient;
Expand Down Expand Up @@ -60,6 +62,13 @@ public RestHighLevelClient elasticsearchClient() {
.usingSsl();
}

String user = System.getenv("DATAES_ELASTICSEARCH_USER");
String password = System.getenv("DATAES_ELASTICSEARCH_PASSWORD");

if (hasText(user) && hasText(password)) {
configurationBuilder.withBasicAuth(user, password);
}

return RestClients.create(configurationBuilder //
.withConnectTimeout(Duration.ofSeconds(20)) //
.withSocketTimeout(Duration.ofSeconds(20)) //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@
*/
package org.springframework.data.elasticsearch.junit.jupiter;

import static org.springframework.util.StringUtils.*;

import java.time.Duration;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;
import org.springframework.data.elasticsearch.config.AbstractReactiveElasticsearchConfiguration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;
import org.springframework.data.elasticsearch.client.reactive.ReactiveRestClients;
import org.springframework.data.elasticsearch.config.AbstractReactiveElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.RefreshPolicy;

/**
Expand Down Expand Up @@ -53,6 +55,13 @@ public ReactiveElasticsearchClient reactiveElasticsearchClient() {
.usingSsl();
}

String user = System.getenv("DATAES_ELASTICSEARCH_USER");
String password = System.getenv("DATAES_ELASTICSEARCH_PASSWORD");

if (hasText(user) && hasText(password)) {
configurationBuilder.withBasicAuth(user, password);
}

return ReactiveRestClients.create(configurationBuilder //
.withConnectTimeout(Duration.ofSeconds(20)) //
.withSocketTimeout(Duration.ofSeconds(20)) //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package org.springframework.data.elasticsearch.repositories.cdi;

import static org.springframework.util.StringUtils.*;

import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
Expand Down Expand Up @@ -56,8 +58,17 @@ public RestHighLevelClient elasticsearchClient() {
// we rely on the tests being run with the SpringDataElasticsearchExtension class that sets up a containerized ES.
ClusterConnectionInfo connectionInfo = ClusterConnection.clusterConnectionInfo();

ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
.connectedTo(connectionInfo.getHost() + ':' + connectionInfo.getHttpPort()) //
ClientConfiguration.TerminalClientConfigurationBuilder configurationBuilder = ClientConfiguration.builder() //
.connectedTo(connectionInfo.getHost() + ':' + connectionInfo.getHttpPort());

String user = System.getenv("DATAES_ELASTICSEARCH_USER");
String password = System.getenv("DATAES_ELASTICSEARCH_PASSWORD");

if (hasText(user) && hasText(password)) {
configurationBuilder.withBasicAuth(user, password);
}

ClientConfiguration clientConfiguration = configurationBuilder //
.build();

return RestClients.create(clientConfiguration).rest();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void before() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void before() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public void before() {
@Test
@org.junit.jupiter.api.Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test
Expand Down Expand Up @@ -1654,9 +1654,7 @@ void shouldStreamSearchHitsWithQueryAnnotatedMethod() {
void shouldBeAbleToUseCollectionInQueryAnnotatedMethod() {
List<SampleEntity> entities = createSampleEntities("abc", 20);
repository.saveAll(entities);
List<String> ids = entities.stream()
.map(SampleEntity::getId)
.limit(7) // Just get subset
List<String> ids = entities.stream().map(SampleEntity::getId).limit(7) // Just get subset
.collect(Collectors.toList());

List<SampleEntity> sampleEntities = repository.getByIds(ids);
Expand All @@ -1667,7 +1665,6 @@ void shouldBeAbleToUseCollectionInQueryAnnotatedMethod() {
assertThat(returnedIds).containsAll(ids);
}


private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {

List<SampleEntity> entities = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public void before() {
@Test
@Order(Integer.MAX_VALUE)
public void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public void before() {
@Test
@Order(Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}

@Test // DATAES-64
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void setUp() {
@Test
@Order(java.lang.Integer.MAX_VALUE)
void cleanup() {
operations.indexOps(IndexCoordinates.of("*")).delete().block();
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete().block();
}
// endregion

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
package org.springframework.data.elasticsearch.utils;

/**
* Class providing an index name with a prefix and a index number
* Class providing an index name witInCo
*
* @author Peter-Josef Meisch
*/
Expand All @@ -41,4 +41,11 @@ public void increment() {
public String indexName() {
return indexName;
}

/**
* @since 4.4
*/
public String getPrefix() {
return prefix;
}
}
Loading