[TEST] Update destructive operations and disable close IT tests (#21274)

These tests had a single method due to the fact that es didn't support resetting settings when they were first written. They can now be rewritten to have separate methods and an after method that resets the setting that is left behind.
This commit is contained in:
Luca Cavanna 2016-11-02 20:02:48 +01:00 committed by GitHub
parent 9f1f0e971f
commit 9624fd26a8
3 changed files with 166 additions and 179 deletions

View File

@ -18,99 +18,48 @@
*/ */
package org.elasticsearch.indices.state; package org.elasticsearch.indices.state;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
import org.elasticsearch.action.admin.indices.close.CloseIndexResponse;
import org.elasticsearch.action.admin.indices.close.TransportCloseIndexAction; import org.elasticsearch.action.admin.indices.close.TransportCloseIndexAction;
import org.elasticsearch.action.support.DestructiveOperations;
import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.ESIntegTestCase;
import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.junit.After;
import org.elasticsearch.test.ESIntegTestCase.Scope;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.notNullValue;
@ClusterScope(scope=Scope.TEST, numDataNodes=2)
public class CloseIndexDisableCloseAllIT extends ESIntegTestCase { public class CloseIndexDisableCloseAllIT extends ESIntegTestCase {
// Combined multiple tests into one, because cluster scope is test.
// The cluster scope is test b/c we can't clear cluster settings. @After
public void testCloseAllRequiresName() { public void afterTest() {
Settings clusterSettings = Settings.builder() Settings settings = Settings.builder().put(TransportCloseIndexAction.CLUSTER_INDICES_CLOSE_ENABLE_SETTING.getKey(), (String)null)
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true)
.build(); .build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(clusterSettings)); assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
}
public void testCloseAllRequiresName() {
createIndex("test1", "test2", "test3"); createIndex("test1", "test2", "test3");
ClusterHealthResponse healthResponse = client().admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet();
assertThat(healthResponse.isTimedOut(), equalTo(false));
// Close all explicitly assertAcked(client().admin().indices().prepareClose("test3", "test2"));
try {
client().admin().indices().prepareClose("_all").execute().actionGet();
fail();
} catch (IllegalArgumentException e) {
}
// Close all wildcard
try {
client().admin().indices().prepareClose("*").execute().actionGet();
fail();
} catch (IllegalArgumentException e) {
}
// Close all wildcard
try {
client().admin().indices().prepareClose("test*").execute().actionGet();
fail();
} catch (IllegalArgumentException e) {
}
// Close all wildcard
try {
client().admin().indices().prepareClose("*", "-test1").execute().actionGet();
fail();
} catch (IllegalArgumentException e) {
}
// Close all wildcard
try {
client().admin().indices().prepareClose("*", "-test1", "+test1").execute().actionGet();
fail();
} catch (IllegalArgumentException e) {
}
CloseIndexResponse closeIndexResponse = client().admin().indices().prepareClose("test3", "test2").execute().actionGet();
assertThat(closeIndexResponse.isAcknowledged(), equalTo(true));
assertIndexIsClosed("test2", "test3"); assertIndexIsClosed("test2", "test3");
// disable closing // disable closing
Client client = client();
createIndex("test_no_close"); createIndex("test_no_close");
healthResponse = client.admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet(); Settings settings = Settings.builder().put(TransportCloseIndexAction.CLUSTER_INDICES_CLOSE_ENABLE_SETTING.getKey(), false).build();
assertThat(healthResponse.isTimedOut(), equalTo(false)); assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
client().admin().cluster().prepareUpdateSettings().setTransientSettings(Settings.builder().put(TransportCloseIndexAction.CLUSTER_INDICES_CLOSE_ENABLE_SETTING.getKey(), false)).get();
try { IllegalStateException illegalStateException = expectThrows(IllegalStateException.class,
client.admin().indices().prepareClose("test_no_close").execute().actionGet(); () -> client().admin().indices().prepareClose("test_no_close").get());
fail("exception expected"); assertEquals(illegalStateException.getMessage(),
} catch (IllegalStateException ex) { "closing indices is disabled - set [cluster.indices.close.enable: true] to enable it. NOTE: closed indices still " +
assertEquals(ex.getMessage(), "closing indices is disabled - set [cluster.indices.close.enable: true] to enable it. NOTE: closed indices still consume a significant amount of diskspace"); "consume a significant amount of diskspace");
}
} }
private void assertIndexIsClosed(String... indices) { private void assertIndexIsClosed(String... indices) {
checkIndexState(IndexMetaData.State.CLOSE, indices);
}
private void checkIndexState(IndexMetaData.State state, String... indices) {
ClusterStateResponse clusterStateResponse = client().admin().cluster().prepareState().execute().actionGet(); ClusterStateResponse clusterStateResponse = client().admin().cluster().prepareState().execute().actionGet();
for (String index : indices) { for (String index : indices) {
IndexMetaData indexMetaData = clusterStateResponse.getState().metaData().indices().get(index); IndexMetaData indexMetaData = clusterStateResponse.getState().metaData().indices().get(index);
assertThat(indexMetaData, notNullValue()); assertNotNull(indexMetaData);
assertThat(indexMetaData.getState(), equalTo(state)); assertEquals(IndexMetaData.State.CLOSE, indexMetaData.getState());
} }
} }
} }

View File

