Skip to content

Commit cf3e46b

Browse files
authored
Improve integration test setup.
Original Pull Request #2072 Closes #2068
1 parent 1331e26 commit cf3e46b

19 files changed

+130
-36
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ target
2020
*.ipr
2121
*.iws
2222
.idea
23+
/.env

Diff for: pom.xml

+20-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<properties>
2121
<elasticsearch>7.16.3</elasticsearch>
22-
<log4j>2.17.0</log4j>
22+
<log4j>2.17.1</log4j>
2323
<netty>4.1.65.Final</netty>
2424
<springdata.commons>2.7.0-SNAPSHOT</springdata.commons>
2525
<testcontainers>1.16.2</testcontainers>
@@ -208,6 +208,25 @@
208208
</exclusions>
209209
</dependency>
210210

211+
<dependency>
212+
<groupId>org.slf4j</groupId>
213+
<artifactId>log4j-over-slf4j</artifactId>
214+
<version>${slf4j}</version>
215+
<scope>test</scope>
216+
</dependency>
217+
<dependency>
218+
<groupId>org.apache.logging.log4j</groupId>
219+
<artifactId>log4j-core</artifactId>
220+
<version>${log4j}</version>
221+
<scope>test</scope>
222+
</dependency>
223+
<dependency>
224+
<groupId>org.apache.logging.log4j</groupId>
225+
<artifactId>log4j-to-slf4j</artifactId>
226+
<version>${log4j}</version>
227+
<scope>test</scope>
228+
</dependency>
229+
211230
<dependency>
212231
<groupId>io.projectreactor.tools</groupId>
213232
<artifactId>blockhound-junit-platform</artifactId>

