diff --git a/core/src/test/java/org/elasticsearch/indices/state/CloseIndexDisableCloseAllIT.java b/core/src/test/java/org/elasticsearch/indices/state/CloseIndexDisableCloseAllIT.java index 8ec629dbbdc..54bdfd05008 100644 --- a/core/src/test/java/org/elasticsearch/indices/state/CloseIndexDisableCloseAllIT.java +++ b/core/src/test/java/org/elasticsearch/indices/state/CloseIndexDisableCloseAllIT.java @@ -18,99 +18,48 @@ */ 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.indices.close.CloseIndexResponse; 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.common.settings.Settings; import org.elasticsearch.test.ESIntegTestCase; -import org.elasticsearch.test.ESIntegTestCase.ClusterScope; -import org.elasticsearch.test.ESIntegTestCase.Scope; +import org.junit.After; 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 { - // Combined multiple tests into one, because cluster scope is test. - // The cluster scope is test b/c we can't clear cluster settings. - public void testCloseAllRequiresName() { - Settings clusterSettings = Settings.builder() - .put(DestructiveOperations.REQUIRES_NAME_SETTING.getKey(), true) + + @After + public void afterTest() { + Settings settings = Settings.builder().put(TransportCloseIndexAction.CLUSTER_INDICES_CLOSE_ENABLE_SETTING.getKey(), (String)null) .build(); - assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(clusterSettings)); + assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings)); + } + + public void testCloseAllRequiresName() { createIndex("test1", "test2", "test3"); - ClusterHealthResponse healthResponse = client().admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet(); - assertThat(healthResponse.isTimedOut(), equalTo(false)); - // Close all explicitly - 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)); + assertAcked(client().admin().indices().prepareClose("test3", "test2")); assertIndexIsClosed("test2", "test3"); // disable closing - Client client = client(); createIndex("test_no_close"); - healthResponse = client.admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet(); - assertThat(healthResponse.isTimedOut(), equalTo(false)); - client().admin().cluster().prepareUpdateSettings().setTransientSettings(Settings.builder().put(TransportCloseIndexAction.CLUSTER_INDICES_CLOSE_ENABLE_SETTING.getKey(), false)).get(); + Settings settings = Settings.builder().put(TransportCloseIndexAction.CLUSTER_INDICES_CLOSE_ENABLE_SETTING.getKey(), false).build(); + assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings)); - try { - client.admin().indices().prepareClose("test_no_close").execute().actionGet(); - fail("exception expected"); - } catch (IllegalStateException ex) { - 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"); - } + IllegalStateException illegalStateException = expectThrows(IllegalStateException.class, + () -> client().admin().indices().prepareClose("test_no_close").get()); + assertEquals(illegalStateException.getMessage(), + "closing indices is disabled - set [cluster.indices.close.enable: true] to enable it. NOTE: closed indices still " + + "consume a significant amount of diskspace"); } 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(); for (String index : indices) { IndexMetaData indexMetaData = clusterStateResponse.getState().metaData().indices().get(index); - assertThat(indexMetaData, notNullValue()); - assertThat(indexMetaData.getState(), equalTo(state)); + assertNotNull(indexMetaData); + assertEquals(IndexMetaData.State.CLOSE, indexMetaData.getState()); } } } diff --git a/core/src/test/java/org/elasticsearch/operateAllIndices/DestructiveOperationsIT.java b/core/src/test/java/org/elasticsearch/operateAllIndices/DestructiveOperationsIT.java new file mode 100644 index 00000000000..fea2e4699d5 --- /dev/null +++ b/core/src/test/java/org/elasticsearch/operateAllIndices/DestructiveOperationsIT.java @@ -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 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 indexMetaDataObjectObjectCursor : state.getMetaData().indices()) { + assertEquals(IndexMetaData.State.OPEN, indexMetaDataObjectObjectCursor.value.getState()); + } + } +} diff --git a/core/src/test/java/org/elasticsearch/operateAllIndices/DestructiveOperationsIntegrationIT.java b/core/src/test/java/org/elasticsearch/operateAllIndices/DestructiveOperationsIntegrationIT.java deleted file mode 100644 index 28852d74696..00000000000 --- a/core/src/test/java/org/elasticsearch/operateAllIndices/DestructiveOperationsIntegrationIT.java +++ /dev/null @@ -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(); - } -}