@ -0,0 +1,147 @@
/*
* 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.
*/
package org.elasticsearch.operateAllIndices;
import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
import org.elasticsearch.action.support.DestructiveOperations;
import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ESIntegTestCase;
import org.junit.After;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
import static org.hamcrest.Matchers.equalTo;
public class DestructiveOperationsIT extends ESIntegTestCase {
@After
public void afterTest() {
Settings settings = Settings.builder().put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), (String)null).build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
}
public void testDeleteIndexIsRejected() throws Exception {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
createIndex("index1", "1index");
// Should succeed, since no wildcards
assertAcked(client().admin().indices().prepareDelete("1index").get());
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareDelete("i*").get());
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareDelete("_all").get());
}
public void testDeleteIndexDefaultBehaviour() throws Exception {
if (randomBoolean()) {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), false)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
}
createIndex("index1", "1index");
if (randomBoolean()) {
assertAcked(client().admin().indices().prepareDelete("_all").get());
} else {
assertAcked(client().admin().indices().prepareDelete("*").get());
}
assertThat(client().admin().indices().prepareExists("_all").get().isExists(), equalTo(false));
}
public void testCloseIndexIsRejected() throws Exception {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
createIndex("index1", "1index");
// Should succeed, since no wildcards
assertAcked(client().admin().indices().prepareClose("1index").get());
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareClose("i*").get());
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareClose("_all").get());
}
public void testCloseIndexDefaultBehaviour() throws Exception {
if (randomBoolean()) {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), false)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
}
createIndex("index1", "1index");
if (randomBoolean()) {
assertAcked(client().admin().indices().prepareClose("_all").get());
} else {
assertAcked(client().admin().indices().prepareClose("*").get());
}
ClusterState state = client().admin().cluster().prepareState().get().getState();
for (ObjectObjectCursor<String, IndexMetaData> indexMetaDataObjectObjectCursor : state.getMetaData().indices()) {
assertEquals(IndexMetaData.State.CLOSE, indexMetaDataObjectObjectCursor.value.getState());
}
}
public void testOpenIndexIsRejected() throws Exception {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
createIndex("index1", "1index");
assertAcked(client().admin().indices().prepareClose("1index", "index1").get());
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareOpen("i*").get());
expectThrows(IllegalArgumentException.class, () -> client().admin().indices().prepareOpen("_all").get());
}
public void testOpenIndexDefaultBehaviour() throws Exception {
if (randomBoolean()) {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), false)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
}
createIndex("index1", "1index");
assertAcked(client().admin().indices().prepareClose("1index", "index1").get());
if (randomBoolean()) {
assertAcked(client().admin().indices().prepareOpen("_all").get());
} else {
assertAcked(client().admin().indices().prepareOpen("*").get());
}
ClusterState state = client().admin().cluster().prepareState().get().getState();
for (ObjectObjectCursor<String, IndexMetaData> indexMetaDataObjectObjectCursor : state.getMetaData().indices()) {
assertEquals(IndexMetaData.State.OPEN, indexMetaDataObjectObjectCursor.value.getState());
}
}
}

View File

@ -1,109 +0,0 @@
/*
* 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.
*/
package org.elasticsearch.operateAllIndices;
import org.elasticsearch.action.support.DestructiveOperations;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ESIntegTestCase;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
import static org.hamcrest.Matchers.equalTo;
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.TEST)
public class DestructiveOperationsIntegrationIT extends ESIntegTestCase {
// One test for test performance, since cluster scope is test
// The cluster scope is test b/c we can't clear cluster settings.
public void testDestructiveOperations() throws Exception {
Settings settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
assertAcked(client().admin().indices().prepareCreate("index1").get());
assertAcked(client().admin().indices().prepareCreate("1index").get());
// Should succeed, since no wildcards
assertAcked(client().admin().indices().prepareDelete("1index").get());
try {
// should fail since index1 is the only index.
client().admin().indices().prepareDelete("i*").get();
fail();
} catch (IllegalArgumentException e) {
}
try {
client().admin().indices().prepareDelete("_all").get();
fail();
} catch (IllegalArgumentException e) {
}
settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), false)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
assertAcked(client().admin().indices().prepareDelete("_all").get());
assertThat(client().admin().indices().prepareExists("_all").get().isExists(), equalTo(false));
// end delete index:
// close index:
settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
assertAcked(client().admin().indices().prepareCreate("index1").get());
assertAcked(client().admin().indices().prepareCreate("1index").get());
// Should succeed, since no wildcards
assertAcked(client().admin().indices().prepareClose("1index").get());
try {
client().admin().indices().prepareClose("_all").get();
fail();
} catch (IllegalArgumentException e) {
}
try {
assertAcked(client().admin().indices().prepareOpen("_all").get());
fail();
} catch (IllegalArgumentException e) {
}
try {
client().admin().indices().prepareClose("*").get();
fail();
} catch (IllegalArgumentException e) {
}
try {
assertAcked(client().admin().indices().prepareOpen("*").get());
fail();
} catch (IllegalArgumentException e) {
}
settings = Settings.builder()
.put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), false)
.build();
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
assertAcked(client().admin().indices().prepareClose("_all").get());
assertAcked(client().admin().indices().prepareOpen("_all").get());
// end close index:
client().admin().indices().prepareDelete("_all").get();
}
}