diff --git a/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java b/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java index f1e01d24acff6..3898746e5c374 100644 --- a/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java +++ b/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexingIT.java @@ -30,6 +30,10 @@ * Basic test that indexed documents survive the rolling restart. See * {@link RecoveryIT} for much more in depth testing of the mechanism * by which they survive. + *
+ * This test is an almost exact copy of IndexingIT in the
+ * xpack rolling restart tests. We should work on a way to remove this
+ * duplication but for now we have no real way to share code.
*/
public class IndexingIT extends AbstractRollingTestCase {
public void testIndexing() throws IOException {
diff --git a/x-pack/qa/rolling-upgrade-basic/build.gradle b/x-pack/qa/rolling-upgrade-basic/build.gradle
index 91a6d106c98f8..3592d34c9f4c4 100644
--- a/x-pack/qa/rolling-upgrade-basic/build.gradle
+++ b/x-pack/qa/rolling-upgrade-basic/build.gradle
@@ -8,62 +8,9 @@ apply plugin: 'elasticsearch.standalone-test'
dependencies {
testCompile project(path: xpackModule('core'), configuration: 'runtime')
- testCompile project(path: xpackModule('security'), configuration: 'runtime')
testCompile project(path: xpackModule('core'), configuration: 'testArtifacts') // to be moved in a later commit
}
-Closure waitWithAuth = { NodeInfo node, AntBuilder ant ->
- File tmpFile = new File(node.cwd, 'wait.success')
-
- // wait up to two minutes
- final long stopTime = System.currentTimeMillis() + (2 * 60000L);
- Exception lastException = null;
- int lastResponseCode = 0
-
- while (System.currentTimeMillis() < stopTime) {
-
- lastException = null;
- // we use custom wait logic here as the elastic user is not available immediately and ant.get will fail when a 401 is returned
- HttpURLConnection httpURLConnection = null;
- try {
- // TODO this sucks having to hardcode number of nodes, but node.config.numNodes isn't necessarily accurate for rolling
- httpURLConnection = (HttpURLConnection) new URL("http://${node.httpUri()}/_cluster/health?wait_for_nodes=2&wait_for_status=yellow").openConnection();
- httpURLConnection.setRequestProperty("Authorization", "Basic " +
- Base64.getEncoder().encodeToString("test_user:x-pack-test-password".getBytes(StandardCharsets.UTF_8)));
- httpURLConnection.setRequestMethod("GET");
- httpURLConnection.setConnectTimeout(1000);
- httpURLConnection.setReadTimeout(30000); // read needs to wait for nodes!
- httpURLConnection.connect();
- lastResponseCode = httpURLConnection.getResponseCode()
- if (lastResponseCode == 200) {
- tmpFile.withWriter StandardCharsets.UTF_8.name(), {
- it.write(httpURLConnection.getInputStream().getText(StandardCharsets.UTF_8.name()))
- }
- break;
- }
- } catch (Exception e) {
- logger.debug("failed to call cluster health", e)
- lastException = e
- } finally {
- if (httpURLConnection != null) {
- httpURLConnection.disconnect();
- }
- }
-
- // did not start, so wait a bit before trying again
- Thread.sleep(500L);
- }
- if (tmpFile.exists() == false) {
- final String message = "final attempt of calling cluster health failed [lastResponseCode=${lastResponseCode}]"
- if (lastException != null) {
- logger.error(message, lastException)
- } else {
- logger.error(message + " [no exception]")
- }
- }
- return tmpFile.exists()
-}
-
// This is a top level task which we will add dependencies to below.
// It is a single task that can be used to backcompat tests against all versions.
task bwcTest {
@@ -82,14 +29,13 @@ for (Version version : bwcVersions.wireCompatible) {
configure(extensions.findByName("${baseName}#oldClusterTestCluster")) {
if (version.before('6.3.0')) {
- mavenPlugin 'x-pack', "org.elasticsearch.plugin:x-pack:${version}"
+ mavenPlugin 'x-pack', "org.elasticsearch.plugin:x-pack:${version}"
}
bwcVersion = version
- numBwcNodes = 2
- numNodes = 2
- minimumMasterNodes = { 2 }
+ numBwcNodes = 3
+ numNodes = 3
+ minimumMasterNodes = { 3 }
clusterName = 'rolling-upgrade-basic'
- waitCondition = waitWithAuth
setting 'xpack.security.enabled', 'false'
setting 'xpack.monitoring.enabled', 'false'
setting 'xpack.ml.enabled', 'false'
@@ -102,51 +48,62 @@ for (Version version : bwcVersions.wireCompatible) {
systemProperty 'tests.rest.suite', 'old_cluster'
}
- Task mixedClusterTest = tasks.create(name: "${baseName}#mixedClusterTest", type: RestIntegTestTask)
+ Closure configureUpgradeCluster = {String name, Task lastRunner, int stopNode, Closure unicastSeed ->
+ configure(extensions.findByName("${baseName}#${name}")) {
+ dependsOn lastRunner, "${baseName}#oldClusterTestCluster#node${stopNode}.stop"
+ clusterName = 'rolling-upgrade-basic'
+ unicastTransportUri = { seedNode, node, ant -> unicastSeed() }
+ minimumMasterNodes = { 3 }
+ /* Override the data directory so the new node always gets the node we
+ * just stopped's data directory. */
+ dataDir = { nodeNumber -> oldClusterTest.nodes[stopNode].dataDir }
+ setting 'repositories.url.allowed_urls', 'http://snapshot.test*'
+ setting 'xpack.security.enabled', 'false'
+ setting 'xpack.monitoring.enabled', 'false'
+ setting 'xpack.ml.enabled', 'false'
+ setting 'xpack.watcher.enabled', 'false'
+ setting 'xpack.license.self_generated.type', 'basic'
+ }
+ }
+
+ Task oneThirdUpgradedTest = tasks.create(name: "${baseName}#oneThirdUpgradedTest", type: RestIntegTestTask)
- configure(extensions.findByName("${baseName}#mixedClusterTestCluster")) {
- dependsOn oldClusterTestRunner, "${baseName}#oldClusterTestCluster#node1.stop"
- clusterName = 'rolling-upgrade-basic'
- unicastTransportUri = { seedNode, node, ant -> oldClusterTest.nodes.get(0).transportUri() }
- minimumMasterNodes = { 2 }
- dataDir = { nodeNumber -> oldClusterTest.nodes[1].dataDir }
- waitCondition = waitWithAuth
- setting 'xpack.security.enabled', 'false'
- setting 'xpack.monitoring.enabled', 'false'
- setting 'xpack.ml.enabled', 'false'
- setting 'xpack.watcher.enabled', 'false'
- setting 'xpack.license.self_generated.type', 'basic'
- setting 'node.name', 'mixed-node-0'
+ configureUpgradeCluster("oneThirdUpgradedTestCluster", oldClusterTestRunner,
+ 0, { oldClusterTest.nodes.get(1).transportUri() })
+
+ Task oneThirdUpgradedTestRunner = tasks.getByName("${baseName}#oneThirdUpgradedTestRunner")
+ oneThirdUpgradedTestRunner.configure {
+ systemProperty 'tests.rest.suite', 'mixed_cluster'
+ systemProperty 'tests.first_round', 'true'
+ finalizedBy "${baseName}#oldClusterTestCluster#node1.stop"
}
- Task mixedClusterTestRunner = tasks.getByName("${baseName}#mixedClusterTestRunner")
- mixedClusterTestRunner.configure {
+ Task twoThirdsUpgradedTest = tasks.create(name: "${baseName}#twoThirdsUpgradedTest", type: RestIntegTestTask)
+
+ configureUpgradeCluster("twoThirdsUpgradedTestCluster", oneThirdUpgradedTestRunner,
+ 1, { oneThirdUpgradedTest.nodes.get(0).transportUri() })
+
+ Task twoThirdsUpgradedTestRunner = tasks.getByName("${baseName}#twoThirdsUpgradedTestRunner")
+ twoThirdsUpgradedTestRunner.configure {
systemProperty 'tests.rest.suite', 'mixed_cluster'
- finalizedBy "${baseName}#oldClusterTestCluster#node0.stop"
+ systemProperty 'tests.first_round', 'false'
+ finalizedBy "${baseName}#oldClusterTestCluster#node2.stop"
}
Task upgradedClusterTest = tasks.create(name: "${baseName}#upgradedClusterTest", type: RestIntegTestTask)
- configure(extensions.findByName("${baseName}#upgradedClusterTestCluster")) {
- dependsOn(mixedClusterTestRunner, "${baseName}#oldClusterTestCluster#node0.stop")
- clusterName = 'rolling-upgrade-basic'
- unicastTransportUri = { seedNode, node, ant -> mixedClusterTest.nodes.get(0).transportUri() }
- minimumMasterNodes = { 2 }
- dataDir = { nodeNumber -> oldClusterTest.nodes[0].dataDir }
- waitCondition = waitWithAuth
- setting 'xpack.security.enabled', 'false'
- setting 'xpack.monitoring.enabled', 'false'
- setting 'xpack.ml.enabled', 'false'
- setting 'xpack.watcher.enabled', 'false'
- setting 'xpack.license.self_generated.type', 'basic'
- setting 'node.name', 'upgraded-node-0'
- }
+ configureUpgradeCluster("upgradedClusterTestCluster", twoThirdsUpgradedTestRunner,
+ 2, { twoThirdsUpgradedTest.nodes.get(0).transportUri() })
Task upgradedClusterTestRunner = tasks.getByName("${baseName}#upgradedClusterTestRunner")
upgradedClusterTestRunner.configure {
systemProperty 'tests.rest.suite', 'upgraded_cluster'
- // only need to kill the mixed cluster tests node here because we explicitly told it to not stop nodes upon completion
- finalizedBy "${baseName}#mixedClusterTestCluster#stop"
+ /*
+ * Force stopping all the upgraded nodes after the test runner
+ * so they are alive during the test.
+ */
+ finalizedBy "${baseName}#oneThirdUpgradedTestCluster#stop"
+ finalizedBy "${baseName}#twoThirdsUpgradedTestCluster#stop"
}
Task versionBwcTest = tasks.create(name: "${baseName}#bwcTest") {
@@ -170,11 +127,6 @@ task integTest {
}
check.dependsOn(integTest)
-dependencies {
- testCompile project(path: xpackModule('core'), configuration: 'runtime')
- testCompile project(path: xpackModule('core'), configuration: 'testArtifacts')
-}
-
compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-try,-unchecked"
// copy x-pack plugin info so it is on the classpath and security manager has the right permissions
diff --git a/x-pack/qa/rolling-upgrade/build.gradle b/x-pack/qa/rolling-upgrade/build.gradle
index 6e93041e9a0f4..f11addb42b810 100644
--- a/x-pack/qa/rolling-upgrade/build.gradle
+++ b/x-pack/qa/rolling-upgrade/build.gradle
@@ -30,7 +30,7 @@ Closure waitWithAuth = { NodeInfo node, AntBuilder ant ->
HttpURLConnection httpURLConnection = null;
try {
// TODO this sucks having to hardcode number of nodes, but node.config.numNodes isn't necessarily accurate for rolling
- httpURLConnection = (HttpURLConnection) new URL("http://${node.httpUri()}/_cluster/health?wait_for_nodes=2&wait_for_status=yellow").openConnection();
+ httpURLConnection = (HttpURLConnection) new URL("http://${node.httpUri()}/_cluster/health?wait_for_nodes=3&wait_for_status=yellow").openConnection();
httpURLConnection.setRequestProperty("Authorization", "Basic " +
Base64.getEncoder().encodeToString("test_user:x-pack-test-password".getBytes(StandardCharsets.UTF_8)));
httpURLConnection.setRequestMethod("GET");
@@ -128,9 +128,9 @@ subprojects {
String usersCli = version.before('6.3.0') ? 'bin/x-pack/users' : 'bin/elasticsearch-users'
setupCommand 'setupTestUser', usersCli, 'useradd', 'test_user', '-p', 'x-pack-test-password', '-r', 'superuser'
bwcVersion = version
- numBwcNodes = 2
- numNodes = 2
- minimumMasterNodes = { 2 }
+ numBwcNodes = 3
+ numNodes = 3
+ minimumMasterNodes = { 3 }
clusterName = 'rolling-upgrade'
waitCondition = waitWithAuth
setting 'xpack.monitoring.exporters._http.type', 'http'
@@ -167,78 +167,84 @@ subprojects {
systemProperty 'tests.rest.suite', 'old_cluster'
}
- Task mixedClusterTest = tasks.create(name: "${baseName}#mixedClusterTest", type: RestIntegTestTask)
-
- configure(extensions.findByName("${baseName}#mixedClusterTestCluster")) {
- dependsOn oldClusterTestRunner, "${baseName}#oldClusterTestCluster#node1.stop"
- setupCommand 'setupTestUser', 'bin/elasticsearch-users', 'useradd', 'test_user', '-p', 'x-pack-test-password', '-r', 'superuser'
- clusterName = 'rolling-upgrade'
- unicastTransportUri = { seedNode, node, ant -> oldClusterTest.nodes.get(0).transportUri() }
- minimumMasterNodes = { 2 }
- dataDir = { nodeNumber -> oldClusterTest.nodes[1].dataDir }
- waitCondition = waitWithAuth
- setting 'xpack.monitoring.exporters._http.type', 'http'
- setting 'xpack.monitoring.exporters._http.enabled', 'false'
- setting 'xpack.monitoring.exporters._http.auth.username', 'test_user'
- setting 'xpack.monitoring.exporters._http.auth.password', 'x-pack-test-password'
- setting 'xpack.license.self_generated.type', 'trial'
- setting 'xpack.security.enabled', 'true'
- setting 'xpack.security.transport.ssl.enabled', 'true'
- setting 'xpack.ssl.keystore.path', 'testnode.jks'
- keystoreSetting 'xpack.ssl.keystore.secure_password', 'testnode'
- setting 'node.attr.upgraded', 'first'
- setting 'xpack.security.authc.token.enabled', 'true'
- setting 'xpack.security.audit.enabled', 'true'
- setting 'xpack.security.audit.outputs', 'index'
- setting 'node.name', 'mixed-node-0'
- dependsOn copyTestNodeKeystore
- extraConfigFile 'testnode.jks', new File(outputDir + '/testnode.jks')
- if (withSystemKey) {
- setting 'xpack.watcher.encrypt_sensitive_data', 'true'
- keystoreFile 'xpack.watcher.encryption_key', "${mainProject.projectDir}/src/test/resources/system_key"
+ Closure configureUpgradeCluster = {String name, Task lastRunner, int stopNode, Closure unicastSeed ->
+ configure(extensions.findByName("${baseName}#${name}")) {
+ dependsOn lastRunner, "${baseName}#oldClusterTestCluster#node${stopNode}.stop"
+ setupCommand 'setupTestUser', 'bin/elasticsearch-users', 'useradd', 'test_user', '-p', 'x-pack-test-password', '-r', 'superuser'
+ clusterName = 'rolling-upgrade'
+ unicastTransportUri = { seedNode, node, ant -> unicastSeed() }
+ minimumMasterNodes = { 3 }
+ /* Override the data directory so the new node always gets the node we
+ * just stopped's data directory. */
+ dataDir = { nodeNumber -> oldClusterTest.nodes[stopNode].dataDir }
+ waitCondition = waitWithAuth
+ setting 'xpack.monitoring.exporters._http.type', 'http'
+ setting 'xpack.monitoring.exporters._http.enabled', 'false'
+ setting 'xpack.monitoring.exporters._http.auth.username', 'test_user'
+ setting 'xpack.monitoring.exporters._http.auth.password', 'x-pack-test-password'
+ setting 'xpack.license.self_generated.type', 'trial'
+ setting 'xpack.security.enabled', 'true'
+ setting 'xpack.security.transport.ssl.enabled', 'true'
+ setting 'xpack.ssl.keystore.path', 'testnode.jks'
+ keystoreSetting 'xpack.ssl.keystore.secure_password', 'testnode'
+ setting 'node.attr.upgraded', 'true'
+ setting 'xpack.security.authc.token.enabled', 'true'
+ setting 'xpack.security.audit.enabled', 'true'
+ setting 'xpack.security.audit.outputs', 'index'
+ setting 'node.name', "upgraded-node-${stopNode}"
+ dependsOn copyTestNodeKeystore
+ extraConfigFile 'testnode.jks', new File(outputDir + '/testnode.jks')
+ if (withSystemKey) {
+ setting 'xpack.watcher.encrypt_sensitive_data', 'true'
+ keystoreFile 'xpack.watcher.encryption_key', "${mainProject.projectDir}/src/test/resources/system_key"
+ }
}
}
- Task mixedClusterTestRunner = tasks.getByName("${baseName}#mixedClusterTestRunner")
- mixedClusterTestRunner.configure {
+ Task oneThirdUpgradedTest = tasks.create(name: "${baseName}#oneThirdUpgradedTest", type: RestIntegTestTask)
+
+ configureUpgradeCluster("oneThirdUpgradedTestCluster", oldClusterTestRunner,
+ 0, { oldClusterTest.nodes.get(1).transportUri() })
+
+ Task oneThirdUpgradedTestRunner = tasks.getByName("${baseName}#oneThirdUpgradedTestRunner")
+ oneThirdUpgradedTestRunner.configure {
systemProperty 'tests.rest.suite', 'mixed_cluster'
- finalizedBy "${baseName}#oldClusterTestCluster#node0.stop"
+ systemProperty 'tests.first_round', 'true'
+ // We only need to run these tests once so we may as well do it when we're two thirds upgraded
+ systemProperty 'tests.rest.blacklist', [
+ 'mixed_cluster/10_basic/Start scroll in mixed cluster on upgraded node that we will continue after upgrade',
+ 'mixed_cluster/30_ml_jobs_crud/Create a job in the mixed cluster and write some data',
+ 'mixed_cluster/40_ml_datafeed_crud/Put job and datafeed in mixed cluster',
+ ].join(',')
+ finalizedBy "${baseName}#oldClusterTestCluster#node1.stop"
}
- Task upgradedClusterTest = tasks.create(name: "${baseName}#upgradedClusterTest", type: RestIntegTestTask)
+ Task twoThirdsUpgradedTest = tasks.create(name: "${baseName}#twoThirdsUpgradedTest", type: RestIntegTestTask)
- configure(extensions.findByName("${baseName}#upgradedClusterTestCluster")) {
- dependsOn(mixedClusterTestRunner, "${baseName}#oldClusterTestCluster#node0.stop")
- setupCommand 'setupTestUser', 'bin/elasticsearch-users', 'useradd', 'test_user', '-p', 'x-pack-test-password', '-r', 'superuser'
- clusterName = 'rolling-upgrade'
- unicastTransportUri = { seedNode, node, ant -> mixedClusterTest.nodes.get(0).transportUri() }
- minimumMasterNodes = { 2 }
- dataDir = { nodeNumber -> oldClusterTest.nodes[0].dataDir }
- waitCondition = waitWithAuth
- setting 'xpack.monitoring.exporters._http.type', 'http'
- setting 'xpack.monitoring.exporters._http.enabled', 'false'
- setting 'xpack.monitoring.exporters._http.auth.username', 'test_user'
- setting 'xpack.monitoring.exporters._http.auth.password', 'x-pack-test-password'
- setting 'xpack.license.self_generated.type', 'trial'
- setting 'xpack.security.enabled', 'true'
- setting 'xpack.security.transport.ssl.enabled', 'true'
- setting 'xpack.ssl.keystore.path', 'testnode.jks'
- keystoreSetting 'xpack.ssl.keystore.secure_password', 'testnode'
- setting 'xpack.security.authc.token.enabled', 'true'
- setting 'xpack.security.audit.enabled', 'true'
- setting 'xpack.security.audit.outputs', 'index'
- setting 'node.name', 'upgraded-node-0'
- dependsOn copyTestNodeKeystore
- extraConfigFile 'testnode.jks', new File(outputDir + '/testnode.jks')
- if (withSystemKey) {
- setting 'xpack.watcher.encrypt_sensitive_data', 'true'
- keystoreFile 'xpack.watcher.encryption_key', "${mainProject.projectDir}/src/test/resources/system_key"
- }
+ configureUpgradeCluster("twoThirdsUpgradedTestCluster", oneThirdUpgradedTestRunner,
+ 1, { oneThirdUpgradedTest.nodes.get(0).transportUri() })
+
+ Task twoThirdsUpgradedTestRunner = tasks.getByName("${baseName}#twoThirdsUpgradedTestRunner")
+ twoThirdsUpgradedTestRunner.configure {
+ systemProperty 'tests.rest.suite', 'mixed_cluster'
+ systemProperty 'tests.first_round', 'false'
+ finalizedBy "${baseName}#oldClusterTestCluster#node2.stop"
}
+ Task upgradedClusterTest = tasks.create(name: "${baseName}#upgradedClusterTest", type: RestIntegTestTask)
+
+ configureUpgradeCluster("upgradedClusterTestCluster", twoThirdsUpgradedTestRunner,
+ 2, { twoThirdsUpgradedTest.nodes.get(0).transportUri() })
+
Task upgradedClusterTestRunner = tasks.getByName("${baseName}#upgradedClusterTestRunner")
upgradedClusterTestRunner.configure {
systemProperty 'tests.rest.suite', 'upgraded_cluster'
+ /*
+ * Force stopping all the upgraded nodes after the test runner
+ * so they are alive during the test.
+ */
+ finalizedBy "${baseName}#oneThirdUpgradedTestCluster#stop"
+ finalizedBy "${baseName}#twoThirdsUpgradedTestCluster#stop"
// migration tests should only run when the original/old cluster nodes where versions < 5.2.0.
// this stinks but we do the check here since our rest tests do not support conditionals
@@ -251,8 +257,6 @@ subprojects {
systemProperty 'tests.rest.blacklist', '/20_security/Verify default password migration results in upgraded cluster'
}
}
- // only need to kill the mixed cluster tests node here because we explicitly told it to not stop nodes upon completion
- finalizedBy "${baseName}#mixedClusterTestCluster#stop"
}
Task versionBwcTest = tasks.create(name: "${baseName}#bwcTest") {
diff --git a/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/AbstractUpgradeTestCase.java b/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/AbstractUpgradeTestCase.java
index 65b1a7c85dcb1..a3576b7b8c3e8 100644
--- a/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/AbstractUpgradeTestCase.java
+++ b/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/AbstractUpgradeTestCase.java
@@ -37,12 +37,12 @@ protected boolean preserveTemplatesUponCompletion() {
return true;
}
- enum CLUSTER_TYPE {
+ enum ClusterType {
OLD,
MIXED,
UPGRADED;
- public static CLUSTER_TYPE parse(String value) {
+ public static ClusterType parse(String value) {
switch (value) {
case "old_cluster":
return OLD;
@@ -56,7 +56,7 @@ public static CLUSTER_TYPE parse(String value) {
}
}
- protected final CLUSTER_TYPE clusterType = CLUSTER_TYPE.parse(System.getProperty("tests.rest.suite"));
+ protected static final ClusterType CLUSTER_TYPE = ClusterType.parse(System.getProperty("tests.rest.suite"));
@Override
protected Settings restClientSettings() {
diff --git a/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexAuditUpgradeIT.java b/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexAuditUpgradeIT.java
index 1f76e670854a2..da6f9133d033b 100644
--- a/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexAuditUpgradeIT.java
+++ b/x-pack/qa/rolling-upgrade/src/test/java/org/elasticsearch/upgrades/IndexAuditUpgradeIT.java
@@ -8,37 +8,48 @@
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
+import org.elasticsearch.Version;
import org.elasticsearch.client.Response;
+import org.elasticsearch.common.Booleans;
import org.hamcrest.Matchers;
+import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import static org.hamcrest.Matchers.hasSize;
public class IndexAuditUpgradeIT extends AbstractUpgradeTestCase {
- public void testDocsAuditedInOldCluster() throws Exception {
- assumeTrue("only runs against old cluster", clusterType == CLUSTER_TYPE.OLD);
+ public void testAuditLogs() throws Exception {
assertBusy(() -> {
assertAuditDocsExist();
- assertNumUniqueNodeNameBuckets(2);
- });
+ assertNumUniqueNodeNameBuckets(expectedNumUniqueNodeNameBuckets());
+ }, 1, TimeUnit.HOURS);
}
- public void testDocsAuditedInMixedCluster() throws Exception {
- assumeTrue("only runs against mixed cluster", clusterType == CLUSTER_TYPE.MIXED);
- assertBusy(() -> {
- assertAuditDocsExist();
- assertNumUniqueNodeNameBuckets(2);
- });
- }
-
- public void testDocsAuditedInUpgradedCluster() throws Exception {
- assumeTrue("only runs against upgraded cluster", clusterType == CLUSTER_TYPE.UPGRADED);
- assertBusy(() -> {
- assertAuditDocsExist();
- assertNumUniqueNodeNameBuckets(4);
- });
+ private int expectedNumUniqueNodeNameBuckets() throws IOException {
+ switch (CLUSTER_TYPE) {
+ case OLD:
+ // There are three nodes in the initial test cluster
+ return 3;
+ case MIXED:
+ if (false == masterIsNewVersion()) {
+ return 3;
+ }
+ if (Booleans.parseBoolean(System.getProperty("tests.first_round"))) {
+ // One of the old nodes has been removed and we've added a new node
+ return 4;
+ }
+ // Two of the old nodes have been removed and we've added two new nodes
+ return 5;
+ case UPGRADED:
+ return 6;
+ default:
+ throw new IllegalArgumentException("Unsupported cluster type [" + CLUSTER_TYPE + "]");
+ }
}
private void assertAuditDocsExist() throws Exception {
@@ -51,26 +62,40 @@ private void assertAuditDocsExist() throws Exception {
private void assertNumUniqueNodeNameBuckets(int numBuckets) throws Exception {
// call API that will hit all nodes
- assertEquals(200, client().performRequest("GET", "/_nodes").getStatusLine().getStatusCode());
+ Map, ?> nodesResponse = entityAsMap(client().performRequest("GET", "/_nodes/_all/info/version"));
+ logger.info("all nodes {}", nodesResponse);
HttpEntity httpEntity = new StringEntity(
"{\n" +
- " \"aggs\" : {\n" +
- " \"nodes\" : {\n" +
- " \"terms\" : { \"field\" : \"node_name\" }\n" +
- " }\n" +
- " }\n" +
- "}", ContentType.APPLICATION_JSON);
+ " \"aggs\" : {\n" +
+ " \"nodes\" : {\n" +
+ " \"terms\" : { \"field\" : \"node_name\" }\n" +
+ " }\n" +
+ " }\n" +
+ "}", ContentType.APPLICATION_JSON);
Response aggResponse = client().performRequest("GET", "/.security_audit_log*/_search",
Collections.singletonMap("pretty", "true"), httpEntity);
Map