Skip to content

Commit 7ba1873

Browse files
committed
Run some REST tests against a cluster running in docker containers (#39515)
* Run REST tests against a cluster running on docker Closes #38053
1 parent ea5513f commit 7ba1873

File tree

8 files changed

+474
-17
lines changed

8 files changed

+474
-17
lines changed

buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void apply(Project project) {
120120

121121
extension.fixtures
122122
.matching(fixtureProject -> fixtureProject.equals(project) == false)
123-
.all(fixtureProject -> project.evaluationDependsOn(fixtureProject.getPath()));
123+
.all(fixtureProject -> project.evaluationDependsOn(fixtureProject.getPath()));
124124

125125
conditionTaskByType(tasks, extension, Test.class);
126126
conditionTaskByType(tasks, extension, getTaskClass("org.elasticsearch.gradle.test.RestIntegTestTask"));

distribution/docker/build.gradle

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import org.elasticsearch.gradle.MavenFilteringHack
44
import org.elasticsearch.gradle.VersionProperties
55
import org.elasticsearch.gradle.testfixtures.TestFixturesPlugin
66

7-
apply plugin: 'base'
7+
apply plugin: 'elasticsearch.standalone-rest-test'
88
apply plugin: 'elasticsearch.test.fixtures'
99

1010
configurations {
1111
dockerPlugins
1212
dockerSource
1313
ossDockerSource
14+
restSpec
1415
}
1516

1617
dependencies {
1718
dockerSource project(path: ":distribution:archives:linux-tar")
1819
ossDockerSource project(path: ":distribution:archives:oss-linux-tar")
20+
restSpec project(':rest-api-spec')
1921
}
2022

2123
ext.expansions = { oss, local ->
@@ -77,20 +79,65 @@ void addCopyDockerContextTask(final boolean oss) {
7779
}
7880
}
7981

82+
def createAndSetWritable (Object... locations) {
83+
locations.each { location ->
84+
File file = file(location)
85+
file.mkdirs()
86+
file.setWritable(true, false)
87+
}
88+
}
89+
90+
task copyKeystore(type: Sync) {
91+
from project(':x-pack:plugin:core')
92+
.file('src/test/resources/org/elasticsearch/xpack/security/transport/ssl/certs/simple/testnode.jks')
93+
into "${buildDir}/certs"
94+
doLast {
95+
file("${buildDir}/certs").setReadable(true, false)
96+
file("${buildDir}/certs/testnode.jks").setReadable(true, false)
97+
}
98+
}
99+
80100
preProcessFixture {
101+
if (TestFixturesPlugin.dockerComposeSupported()) {
102+
dependsOn assemble
103+
}
104+
dependsOn copyKeystore
105+
doLast {
106+
// tests expect to have an empty repo
107+
project.delete(
108+
"${buildDir}/repo",
109+
"${buildDir}/oss-repo"
110+
)
111+
createAndSetWritable(
112+
"${buildDir}/repo",
113+
"${buildDir}/oss-repo",
114+
"${buildDir}/logs/default-1",
115+
"${buildDir}/logs/default-2",
116+
"${buildDir}/logs/oss-1",
117+
"${buildDir}/logs/oss-2"
118+
)
119+
}
120+
}
121+
122+
processTestResources {
123+
from ({ zipTree(configurations.restSpec.singleFile) }) {
124+
include 'rest-api-spec/api/**'
125+
}
126+
from project(':x-pack:plugin:core')
127+
.file('src/test/resources/org/elasticsearch/xpack/security/transport/ssl/certs/simple/testnode.jks')
128+
dependsOn configurations.restSpec
81129
// don't add the tasks to build the docker images if we have no way of testing them
82130
if (TestFixturesPlugin.dockerComposeSupported()) {
83131
dependsOn assemble
84132
}
85133
}
86134

87-
postProcessFixture.doLast {
88-
println "docker default distro is on port: ${ext."test.fixtures.elasticsearch-default.tcp.9200"}, " +
89-
"oss is on: ${ext."test.fixtures.elasticsearch-oss.tcp.9200"}"
135+
task integTest(type: Test) {
136+
maxParallelForks = '1'
137+
include '**/*IT.class'
90138
}
91139

92-
// TODO: Add some actual tests, this will just check that the TPC port in the container is up
93-
check.dependsOn postProcessFixture
140+
check.dependsOn integTest
94141

95142
void addBuildDockerImage(final boolean oss) {
96143
final Task buildDockerImageTask = task(taskName("build", oss, "DockerImage"), type: LoggedExec) {
Lines changed: 121 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,133 @@
11
# Only used for testing the docker images
22
version: '3'
33
services:
4-
elasticsearch-default:
4+
elasticsearch-default-1:
55
image: elasticsearch:test
66
environment:
7+
- node.name=elasticsearch-default-1
8+
- cluster.initial_master_nodes=elasticsearch-default-1,elasticsearch-default-2
9+
- discovery.seed_hosts=elasticsearch-default-2:9300
710
- cluster.name=elasticsearch-default
8-
- discovery.type=single-node
11+
- bootstrap.memory_lock=true
12+
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
13+
- path.repo=/tmp/es-repo
14+
- node.attr.testattr=test
15+
- cluster.routing.allocation.disk.watermark.low=1b
16+
- cluster.routing.allocation.disk.watermark.high=1b
17+
- cluster.routing.allocation.disk.watermark.flood_stage=1b
18+
- script.max_compilations_rate=2048/1m
19+
- node.store.allow_mmap=false
20+
- xpack.security.enabled=true
21+
- xpack.security.transport.ssl.enabled=true
22+
- xpack.security.http.ssl.enabled=true
23+
- xpack.security.authc.token.enabled=true
24+
- xpack.security.audit.enabled=true
25+
- xpack.security.authc.realms.file.file1.order=0
26+
- xpack.security.authc.realms.native.native1.order=1
27+
- xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/testnode.jks
28+
- xpack.security.http.ssl.keystore.path=/usr/share/elasticsearch/config/testnode.jks
29+
- xpack.http.ssl.verification_mode=certificate
30+
- xpack.security.transport.ssl.verification_mode=certificate
31+
- xpack.license.self_generated.type=trial
32+
volumes:
33+
- ./build/repo:/tmp/es-repo
34+
- ./build/certs/testnode.jks:/usr/share/elasticsearch/config/testnode.jks
35+
- ./build/logs/default-1:/usr/share/elasticsearch/logs
36+
- ./docker-test-entrypoint.sh:/docker-test-entrypoint.sh
937
ports:
1038
- "9200"
11-
elasticsearch-oss:
12-
image: elasticsearch-oss:test
39+
ulimits:
40+
memlock:
41+
soft: -1
42+
hard: -1
43+
entrypoint: /docker-test-entrypoint.sh
44+
elasticsearch-default-2:
45+
image: elasticsearch:test
46+
environment:
47+
- node.name=elasticsearch-default-2
48+
- cluster.initial_master_nodes=elasticsearch-default-1,elasticsearch-default-2
49+
- discovery.seed_hosts=elasticsearch-default-1:9300
50+
- cluster.name=elasticsearch-default
51+
- bootstrap.memory_lock=true
52+
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
53+
- path.repo=/tmp/es-repo
54+
- node.attr.testattr=test
55+
- cluster.routing.allocation.disk.watermark.low=1b
56+
- cluster.routing.allocation.disk.watermark.high=1b
57+
- cluster.routing.allocation.disk.watermark.flood_stage=1b
58+
- script.max_compilations_rate=2048/1m
59+
- node.store.allow_mmap=false
60+
- xpack.security.enabled=true
61+
- xpack.security.transport.ssl.enabled=true
62+
- xpack.security.http.ssl.enabled=true
63+
- xpack.security.authc.token.enabled=true
64+
- xpack.security.audit.enabled=true
65+
- xpack.security.authc.realms.file.file1.order=0
66+
- xpack.security.authc.realms.native.native1.order=1
67+
- xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/testnode.jks
68+
- xpack.security.http.ssl.keystore.path=/usr/share/elasticsearch/config/testnode.jks
69+
- xpack.http.ssl.verification_mode=certificate
70+
- xpack.security.transport.ssl.verification_mode=certificate
71+
- xpack.license.self_generated.type=trial
72+
volumes:
73+
- ./build/repo:/tmp/es-repo
74+
- ./build/certs/testnode.jks:/usr/share/elasticsearch/config/testnode.jks
75+
- ./build/logs/default-2:/usr/share/elasticsearch/logs
76+
- ./docker-test-entrypoint.sh:/docker-test-entrypoint.sh
77+
ports:
78+
- "9200"
79+
ulimits:
80+
memlock:
81+
soft: -1
82+
hard: -1
83+
entrypoint: /docker-test-entrypoint.sh
84+
elasticsearch-oss-1:
85+
image: elasticsearch:test
86+
environment:
87+
- node.name=elasticsearch-oss-1
88+
- cluster.initial_master_nodes=elasticsearch-oss-1,elasticsearch-oss-2
89+
- discovery.seed_hosts=elasticsearch-oss-2:9300
90+
- cluster.name=elasticsearch-oss
91+
- bootstrap.memory_lock=true
92+
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
93+
- path.repo=/tmp/es-repo
94+
- node.attr.testattr=test
95+
- cluster.routing.allocation.disk.watermark.low=1b
96+
- cluster.routing.allocation.disk.watermark.high=1b
97+
- cluster.routing.allocation.disk.watermark.flood_stage=1b
98+
- script.max_compilations_rate=2048/1m
99+
- node.store.allow_mmap=false
100+
volumes:
101+
- ./build/oss-repo:/tmp/es-repo
102+
- ./build/logs/oss-1:/usr/share/elasticsearch/logs
103+
ports:
104+
- "9200"
105+
ulimits:
106+
memlock:
107+
soft: -1
108+
hard: -1
109+
elasticsearch-oss-2:
110+
image: elasticsearch:test
13111
environment:
112+
- node.name=elasticsearch-oss-2
113+
- cluster.initial_master_nodes=elasticsearch-oss-1,elasticsearch-oss-2
114+
- discovery.seed_hosts=elasticsearch-oss-1:9300
14115
- cluster.name=elasticsearch-oss
15-
- discovery.type=single-node
116+
- bootstrap.memory_lock=true
117+
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
118+
- path.repo=/tmp/es-repo
119+
- node.attr.testattr=test
120+
- cluster.routing.allocation.disk.watermark.low=1b
121+
- cluster.routing.allocation.disk.watermark.high=1b
122+
- cluster.routing.allocation.disk.watermark.flood_stage=1b
123+
- script.max_compilations_rate=2048/1m
124+
- node.store.allow_mmap=false
125+
volumes:
126+
- ./build/oss-repo:/tmp/es-repo
127+
- ./build/logs/oss-2:/usr/share/elasticsearch/logs
16128
ports:
17129
- "9200"
130+
ulimits:
131+
memlock:
132+
soft: -1
133+
hard: -1
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
cd /usr/share/elasticsearch/bin/
3+
./elasticsearch-users useradd x_pack_rest_user -p x-pack-test-password -r superuser || true
4+
echo "testnode" > /tmp/password
5+
cat /tmp/password | ./elasticsearch-keystore add -x -f -v 'xpack.security.transport.ssl.keystore.secure_password'
6+
cat /tmp/password | ./elasticsearch-keystore add -x -f -v 'xpack.security.http.ssl.keystore.secure_password'
7+
/usr/local/bin/docker-entrypoint.sh | tee > /usr/share/elasticsearch/logs/console.log

0 commit comments

Comments
 (0)