Move deprecation HTTP tests to deprecation plugin (#60523)

Backport of #60298.

This PR moves the deprecation HTTP tests under the deprecation plugin, as a precursor to
adding further tests as part of #58924.
This commit is contained in:
Rory Hunter 2020-08-05 09:54:34 +01:00 committed by GitHub
parent 1ca58398c5
commit 43762f69d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 109 additions and 92 deletions

View File

@ -1,6 +1,6 @@
evaluationDependsOn(xpackModule('core'))
apply plugin: 'elasticsearch.esplugin' apply plugin: 'elasticsearch.esplugin'
apply plugin: 'elasticsearch.internal-cluster-test'
esplugin { esplugin {
name 'x-pack-deprecation' name 'x-pack-deprecation'
description 'Elasticsearch Expanded Pack Plugin - Deprecation' description 'Elasticsearch Expanded Pack Plugin - Deprecation'

View File

@ -1,53 +1,56 @@
/* /*
* Licensed to Elasticsearch under one or more contributor * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* license agreements. See the NOTICE file distributed with * or more contributor license agreements. Licensed under the Elastic License;
* this work for additional information regarding copyright * you may not use this file except in compliance with the Elastic License.
* 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.http; package org.elasticsearch.xpack.deprecation;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity; import org.apache.http.entity.StringEntity;
import org.elasticsearch.action.admin.cluster.node.info.NodeInfo;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Request; import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response; import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.logging.DeprecationLogger;
import org.elasticsearch.common.logging.LoggerMessageFormat; import org.elasticsearch.common.logging.LoggerMessageFormat;
import org.elasticsearch.common.network.NetworkAddress;
import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.elasticsearch.core.internal.io.IOUtils;
import org.elasticsearch.http.HttpInfo;
import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.test.ESSingleNodeTestCase;
import org.elasticsearch.transport.Netty4Plugin;
import org.elasticsearch.xpack.core.XPackPlugin;
import org.hamcrest.Matcher; import org.hamcrest.Matcher;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.elasticsearch.common.logging.DeprecationLogger.WARNING_HEADER_PATTERN; import static org.elasticsearch.common.logging.DeprecationLogger.WARNING_HEADER_PATTERN;
import static org.elasticsearch.http.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE1;
import static org.elasticsearch.http.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE2;
import static org.elasticsearch.http.TestDeprecationHeaderRestAction.TEST_NOT_DEPRECATED_SETTING;
import static org.elasticsearch.rest.RestStatus.OK; import static org.elasticsearch.rest.RestStatus.OK;
import static org.elasticsearch.test.hamcrest.RegexMatcher.matches; import static org.elasticsearch.test.hamcrest.RegexMatcher.matches;
import static org.elasticsearch.xpack.deprecation.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE1;
import static org.elasticsearch.xpack.deprecation.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE2;
import static org.elasticsearch.xpack.deprecation.TestDeprecationHeaderRestAction.TEST_NOT_DEPRECATED_SETTING;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasItem;
@ -56,7 +59,9 @@ import static org.hamcrest.Matchers.hasSize;
/** /**
* Tests {@code DeprecationLogger} uses the {@code ThreadContext} to add response headers. * Tests {@code DeprecationLogger} uses the {@code ThreadContext} to add response headers.
*/ */
public class DeprecationHttpIT extends HttpSmokeTestCase { public class DeprecationHttpIT extends ESSingleNodeTestCase {
private static RestClient restClient;
@Override @Override
protected boolean addMockHttpTransport() { protected boolean addMockHttpTransport() {
@ -64,22 +69,19 @@ public class DeprecationHttpIT extends HttpSmokeTestCase {
} }
@Override @Override
protected Settings nodeSettings(int nodeOrdinal) { protected Collection<Class<? extends Plugin>> getPlugins() {
return Settings.builder() return Arrays.asList(Netty4Plugin.class, XPackPlugin.class, Deprecation.class, TestDeprecationPlugin.class);
.put(super.nodeSettings(nodeOrdinal))
// change values of deprecated settings so that accessing them is logged
.put(TEST_DEPRECATED_SETTING_TRUE1.getKey(), ! TEST_DEPRECATED_SETTING_TRUE1.getDefault(Settings.EMPTY))
.put(TEST_DEPRECATED_SETTING_TRUE2.getKey(), ! TEST_DEPRECATED_SETTING_TRUE2.getDefault(Settings.EMPTY))
// non-deprecated setting to ensure not everything is logged
.put(TEST_NOT_DEPRECATED_SETTING.getKey(), ! TEST_NOT_DEPRECATED_SETTING.getDefault(Settings.EMPTY))
.build();
} }
@Override @Override
protected Collection<Class<? extends Plugin>> nodePlugins() { protected Settings nodeSettings() {
ArrayList<Class<? extends Plugin>> plugins = new ArrayList<>(super.nodePlugins()); return Settings.builder()
plugins.add(TestDeprecationPlugin.class); // change values of deprecated settings so that accessing them is logged
return plugins; .put(TEST_DEPRECATED_SETTING_TRUE1.getKey(), ! TEST_DEPRECATED_SETTING_TRUE1.getDefault(Settings.EMPTY))
.put(TEST_DEPRECATED_SETTING_TRUE2.getKey(), ! TEST_DEPRECATED_SETTING_TRUE2.getDefault(Settings.EMPTY))
// non-deprecated setting to ensure not everything is logged
.put(TEST_NOT_DEPRECATED_SETTING.getKey(), ! TEST_NOT_DEPRECATED_SETTING.getDefault(Settings.EMPTY))
.build();
} }
/** /**
@ -94,18 +96,29 @@ public class DeprecationHttpIT extends HttpSmokeTestCase {
indices[i] = "test" + i; indices[i] = "test" + i;
// create indices with a single shard to reduce noise; the query only deprecates uniquely by index anyway // create indices with a single shard to reduce noise; the query only deprecates uniquely by index anyway
assertTrue(prepareCreate(indices[i]).setSettings(Settings.builder().put("number_of_shards", 1)).get().isAcknowledged()); assertTrue(
client().admin()
.indices()
.prepareCreate(indices[i])
.setSettings(Settings.builder().put("number_of_shards", 1))
.get()
.isAcknowledged()
);
int randomDocCount = randomIntBetween(1, 2); int randomDocCount = randomIntBetween(1, 2);
for (int j = 0; j < randomDocCount; ++j) { for (int j = 0; j < randomDocCount; ++j) {
index(indices[i], "type", Integer.toString(j), "{\"field\":" + j + "}"); client().prepareIndex(indices[i], "type")
.setId(Integer.toString(j))
.setSource("{\"field\":" + j + "}", XContentType.JSON)
.execute()
.actionGet();
} }
} }
refresh(indices); client().admin().indices().refresh(new RefreshRequest(indices));
final String commaSeparatedIndices = Stream.of(indices).collect(Collectors.joining(",")); final String commaSeparatedIndices = String.join(",", indices);
// trigger all index deprecations // trigger all index deprecations
Request request = new Request("GET", "/" + commaSeparatedIndices + "/_search"); Request request = new Request("GET", "/" + commaSeparatedIndices + "/_search");
@ -220,4 +233,38 @@ public class DeprecationHttpIT extends HttpSmokeTestCase {
return new StringEntity(Strings.toString(builder), ContentType.APPLICATION_JSON); return new StringEntity(Strings.toString(builder), ContentType.APPLICATION_JSON);
} }
protected RestClient getRestClient() {
return getRestClient(client());
}
private static synchronized RestClient getRestClient(Client client) {
if (restClient == null) {
restClient = buildRestClient(client);
}
return restClient;
}
private static RestClient buildRestClient(Client client ) {
NodesInfoResponse nodesInfoResponse = client.admin().cluster().prepareNodesInfo().get();
assertFalse(nodesInfoResponse.hasFailures());
assertThat(nodesInfoResponse.getNodes(), hasSize(1));
NodeInfo node = nodesInfoResponse.getNodes().get(0);
assertNotNull(node.getInfo(HttpInfo.class));
TransportAddress publishAddress = node.getInfo(HttpInfo.class).address().publishAddress();
InetSocketAddress address = publishAddress.address();
final HttpHost host = new HttpHost(NetworkAddress.format(address.getAddress()), address.getPort(), "http");
RestClientBuilder builder = RestClient.builder(host);
return builder.build();
}
@Override
public void tearDown() throws Exception {
super.tearDown();
if (restClient != null) {
IOUtils.closeWhileHandlingException(restClient);
restClient = null;
}
}
} }

View File

@ -1,23 +1,10 @@
/* /*
* Licensed to Elasticsearch under one or more contributor * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* license agreements. See the NOTICE file distributed with * or more contributor license agreements. Licensed under the Elastic License;
* this work for additional information regarding copyright * you may not use this file except in compliance with the Elastic License.
* 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.http; package org.elasticsearch.xpack.deprecation;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.lucene.search.Query; import org.apache.lucene.search.Query;

View File

@ -1,22 +1,9 @@
/* /*
* Licensed to Elasticsearch under one or more contributor * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* license agreements. See the NOTICE file distributed with * or more contributor license agreements. Licensed under the Elastic License;
* this work for additional information regarding copyright * you may not use this file except in compliance with the Elastic License.
* 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.http; package org.elasticsearch.xpack.deprecation;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;

View File

@ -1,22 +1,9 @@
/* /*
* Licensed to Elasticsearch under one or more contributor * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* license agreements. See the NOTICE file distributed with * or more contributor license agreements. Licensed under the Elastic License;
* this work for additional information regarding copyright * you may not use this file except in compliance with the Elastic License.
* 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.http; package org.elasticsearch.xpack.deprecation;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.node.DiscoveryNodes; import org.elasticsearch.cluster.node.DiscoveryNodes;

View File

@ -0,0 +1,9 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
grant {
permission java.lang.RuntimePermission "*", "setContextClassLoader";
};