2019-01-31 04:59:50 -05:00
|
|
|
import javax.net.ssl.HttpsURLConnection
|
|
|
|
import javax.net.ssl.KeyManager
|
|
|
|
import javax.net.ssl.SSLContext
|
|
|
|
import javax.net.ssl.TrustManagerFactory
|
|
|
|
import java.nio.charset.StandardCharsets
|
|
|
|
import java.security.KeyStore
|
|
|
|
import java.security.SecureRandom
|
|
|
|
|
2017-01-04 14:27:53 -05:00
|
|
|
apply plugin: 'elasticsearch.standalone-rest-test'
|
2016-03-08 17:15:40 -05:00
|
|
|
apply plugin: 'elasticsearch.rest-test'
|
|
|
|
|
|
|
|
dependencies {
|
2018-08-21 20:03:28 -04:00
|
|
|
// "org.elasticsearch.plugin:x-pack-core:${version}" doesn't work with idea because the testArtifacts are also here
|
|
|
|
testCompile project(path: xpackModule('core'), configuration: 'default')
|
2018-01-27 00:48:30 -05:00
|
|
|
testCompile project(path: xpackModule('security'), configuration: 'testArtifacts')
|
|
|
|
testCompile project(path: xpackModule('core'), configuration: 'testArtifacts')
|
2016-08-11 13:28:36 -04:00
|
|
|
testCompile project(path: ':modules:reindex')
|
2016-03-08 17:15:40 -05:00
|
|
|
}
|
|
|
|
|
2019-01-31 04:59:50 -05:00
|
|
|
forbiddenPatterns {
|
|
|
|
exclude '**/*.key'
|
|
|
|
exclude '**/*.pem'
|
|
|
|
exclude '**/*.p12'
|
|
|
|
exclude '**/*.jks'
|
|
|
|
}
|
|
|
|
|
|
|
|
File caFile = project.file('src/test/resources/ssl/ca.p12')
|
|
|
|
|
2017-02-22 03:56:52 -05:00
|
|
|
integTestCluster {
|
|
|
|
// Whitelist reindexing from the local node so we can test it.
|
2019-01-31 04:59:50 -05:00
|
|
|
extraConfigFile 'http.key', project.projectDir.toPath().resolve('src/test/resources/ssl/http.key')
|
|
|
|
extraConfigFile 'http.crt', project.projectDir.toPath().resolve('src/test/resources/ssl/http.crt')
|
|
|
|
extraConfigFile 'ca.p12', caFile
|
2017-02-22 03:56:52 -05:00
|
|
|
setting 'reindex.remote.whitelist', '127.0.0.1:*'
|
2018-08-02 13:05:11 -04:00
|
|
|
setting 'xpack.ilm.enabled', 'false'
|
2018-03-21 23:09:44 -04:00
|
|
|
setting 'xpack.security.enabled', 'true'
|
2017-03-02 12:01:05 -05:00
|
|
|
setting 'xpack.ml.enabled', 'false'
|
2018-02-12 14:57:04 -05:00
|
|
|
setting 'xpack.license.self_generated.type', 'trial'
|
2019-01-31 04:59:50 -05:00
|
|
|
setting 'xpack.security.http.ssl.enabled', 'true'
|
|
|
|
setting 'xpack.security.http.ssl.certificate', 'http.crt'
|
|
|
|
setting 'xpack.security.http.ssl.key', 'http.key'
|
|
|
|
setting 'xpack.security.http.ssl.key_passphrase', 'http-password'
|
|
|
|
setting 'reindex.ssl.truststore.path', 'ca.p12'
|
|
|
|
setting 'reindex.ssl.truststore.password', 'password'
|
2018-02-23 11:03:17 -05:00
|
|
|
extraConfigFile 'roles.yml', 'roles.yml'
|
2017-02-22 03:56:52 -05:00
|
|
|
[
|
|
|
|
test_admin: 'superuser',
|
|
|
|
powerful_user: 'superuser',
|
|
|
|
minimal_user: 'minimal',
|
2018-11-28 09:28:27 -05:00
|
|
|
minimal_with_task_user: 'minimal_with_task',
|
2017-02-22 03:56:52 -05:00
|
|
|
readonly_user: 'readonly',
|
|
|
|
dest_only_user: 'dest_only',
|
|
|
|
can_not_see_hidden_docs_user: 'can_not_see_hidden_docs',
|
|
|
|
can_not_see_hidden_fields_user: 'can_not_see_hidden_fields',
|
|
|
|
].each { String user, String role ->
|
|
|
|
setupCommand 'setupUser#' + user,
|
2018-04-11 11:36:12 -04:00
|
|
|
'bin/elasticsearch-users', 'useradd', user, '-p', 'x-pack-test-password', '-r', role
|
2017-02-22 03:56:52 -05:00
|
|
|
}
|
|
|
|
waitCondition = { node, ant ->
|
2019-01-31 04:59:50 -05:00
|
|
|
// Load the CA PKCS#12 file as a truststore
|
|
|
|
KeyStore ks = KeyStore.getInstance("PKCS12");
|
|
|
|
ks.load(caFile.newInputStream(), 'password'.toCharArray());
|
|
|
|
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
|
|
|
tmf.init(ks);
|
|
|
|
|
|
|
|
// Configre a SSL context for TLS1.2 using our CA trust manager
|
|
|
|
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
|
|
|
|
sslContext.init(new KeyManager[0], tmf.getTrustManagers(), new SecureRandom());
|
|
|
|
|
|
|
|
// Check whether the cluster has started
|
|
|
|
URL url = new URL("https://${node.httpUri()}/_cluster/health?wait_for_nodes=${numNodes}&wait_for_status=yellow");
|
|
|
|
for (int i = 20; i >= 0; i--) {
|
|
|
|
// we use custom wait logic here for HTTPS
|
|
|
|
HttpsURLConnection httpURLConnection = null;
|
|
|
|
try {
|
|
|
|
logger.info("Trying ${url}");
|
|
|
|
httpURLConnection = (HttpsURLConnection) url.openConnection();
|
|
|
|
httpURLConnection.setSSLSocketFactory(sslContext.getSocketFactory());
|
|
|
|
httpURLConnection.setRequestProperty("Authorization",
|
|
|
|
"Basic " + Base64.getEncoder().encodeToString("test_admin:x-pack-test-password".getBytes(StandardCharsets.UTF_8)));
|
|
|
|
httpURLConnection.setRequestMethod("GET");
|
|
|
|
httpURLConnection.connect();
|
|
|
|
if (httpURLConnection.getResponseCode() == 200) {
|
|
|
|
logger.info("Cluster has started");
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
logger.debug("HTTP response was [{}]", httpURLConnection.getResponseCode());
|
|
|
|
}
|
|
|
|
} catch (IOException e) {
|
|
|
|
if (i == 0) {
|
|
|
|
logger.error("Failed to call cluster health - " + e)
|
|
|
|
}
|
|
|
|
logger.debug("Call to [{}] threw an exception", url, e)
|
|
|
|
} finally {
|
|
|
|
if (httpURLConnection != null) {
|
|
|
|
httpURLConnection.disconnect();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// did not start, so wait a bit before trying again
|
|
|
|
Thread.sleep(750L);
|
|
|
|
}
|
|
|
|
return false;
|
2016-03-08 17:15:40 -05:00
|
|
|
}
|
|
|
|
}
|