Skip to content

Commit 8392e24

Browse files
authored
fix: build failed when run with elasticsearch image in integration tests
1 parent d164ccf commit 8392e24

File tree

3 files changed

+58
-22
lines changed

3 files changed

+58
-22
lines changed

.github/workflows/elasticsearch.yml

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,32 @@ jobs:
1111
env:
1212
ELASTICSEARCH_SERVER: true
1313
steps:
14-
- uses: actions/checkout@v3
15-
- uses: actions/setup-java@v3
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-java@v4
1616
with:
1717
distribution: 'temurin'
1818
java-version: '21'
1919
cache: 'maven'
20-
- run: export SEARCH_ENGINE_DOCKERFILE="docker/elasticsearch8/Dockerfile"; mvn clean install
20+
- name: Cache Maven packages
21+
uses: actions/cache@v5
22+
with:
23+
path: ~/.m2/repository
24+
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
25+
restore-keys: ${{ runner.os }}-maven
26+
- run: export SEARCH_ENGINE_DOCKERFILE="docker/elasticsearch8/Dockerfile" && mvn clean install
2127
opensearch2:
2228
runs-on: ubuntu-latest
2329
steps:
24-
- uses: actions/checkout@v3
25-
- uses: actions/setup-java@v3
30+
- uses: actions/checkout@v4
31+
- uses: actions/setup-java@v4
2632
with:
2733
distribution: 'temurin'
2834
java-version: '21'
2935
cache: 'maven'
30-
- run: export SEARCH_ENGINE_DOCKERFILE="docker/opensearch2/Dockerfile"; mvn clean install
36+
- name: Cache Maven packages
37+
uses: actions/cache@v5
38+
with:
39+
path: ~/.m2/repository
40+
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
41+
restore-keys: ${{ runner.os }}-maven
42+
- run: export SEARCH_ENGINE_DOCKERFILE="docker/opensearch2/Dockerfile" && mvn clean install

pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,20 @@
309309
<version>${folio-spring-support.version}</version>
310310
<scope>test</scope>
311311
</dependency>
312+
313+
<dependency>
314+
<groupId>org.testcontainers</groupId>
315+
<artifactId>testcontainers-elasticsearch</artifactId>
316+
<version>2.0.2</version>
317+
<scope>test</scope>
318+
</dependency>
319+
320+
<dependency>
321+
<groupId>org.opensearch</groupId>
322+
<artifactId>opensearch-testcontainers</artifactId>
323+
<version>4.1.0</version>
324+
<scope>test</scope>
325+
</dependency>
312326
</dependencies>
313327

314328
<pluginRepositories>

src/test/java/org/folio/support/extension/impl/ElasticSearchContainerExtension.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
import org.junit.jupiter.api.extension.AfterAllCallback;
66
import org.junit.jupiter.api.extension.BeforeAllCallback;
77
import org.junit.jupiter.api.extension.ExtensionContext;
8+
import org.opensearch.testcontainers.OpenSearchContainer;
89
import org.testcontainers.containers.GenericContainer;
10+
import org.testcontainers.elasticsearch.ElasticsearchContainer;
911
import org.testcontainers.images.builder.ImageFromDockerfile;
12+
import org.testcontainers.utility.DockerImageName;
1013

1114
@Log4j2
1215
public class ElasticSearchContainerExtension implements BeforeAllCallback, AfterAllCallback {
@@ -30,6 +33,19 @@ public void afterAll(ExtensionContext context) {
3033
System.clearProperty(SPRING_PROPERTY_NAME);
3134
}
3235

36+
private static GenericContainer<?> buildSearchContainer(String dockerfile, String imageTag) {
37+
if (dockerfile.contains("opensearch")) {
38+
return new OpenSearchContainer<>(
39+
DockerImageName.parse(imageTag)
40+
.asCompatibleSubstituteFor("opensearchproject/opensearch"));
41+
} else {
42+
return new ElasticsearchContainer(
43+
DockerImageName.parse(imageTag)
44+
.asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch"))
45+
.withEnv("xpack.security.enabled", "false");
46+
}
47+
}
48+
3349
private String getSearchUrl() {
3450
return "http://" + CONTAINER.getHost() + ":" + CONTAINER.getMappedPort(9200);
3551
}
@@ -38,26 +54,20 @@ private static GenericContainer<?> createContainer() {
3854
var dockerfile = System.getenv().getOrDefault("SEARCH_ENGINE_DOCKERFILE", DEFAULT_DOCKERFILE);
3955
log.info("search engine dockerfile: {}", dockerfile);
4056

41-
// Verify dockerfile exists
4257
Path dockerfilePath = Path.of(dockerfile);
4358
if (!dockerfilePath.toFile().exists()) {
4459
throw new RuntimeException("Dockerfile not found at: " + dockerfile);
4560
}
4661

47-
try {
48-
var container = new GenericContainer<>(new ImageFromDockerfile(IMAGE_NAME, false)
49-
.withDockerfile(dockerfilePath))
50-
.withEnv("discovery.type", "single-node")
51-
.withExposedPorts(9200);
52-
if (dockerfile.contains("opensearch")) {
53-
container.withEnv("DISABLE_SECURITY_PLUGIN", "true");
54-
} else { // elasticsearch
55-
container.withEnv("xpack.security.enabled", "false");
56-
}
57-
return container;
58-
} catch (Exception e) {
59-
log.error("Failed to create container with dockerfile: {}", dockerfile, e);
60-
throw e;
61-
}
62+
String imageTag = buildImage(dockerfilePath);
63+
return buildSearchContainer(dockerfile, imageTag);
64+
}
65+
66+
private static String buildImage(Path dockerfilePath) {
67+
new ImageFromDockerfile(IMAGE_NAME, false)
68+
.withDockerfile(dockerfilePath)
69+
.get();
70+
return IMAGE_NAME + ":latest";
6271
}
6372
}
73+

0 commit comments

Comments
 (0)