/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.elasticsearch.gradle.MavenFilteringHack import org.elasticsearch.gradle.test.AntFixture import org.elasticsearch.gradle.test.RestIntegTestTask import static org.elasticsearch.gradle.PropertyNormalization.IGNORE_VALUE apply plugin: 'elasticsearch.standalone-rest-test' apply plugin: 'elasticsearch.rest-test' dependencies { testCompile project(path: ':plugins:discovery-ec2', configuration: 'runtime') } final int ec2NumberOfNodes = 3 Map expansions = [ 'expected_nodes': ec2NumberOfNodes ] processTestResources { inputs.properties(expansions) MavenFilteringHack.filter(it, expansions) } // disable default test task, use spezialized ones below integTest.enabled = false /* * Test using various credential providers (see also https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/credentials.html): * - Elasticsearch Keystore (secure settings discovery.ec2.access_key and discovery.ec2.secret_key) * - Java system properties (aws.accessKeyId and aws.secretAccessKey) * - Environment variables (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY) * - ECS container credentials (loaded from ECS if the environment variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI is set) * - Instance profile credentials (delivered through the EC2 metadata service) * * Notably missing is a test for the default credential profiles file, which is located at ~/.aws/credentials and would at least require a * custom Java security policy to work. */ ['KeyStore', 'EnvVariables', 'SystemProperties', 'ContainerCredentials', 'InstanceProfile'].forEach { action -> AntFixture fixture = tasks.create(name: "ec2Fixture${action}", type: AntFixture) { dependsOn compileTestJava env 'CLASSPATH', "${ -> project.sourceSets.test.runtimeClasspath.asPath }" executable = new File(project.runtimeJavaHome, 'bin/java') args 'org.elasticsearch.discovery.ec2.AmazonEC2Fixture', baseDir, "${buildDir}/testclusters/integTest${action}-1/config/unicast_hosts.txt" } tasks.create(name: "integTest${action}", type: RestIntegTestTask) { dependsOn fixture, project(':plugins:discovery-ec2').bundlePlugin } check.dependsOn("integTest${action}") testClusters."integTest${action}" { numberOfNodes = ec2NumberOfNodes plugin file(project(':plugins:discovery-ec2').bundlePlugin.archiveFile) setting 'discovery.seed_providers', 'ec2' setting 'network.host', '_ec2_' setting 'discovery.ec2.endpoint', { "http://${-> fixture.addressAndPort}" }, IGNORE_VALUE systemProperty "com.amazonaws.sdk.ec2MetadataServiceEndpointOverride", { "http://${-> fixture.addressAndPort}" }, IGNORE_VALUE } } // Extra config for KeyStore testClusters.integTestKeyStore { keystore 'discovery.ec2.access_key', 'ec2_integration_test_access_key' keystore 'discovery.ec2.secret_key', 'ec2_integration_test_secret_key' } // Extra config for EnvVariables testClusters.integTestEnvVariables { environment 'AWS_ACCESS_KEY_ID', 'ec2_integration_test_access_key' environment 'AWS_SECRET_ACCESS_KEY', 'ec2_integration_test_secret_key' } // Extra config for SystemProperties testClusters.integTestSystemProperties { systemProperty 'aws.accessKeyId', 'ec2_integration_test_access_key' systemProperty 'aws.secretKey', 'ec2_integration_test_secret_key' } // Extra config for ContainerCredentials ec2FixtureContainerCredentials.env 'ACTIVATE_CONTAINER_CREDENTIALS', true testClusters.integTestContainerCredentials { environment 'AWS_CONTAINER_CREDENTIALS_FULL_URI', { "http://${-> tasks.findByName("ec2FixtureContainerCredentials").addressAndPort}/ecs_credentials_endpoint" }, IGNORE_VALUE } // Extra config for InstanceProfile ec2FixtureInstanceProfile.env 'ACTIVATE_INSTANCE_PROFILE', true