Diff for: src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,6 @@
8383
import org.springframework.data.elasticsearch.annotations.MultiField;
8484
import org.springframework.data.elasticsearch.annotations.ScriptedField;
8585
import org.springframework.data.elasticsearch.annotations.Setting;
86-
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
87-
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
88-
import org.springframework.data.elasticsearch.core.query.ScriptField;
8986
import org.springframework.data.elasticsearch.core.document.Explanation;
9087
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
9188
import org.springframework.data.elasticsearch.core.index.AliasAction;
@@ -150,7 +147,7 @@ public void before() {
150147
@Test
151148
@Order(java.lang.Integer.MAX_VALUE)
152149
void cleanup() {
153-
operations.indexOps(IndexCoordinates.of("*")).delete();
150+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
154151
}
155152

156153
@Test // DATAES-106

Diff for: src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplateIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public void beforeEach() {
125125
@Test
126126
@Order(java.lang.Integer.MAX_VALUE)
127127
void cleanup() {
128-
operations.indexOps(IndexCoordinates.of("*")).delete().block();
128+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete().block();
129129
}
130130
// endregion
131131

Diff for: src/test/java/org/springframework/data/elasticsearch/core/RuntimeFieldsIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void setUp() {
5555
@Test
5656
@Order(java.lang.Integer.MAX_VALUE)
5757
void cleanup() {
58-
operations.indexOps(IndexCoordinates.of("*")).delete();
58+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
5959
}
6060

6161
@Test // #1971

Diff for: src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@
4848
import org.springframework.context.annotation.Import;
4949
import org.springframework.data.annotation.Id;
5050
import org.springframework.data.elasticsearch.annotations.*;
51-
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
52-
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
5351
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
5452
import org.springframework.data.elasticsearch.core.IndexOperations;
5553
import org.springframework.data.elasticsearch.core.MappingContextBaseTests;
5654
import org.springframework.data.elasticsearch.core.SearchHits;
5755
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
5856
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
5957
import org.springframework.data.elasticsearch.core.query.IndexQuery;
58+
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
59+
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
6060
import org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm;
6161
import org.springframework.data.elasticsearch.core.suggest.Completion;
6262
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
@@ -107,7 +107,7 @@ public void before() {
107107
@Test
108108
@Order(java.lang.Integer.MAX_VALUE)
109109
void cleanup() {
110-
operations.indexOps(IndexCoordinates.of("*")).delete();
110+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
111111
}
112112

113113
@Test

Diff for: src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void before() {
6161
@Test
6262
@Order(java.lang.Integer.MAX_VALUE)
6363
void cleanup() {
64-
operations.indexOps(IndexCoordinates.of("*")).delete();
64+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
6565
}
6666

6767
@Test // DATAES-706

Diff for: src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ClusterConnection.java

+50-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.springframework.data.elasticsearch.junit.jupiter;
1717

18+
import static org.springframework.util.StringUtils.*;
19+
1820
import java.io.InputStream;
1921
import java.util.Collections;
2022
import java.util.LinkedHashMap;
@@ -24,6 +26,8 @@
2426
import org.apache.commons.logging.Log;
2527
import org.apache.commons.logging.LogFactory;
2628
import org.junit.jupiter.api.extension.ExtensionContext;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
2731
import org.springframework.lang.Nullable;
2832
import org.testcontainers.elasticsearch.ElasticsearchContainer;
2933
import org.testcontainers.utility.DockerImageName;
@@ -40,6 +44,9 @@ public class ClusterConnection implements ExtensionContext.Store.CloseableResour
4044

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

47+
private static final String ENV_ELASTICSEARCH_HOST = "DATAES_ELASTICSEARCH_HOST";
48+
private static final String ENV_ELASTICSEARCH_PORT = "DATAES_ELASTICSEARCH_PORT";
49+
4350
private static final String SDE_TESTCONTAINER_IMAGE_NAME = "sde.testcontainers.image-name";
4451
private static final String SDE_TESTCONTAINER_IMAGE_VERSION = "sde.testcontainers.image-version";
4552
private static final int ELASTICSEARCH_DEFAULT_PORT = 9200;
@@ -52,7 +59,7 @@ public class ClusterConnection implements ExtensionContext.Store.CloseableResour
5259
* creates the ClusterConnection, starting a container
5360
*/
5461
public ClusterConnection() {
55-
clusterConnectionInfo = startElasticsearchContainer();
62+
clusterConnectionInfo = createClusterConnectionInfo();
5663

5764
if (clusterConnectionInfo != null) {
5865
if (LOGGER.isDebugEnabled()) {
@@ -79,6 +86,32 @@ public ClusterConnectionInfo getClusterConnectionInfo() {
7986
return clusterConnectionInfo;
8087
}
8188

89+
@Nullable
90+
private ClusterConnectionInfo createClusterConnectionInfo() {
91+
92+
String host = System.getenv(ENV_ELASTICSEARCH_HOST);
93+
94+
if (hasText(host)) {
95+
96+
String envPort = System.getenv(ENV_ELASTICSEARCH_PORT);
97+
98+
int port = 9200;
99+
100+
try {
101+
if (hasText(envPort)) {
102+
port = Integer.parseInt(envPort);
103+
}
104+
} catch (NumberFormatException e) {
105+
LOGGER.warn("DATAES_ELASTICSEARCH_PORT does not contain a number");
106+
}
107+
108+
return ClusterConnectionInfo.builder().withIntegrationtestEnvironment(IntegrationtestEnvironment.get())
109+
.withHostAndPort(host, port).build();
110+
}
111+
112+
return startElasticsearchContainer();
113+
}
114+
82115
@Nullable
83116
private ClusterConnectionInfo startElasticsearchContainer() {
84117

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

98131
DockerImageName dockerImageName = getDockerImageName(testcontainersProperties);
99132

100-
ElasticsearchContainer elasticsearchContainer = new ElasticsearchContainer(dockerImageName)
133+
ElasticsearchContainer elasticsearchContainer = new SpringDataElasticsearchContainer(dockerImageName)
101134
.withEnv(testcontainersProperties);
102135
elasticsearchContainer.start();
103136

@@ -169,4 +202,19 @@ public void close() {
169202
LOGGER.debug("closed");
170203
}
171204
}
205+
206+
private static class SpringDataElasticsearchContainer extends ElasticsearchContainer {
207+
208+
public SpringDataElasticsearchContainer(DockerImageName dockerImageName) {
209+
super(dockerImageName);
210+
}
211+
212+
/*
213+
* don't need that fancy docker whale in the logger name, this makes configuration of the log level impossible
214+
*/
215+
@Override
216+
protected Logger logger() {
217+
return LoggerFactory.getLogger(SpringDataElasticsearchContainer.class);
218+
}
219+
}
172220
}

Diff for: src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ElasticsearchRestTemplateConfiguration.java

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.springframework.data.elasticsearch.junit.jupiter;
1717

18+
import static org.springframework.util.StringUtils.*;
19+
1820
import java.time.Duration;
1921

2022
import org.elasticsearch.client.RestHighLevelClient;
@@ -60,6 +62,13 @@ public RestHighLevelClient elasticsearchClient() {
6062
.usingSsl();
6163
}
6264

65+
String user = System.getenv("DATAES_ELASTICSEARCH_USER");
66+
String password = System.getenv("DATAES_ELASTICSEARCH_PASSWORD");
67+
68+
if (hasText(user) && hasText(password)) {
69+
configurationBuilder.withBasicAuth(user, password);
70+
}
71+
6372
return RestClients.create(configurationBuilder //
6473
.withConnectTimeout(Duration.ofSeconds(20)) //
6574
.withSocketTimeout(Duration.ofSeconds(20)) //

Diff for: src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ReactiveElasticsearchRestTemplateConfiguration.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
*/
1616
package org.springframework.data.elasticsearch.junit.jupiter;
1717

18+
import static org.springframework.util.StringUtils.*;
19+
1820
import java.time.Duration;
1921

2022
import org.springframework.beans.factory.annotation.Autowired;
2123
import org.springframework.context.annotation.Configuration;
22-
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;
23-
import org.springframework.data.elasticsearch.config.AbstractReactiveElasticsearchConfiguration;
2424
import org.springframework.data.elasticsearch.client.ClientConfiguration;
25+
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;
2526
import org.springframework.data.elasticsearch.client.reactive.ReactiveRestClients;
27+
import org.springframework.data.elasticsearch.config.AbstractReactiveElasticsearchConfiguration;
2628
import org.springframework.data.elasticsearch.core.RefreshPolicy;
2729

2830
/**
@@ -53,6 +55,13 @@ public ReactiveElasticsearchClient reactiveElasticsearchClient() {
5355
.usingSsl();
5456
}
5557

58+
String user = System.getenv("DATAES_ELASTICSEARCH_USER");
59+
String password = System.getenv("DATAES_ELASTICSEARCH_PASSWORD");
60+
61+
if (hasText(user) && hasText(password)) {
62+
configurationBuilder.withBasicAuth(user, password);
63+
}
64+
5665
return ReactiveRestClients.create(configurationBuilder //
5766
.withConnectTimeout(Duration.ofSeconds(20)) //
5867
.withSocketTimeout(Duration.ofSeconds(20)) //

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/cdi/ElasticsearchOperationsProducer.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.springframework.data.elasticsearch.repositories.cdi;
1717

18+
import static org.springframework.util.StringUtils.*;
19+
1820
import javax.annotation.PreDestroy;
1921
import javax.enterprise.context.ApplicationScoped;
2022
import javax.enterprise.inject.Produces;
@@ -56,8 +58,17 @@ public RestHighLevelClient elasticsearchClient() {
5658
// we rely on the tests being run with the SpringDataElasticsearchExtension class that sets up a containerized ES.
5759
ClusterConnectionInfo connectionInfo = ClusterConnection.clusterConnectionInfo();
5860

59-
ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
60-
.connectedTo(connectionInfo.getHost() + ':' + connectionInfo.getHttpPort()) //
61+
ClientConfiguration.TerminalClientConfigurationBuilder configurationBuilder = ClientConfiguration.builder() //
62+
.connectedTo(connectionInfo.getHost() + ':' + connectionInfo.getHttpPort());
63+
64+
String user = System.getenv("DATAES_ELASTICSEARCH_USER");
65+
String password = System.getenv("DATAES_ELASTICSEARCH_PASSWORD");
66+
67+
if (hasText(user) && hasText(password)) {
68+
configurationBuilder.withBasicAuth(user, password);
69+
}
70+
71+
ClientConfiguration clientConfiguration = configurationBuilder //
6172
.build();
6273

6374
return RestClients.create(clientConfiguration).rest();

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void before() {
5252
@Test
5353
@Order(java.lang.Integer.MAX_VALUE)
5454
void cleanup() {
55-
operations.indexOps(IndexCoordinates.of("*")).delete();
55+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
5656
}
5757

5858
@Test

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void before() {
5151
@Test
5252
@Order(java.lang.Integer.MAX_VALUE)
5353
void cleanup() {
54-
operations.indexOps(IndexCoordinates.of("*")).delete();
54+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
5555
}
5656

5757
@Test

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryIntegrationTests.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void before() {
9393
@Test
9494
@org.junit.jupiter.api.Order(java.lang.Integer.MAX_VALUE)
9595
void cleanup() {
96-
operations.indexOps(IndexCoordinates.of("*")).delete();
96+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
9797
}
9898

9999
@Test
@@ -1654,9 +1654,7 @@ void shouldStreamSearchHitsWithQueryAnnotatedMethod() {
16541654
void shouldBeAbleToUseCollectionInQueryAnnotatedMethod() {
16551655
List<SampleEntity> entities = createSampleEntities("abc", 20);
16561656
repository.saveAll(entities);
1657-
List<String> ids = entities.stream()
1658-
.map(SampleEntity::getId)
1659-
.limit(7) // Just get subset
1657+
List<String> ids = entities.stream().map(SampleEntity::getId).limit(7) // Just get subset
16601658
.collect(Collectors.toList());
16611659

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

1670-
16711668
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
16721669

16731670
List<SampleEntity> entities = new ArrayList<>();

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/doubleid/DoubleIDRepositoryIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void before() {
5858
@Test
5959
@Order(Integer.MAX_VALUE)
6060
public void cleanup() {
61-
operations.indexOps(IndexCoordinates.of("*")).delete();
61+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
6262
}
6363

6464
@Test

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void before() {
6464
@Test
6565
@Order(Integer.MAX_VALUE)
6666
void cleanup() {
67-
operations.indexOps(IndexCoordinates.of("*")).delete();
67+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
6868
}
6969

7070
@Test // DATAES-64

Diff for: src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/ReactiveQueryKeywordsIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ void setUp() {
7575
@Test
7676
@Order(java.lang.Integer.MAX_VALUE)
7777
void cleanup() {
78-
operations.indexOps(IndexCoordinates.of("*")).delete().block();
78+
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete().block();
7979
}
8080
// endregion
8181

Diff for: src/test/java/org/springframework/data/elasticsearch/utils/IndexNameProvider.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package org.springframework.data.elasticsearch.utils;
1717

1818
/**
19-
* Class providing an index name with a prefix and a index number
19+
* Class providing an index name witInCo
2020
*
2121
* @author Peter-Josef Meisch
2222
*/
@@ -41,4 +41,11 @@ public void increment() {
4141
public String indexName() {
4242
return indexName;
4343
}
44+
45+
/**
46+
* @since 4.4
47+
*/
48+
public String getPrefix() {
49+
return prefix;
50+
}
4451
}

0 commit comments

Comments
 (0)