diff --git a/libs/entitlement/qa/build.gradle b/libs/entitlement/qa/build.gradle index 7f46b2fe20a8a..fea746eb3bfa3 100644 --- a/libs/entitlement/qa/build.gradle +++ b/libs/entitlement/qa/build.gradle @@ -12,9 +12,6 @@ apply plugin: 'elasticsearch.internal-java-rest-test' apply plugin: 'elasticsearch.internal-test-artifact' dependencies { - javaRestTestImplementation project(':libs:entitlement:qa:common') - clusterModules project(':libs:entitlement:qa:entitlement-allowed') - clusterModules project(':libs:entitlement:qa:entitlement-allowed-nonmodular') - clusterPlugins project(':libs:entitlement:qa:entitlement-denied') - clusterPlugins project(':libs:entitlement:qa:entitlement-denied-nonmodular') + javaRestTestImplementation project(':libs:entitlement:qa:test-plugin') + clusterModules project(':libs:entitlement:qa:test-plugin') } diff --git a/libs/entitlement/qa/entitlement-allowed-nonmodular/build.gradle b/libs/entitlement/qa/entitlement-allowed-nonmodular/build.gradle deleted file mode 100644 index 316b61e15707e..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed-nonmodular/build.gradle +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -apply plugin: 'elasticsearch.base-internal-es-plugin' - -esplugin { - name = 'entitlement-allowed-nonmodular' - description = 'A non-modular test module that invokes entitlement checks that are supposed to be granted' - classname = 'org.elasticsearch.entitlement.qa.nonmodular.EntitlementAllowedNonModularPlugin' -} - -dependencies { - implementation project(':libs:entitlement:qa:common') -} - -tasks.named("javadoc").configure { - enabled = false -} diff --git a/libs/entitlement/qa/entitlement-allowed-nonmodular/src/main/java/org/elasticsearch/entitlement/qa/nonmodular/EntitlementAllowedNonModularPlugin.java b/libs/entitlement/qa/entitlement-allowed-nonmodular/src/main/java/org/elasticsearch/entitlement/qa/nonmodular/EntitlementAllowedNonModularPlugin.java deleted file mode 100644 index 82146e6a87759..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed-nonmodular/src/main/java/org/elasticsearch/entitlement/qa/nonmodular/EntitlementAllowedNonModularPlugin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ -package org.elasticsearch.entitlement.qa.nonmodular; - -import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; -import org.elasticsearch.cluster.node.DiscoveryNodes; -import org.elasticsearch.common.io.stream.NamedWriteableRegistry; -import org.elasticsearch.common.settings.ClusterSettings; -import org.elasticsearch.common.settings.IndexScopedSettings; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.settings.SettingsFilter; -import org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction; -import org.elasticsearch.features.NodeFeature; -import org.elasticsearch.plugins.ActionPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.rest.RestController; -import org.elasticsearch.rest.RestHandler; - -import java.util.List; -import java.util.function.Predicate; -import java.util.function.Supplier; - -public class EntitlementAllowedNonModularPlugin extends Plugin implements ActionPlugin { - @Override - public List getRestHandlers( - final Settings settings, - NamedWriteableRegistry namedWriteableRegistry, - final RestController restController, - final ClusterSettings clusterSettings, - final IndexScopedSettings indexScopedSettings, - final SettingsFilter settingsFilter, - final IndexNameExpressionResolver indexNameExpressionResolver, - final Supplier nodesInCluster, - Predicate clusterSupportsFeature - ) { - return List.of(new RestEntitlementsCheckAction("allowed_nonmodular")); - } -} diff --git a/libs/entitlement/qa/entitlement-allowed-nonmodular/src/main/plugin-metadata/entitlement-policy.yaml b/libs/entitlement/qa/entitlement-allowed-nonmodular/src/main/plugin-metadata/entitlement-policy.yaml deleted file mode 100644 index 871dd24046127..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed-nonmodular/src/main/plugin-metadata/entitlement-policy.yaml +++ /dev/null @@ -1,10 +0,0 @@ -ALL-UNNAMED: - - create_class_loader - - set_https_connection_properties - - inbound_network - - outbound_network - - write_system_properties: - properties: - - es.entitlements.checkSetSystemProperty - - es.entitlements.checkClearSystemProperty - - load_native_libraries diff --git a/libs/entitlement/qa/entitlement-allowed/build.gradle b/libs/entitlement/qa/entitlement-allowed/build.gradle deleted file mode 100644 index b9518f8d65fb5..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed/build.gradle +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -apply plugin: 'elasticsearch.base-internal-es-plugin' - -esplugin { - name = 'entitlement-allowed' - description = 'A test module that invokes entitlement checks that are supposed to be granted' - classname = 'org.elasticsearch.entitlement.qa.EntitlementAllowedPlugin' -} - -dependencies { - implementation project(':libs:entitlement:qa:common') -} - -tasks.named("javadoc").configure { - enabled = false -} - diff --git a/libs/entitlement/qa/entitlement-allowed/src/main/java/module-info.java b/libs/entitlement/qa/entitlement-allowed/src/main/java/module-info.java deleted file mode 100644 index a88611e6ac9a5..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed/src/main/java/module-info.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -module org.elasticsearch.entitlement.qa.allowed { - requires org.elasticsearch.server; - requires org.elasticsearch.base; - requires org.elasticsearch.logging; - requires org.elasticsearch.entitlement.qa.common; -} diff --git a/libs/entitlement/qa/entitlement-allowed/src/main/java/org/elasticsearch/entitlement/qa/EntitlementAllowedPlugin.java b/libs/entitlement/qa/entitlement-allowed/src/main/java/org/elasticsearch/entitlement/qa/EntitlementAllowedPlugin.java deleted file mode 100644 index 8649daf272e70..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed/src/main/java/org/elasticsearch/entitlement/qa/EntitlementAllowedPlugin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ -package org.elasticsearch.entitlement.qa; - -import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; -import org.elasticsearch.cluster.node.DiscoveryNodes; -import org.elasticsearch.common.io.stream.NamedWriteableRegistry; -import org.elasticsearch.common.settings.ClusterSettings; -import org.elasticsearch.common.settings.IndexScopedSettings; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.settings.SettingsFilter; -import org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction; -import org.elasticsearch.features.NodeFeature; -import org.elasticsearch.plugins.ActionPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.rest.RestController; -import org.elasticsearch.rest.RestHandler; - -import java.util.List; -import java.util.function.Predicate; -import java.util.function.Supplier; - -public class EntitlementAllowedPlugin extends Plugin implements ActionPlugin { - @Override - public List getRestHandlers( - final Settings settings, - NamedWriteableRegistry namedWriteableRegistry, - final RestController restController, - final ClusterSettings clusterSettings, - final IndexScopedSettings indexScopedSettings, - final SettingsFilter settingsFilter, - final IndexNameExpressionResolver indexNameExpressionResolver, - final Supplier nodesInCluster, - Predicate clusterSupportsFeature - ) { - return List.of(new RestEntitlementsCheckAction("allowed")); - } -} diff --git a/libs/entitlement/qa/entitlement-allowed/src/main/plugin-metadata/entitlement-policy.yaml b/libs/entitlement/qa/entitlement-allowed/src/main/plugin-metadata/entitlement-policy.yaml deleted file mode 100644 index 507ba4861c274..0000000000000 --- a/libs/entitlement/qa/entitlement-allowed/src/main/plugin-metadata/entitlement-policy.yaml +++ /dev/null @@ -1,10 +0,0 @@ -org.elasticsearch.entitlement.qa.common: - - create_class_loader - - set_https_connection_properties - - inbound_network - - outbound_network - - write_system_properties: - properties: - - es.entitlements.checkSetSystemProperty - - es.entitlements.checkClearSystemProperty - - load_native_libraries diff --git a/libs/entitlement/qa/entitlement-denied-nonmodular/build.gradle b/libs/entitlement/qa/entitlement-denied-nonmodular/build.gradle deleted file mode 100644 index 6a88dd66eaf75..0000000000000 --- a/libs/entitlement/qa/entitlement-denied-nonmodular/build.gradle +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -apply plugin: 'elasticsearch.base-internal-es-plugin' - -esplugin { - name = 'entitlement-denied-nonmodular' - description = 'A non-modular test module that invokes non-granted entitlement and triggers exceptions' - classname = 'org.elasticsearch.entitlement.qa.nonmodular.EntitlementDeniedNonModularPlugin' -} - -dependencies { - implementation project(':libs:entitlement:qa:common') -} - -tasks.named("javadoc").configure { - enabled = false -} diff --git a/libs/entitlement/qa/entitlement-denied-nonmodular/src/main/java/org/elasticsearch/entitlement/qa/nonmodular/EntitlementDeniedNonModularPlugin.java b/libs/entitlement/qa/entitlement-denied-nonmodular/src/main/java/org/elasticsearch/entitlement/qa/nonmodular/EntitlementDeniedNonModularPlugin.java deleted file mode 100644 index 7ca89c735a602..0000000000000 --- a/libs/entitlement/qa/entitlement-denied-nonmodular/src/main/java/org/elasticsearch/entitlement/qa/nonmodular/EntitlementDeniedNonModularPlugin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ -package org.elasticsearch.entitlement.qa.nonmodular; - -import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; -import org.elasticsearch.cluster.node.DiscoveryNodes; -import org.elasticsearch.common.io.stream.NamedWriteableRegistry; -import org.elasticsearch.common.settings.ClusterSettings; -import org.elasticsearch.common.settings.IndexScopedSettings; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.settings.SettingsFilter; -import org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction; -import org.elasticsearch.features.NodeFeature; -import org.elasticsearch.plugins.ActionPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.rest.RestController; -import org.elasticsearch.rest.RestHandler; - -import java.util.List; -import java.util.function.Predicate; -import java.util.function.Supplier; - -public class EntitlementDeniedNonModularPlugin extends Plugin implements ActionPlugin { - @Override - public List getRestHandlers( - final Settings settings, - NamedWriteableRegistry namedWriteableRegistry, - final RestController restController, - final ClusterSettings clusterSettings, - final IndexScopedSettings indexScopedSettings, - final SettingsFilter settingsFilter, - final IndexNameExpressionResolver indexNameExpressionResolver, - final Supplier nodesInCluster, - Predicate clusterSupportsFeature - ) { - return List.of(new RestEntitlementsCheckAction("denied_nonmodular")); - } -} diff --git a/libs/entitlement/qa/entitlement-denied-nonmodular/src/main/plugin-metadata/entitlement-policy.yaml b/libs/entitlement/qa/entitlement-denied-nonmodular/src/main/plugin-metadata/entitlement-policy.yaml deleted file mode 100644 index d3a32baf3636f..0000000000000 --- a/libs/entitlement/qa/entitlement-denied-nonmodular/src/main/plugin-metadata/entitlement-policy.yaml +++ /dev/null @@ -1,5 +0,0 @@ -ALL-UNNAMED: - - write_system_properties: - properties: - # entitlement itself not sufficient, also no wildcard support - - "*" diff --git a/libs/entitlement/qa/entitlement-denied/build.gradle b/libs/entitlement/qa/entitlement-denied/build.gradle deleted file mode 100644 index 9d1872563b8c5..0000000000000 --- a/libs/entitlement/qa/entitlement-denied/build.gradle +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -apply plugin: 'elasticsearch.base-internal-es-plugin' - -esplugin { - name = 'entitlement-denied' - description = 'A test module that invokes non-granted entitlement and triggers exceptions' - classname = 'org.elasticsearch.entitlement.qa.EntitlementDeniedPlugin' -} - -dependencies { - implementation project(':libs:entitlement:qa:common') -} - -tasks.named("javadoc").configure { - enabled = false -} - diff --git a/libs/entitlement/qa/entitlement-denied/src/main/java/module-info.java b/libs/entitlement/qa/entitlement-denied/src/main/java/module-info.java deleted file mode 100644 index 3def472be7a45..0000000000000 --- a/libs/entitlement/qa/entitlement-denied/src/main/java/module-info.java +++ /dev/null @@ -1,6 +0,0 @@ -module org.elasticsearch.entitlement.qa.denied { - requires org.elasticsearch.server; - requires org.elasticsearch.base; - requires org.apache.logging.log4j; - requires org.elasticsearch.entitlement.qa.common; -} diff --git a/libs/entitlement/qa/entitlement-denied/src/main/plugin-metadata/entitlement-policy.yaml b/libs/entitlement/qa/entitlement-denied/src/main/plugin-metadata/entitlement-policy.yaml deleted file mode 100644 index 7b2253fd2e08a..0000000000000 --- a/libs/entitlement/qa/entitlement-denied/src/main/plugin-metadata/entitlement-policy.yaml +++ /dev/null @@ -1,5 +0,0 @@ -org.elasticsearch.entitlement.qa.common: - - write_system_properties: - properties: - # entitlement itself not sufficient, also no wildcard support - - "*" diff --git a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedIT.java b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedIT.java index c38e8b3f35efb..c9eb4ea665aa1 100644 --- a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedIT.java +++ b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedIT.java @@ -14,41 +14,34 @@ import org.elasticsearch.client.Request; import org.elasticsearch.client.Response; -import org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction; +import org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction; import org.elasticsearch.test.cluster.ElasticsearchCluster; import org.elasticsearch.test.rest.ESRestTestCase; import org.junit.ClassRule; import java.io.IOException; -import java.util.stream.Stream; +import static org.elasticsearch.entitlement.qa.EntitlementsUtil.ALLOWED_ENTITLEMENTS; import static org.hamcrest.Matchers.equalTo; public class EntitlementsAllowedIT extends ESRestTestCase { @ClassRule public static ElasticsearchCluster cluster = ElasticsearchCluster.local() - .module("entitlement-allowed") - .module("entitlement-allowed-nonmodular") + .module("test-plugin", spec -> EntitlementsUtil.setupEntitlements(spec, true, ALLOWED_ENTITLEMENTS)) .systemProperty("es.entitlements.enabled", "true") .setting("xpack.security.enabled", "false") .build(); - private final String pathPrefix; private final String actionName; - public EntitlementsAllowedIT(@Name("pathPrefix") String pathPrefix, @Name("actionName") String actionName) { - this.pathPrefix = pathPrefix; + public EntitlementsAllowedIT(@Name("actionName") String actionName) { this.actionName = actionName; } @ParametersFactory public static Iterable data() { - return Stream.of("allowed", "allowed_nonmodular") - .flatMap( - path -> RestEntitlementsCheckAction.getCheckActionsAllowedInPlugins().stream().map(action -> new Object[] { path, action }) - ) - .toList(); + return RestEntitlementsCheckAction.getCheckActionsAllowedInPlugins().stream().map(action -> new Object[] { action }).toList(); } @Override @@ -57,8 +50,8 @@ protected String getTestRestCluster() { } public void testCheckActionWithPolicyPass() throws IOException { - logger.info("Executing Entitlement test [{}] for [{}]", pathPrefix, actionName); - var request = new Request("GET", "/_entitlement/" + pathPrefix + "/_check"); + logger.info("Executing Entitlement test for [{}]", actionName); + var request = new Request("GET", "/_entitlement_check"); request.addParameter("action", actionName); Response result = client().performRequest(request); assertThat(result.getStatusLine().getStatusCode(), equalTo(200)); diff --git a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedNonModularIT.java b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedNonModularIT.java new file mode 100644 index 0000000000000..5c56774ca9067 --- /dev/null +++ b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsAllowedNonModularIT.java @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.entitlement.qa; + +import com.carrotsearch.randomizedtesting.annotations.Name; +import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; + +import org.elasticsearch.client.Request; +import org.elasticsearch.client.Response; +import org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction; +import org.elasticsearch.test.cluster.ElasticsearchCluster; +import org.elasticsearch.test.rest.ESRestTestCase; +import org.junit.ClassRule; + +import java.io.IOException; + +import static org.elasticsearch.entitlement.qa.EntitlementsUtil.ALLOWED_ENTITLEMENTS; +import static org.hamcrest.Matchers.equalTo; + +public class EntitlementsAllowedNonModularIT extends ESRestTestCase { + + @ClassRule + public static ElasticsearchCluster cluster = ElasticsearchCluster.local() + .module("test-plugin", spec -> EntitlementsUtil.setupEntitlements(spec, false, ALLOWED_ENTITLEMENTS)) + .systemProperty("es.entitlements.enabled", "true") + .setting("xpack.security.enabled", "false") + .build(); + + private final String actionName; + + public EntitlementsAllowedNonModularIT(@Name("actionName") String actionName) { + this.actionName = actionName; + } + + @ParametersFactory + public static Iterable data() { + return RestEntitlementsCheckAction.getCheckActionsAllowedInPlugins().stream().map(action -> new Object[] { action }).toList(); + } + + @Override + protected String getTestRestCluster() { + return cluster.getHttpAddresses(); + } + + public void testCheckActionWithPolicyPass() throws IOException { + logger.info("Executing Entitlement test for [{}]", actionName); + var request = new Request("GET", "/_entitlement_check"); + request.addParameter("action", actionName); + Response result = client().performRequest(request); + assertThat(result.getStatusLine().getStatusCode(), equalTo(200)); + } +} diff --git a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedIT.java b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedIT.java index e2e5a3c4c61e6..fac70e3167f43 100644 --- a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedIT.java +++ b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedIT.java @@ -13,13 +13,12 @@ import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; import org.elasticsearch.client.Request; -import org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction; +import org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction; import org.elasticsearch.test.cluster.ElasticsearchCluster; import org.elasticsearch.test.rest.ESRestTestCase; import org.junit.ClassRule; import java.io.IOException; -import java.util.stream.Stream; import static org.hamcrest.Matchers.containsString; @@ -27,8 +26,7 @@ public class EntitlementsDeniedIT extends ESRestTestCase { @ClassRule public static ElasticsearchCluster cluster = ElasticsearchCluster.local() - .plugin("entitlement-denied") - .plugin("entitlement-denied-nonmodular") + .module("test-plugin", spec -> EntitlementsUtil.setupEntitlements(spec, true, null)) .systemProperty("es.entitlements.enabled", "true") .setting("xpack.security.enabled", "false") // Logs in libs/entitlement/qa/build/test-results/javaRestTest/TEST-org.elasticsearch.entitlement.qa.EntitlementsDeniedIT.xml @@ -40,25 +38,21 @@ protected String getTestRestCluster() { return cluster.getHttpAddresses(); } - private final String pathPrefix; private final String actionName; - public EntitlementsDeniedIT(@Name("pathPrefix") String pathPrefix, @Name("actionName") String actionName) { - this.pathPrefix = pathPrefix; + public EntitlementsDeniedIT(@Name("actionName") String actionName) { this.actionName = actionName; } @ParametersFactory public static Iterable data() { - return Stream.of("denied", "denied_nonmodular") - .flatMap(path -> RestEntitlementsCheckAction.getAllCheckActions().stream().map(action -> new Object[] { path, action })) - .toList(); + return RestEntitlementsCheckAction.getAllCheckActions().stream().map(action -> new Object[] { action }).toList(); } public void testCheckThrows() { - logger.info("Executing Entitlement test [{}] for [{}]", pathPrefix, actionName); + logger.info("Executing Entitlement test for [{}]", actionName); var exception = expectThrows(IOException.class, () -> { - var request = new Request("GET", "/_entitlement/" + pathPrefix + "/_check"); + var request = new Request("GET", "/_entitlement_check"); request.addParameter("action", actionName); client().performRequest(request); }); diff --git a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedNonModularIT.java b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedNonModularIT.java new file mode 100644 index 0000000000000..d48e23e6332ed --- /dev/null +++ b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsDeniedNonModularIT.java @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.entitlement.qa; + +import com.carrotsearch.randomizedtesting.annotations.Name; +import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; + +import org.elasticsearch.client.Request; +import org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction; +import org.elasticsearch.test.cluster.ElasticsearchCluster; +import org.elasticsearch.test.rest.ESRestTestCase; +import org.junit.ClassRule; + +import java.io.IOException; + +import static org.hamcrest.Matchers.containsString; + +public class EntitlementsDeniedNonModularIT extends ESRestTestCase { + + @ClassRule + public static ElasticsearchCluster cluster = ElasticsearchCluster.local() + .module("test-plugin", spec -> EntitlementsUtil.setupEntitlements(spec, false, null)) + .systemProperty("es.entitlements.enabled", "true") + .setting("xpack.security.enabled", "false") + // Logs in libs/entitlement/qa/build/test-results/javaRestTest/TEST-org.elasticsearch.entitlement.qa.EntitlementsDeniedIT.xml + // .setting("logger.org.elasticsearch.entitlement", "DEBUG") + .build(); + + @Override + protected String getTestRestCluster() { + return cluster.getHttpAddresses(); + } + + private final String actionName; + + public EntitlementsDeniedNonModularIT(@Name("actionName") String actionName) { + this.actionName = actionName; + } + + @ParametersFactory + public static Iterable data() { + return RestEntitlementsCheckAction.getAllCheckActions().stream().map(action -> new Object[] { action }).toList(); + } + + public void testCheckThrows() { + logger.info("Executing Entitlement test for [{}]", actionName); + var exception = expectThrows(IOException.class, () -> { + var request = new Request("GET", "/_entitlement_check"); + request.addParameter("action", actionName); + client().performRequest(request); + }); + assertThat(exception.getMessage(), containsString("not_entitled_exception")); + } +} diff --git a/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsUtil.java b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsUtil.java new file mode 100644 index 0000000000000..46d411baf1aa0 --- /dev/null +++ b/libs/entitlement/qa/src/javaRestTest/java/org/elasticsearch/entitlement/qa/EntitlementsUtil.java @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.entitlement.qa; + +import org.elasticsearch.common.Strings; +import org.elasticsearch.core.CheckedConsumer; +import org.elasticsearch.test.cluster.local.PluginInstallSpec; +import org.elasticsearch.test.cluster.util.resource.Resource; +import org.elasticsearch.xcontent.XContentBuilder; +import org.elasticsearch.xcontent.yaml.YamlXContent; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.List; +import java.util.Map; + +class EntitlementsUtil { + + static final CheckedConsumer ALLOWED_ENTITLEMENTS = builder -> { + builder.value("create_class_loader"); + builder.value("set_https_connection_properties"); + builder.value("inbound_network"); + builder.value("outbound_network"); + builder.value("load_native_libraries"); + builder.value( + Map.of( + "write_system_properties", + Map.of("properties", List.of("es.entitlements.checkSetSystemProperty", "es.entitlements.checkClearSystemProperty")) + ) + ); + }; + + static void setupEntitlements(PluginInstallSpec spec, boolean modular, CheckedConsumer policyBuilder) { + String moduleName = modular ? "org.elasticsearch.entitlement.qa.test" : "ALL-UNNAMED"; + if (policyBuilder != null) { + try { + try (var builder = YamlXContent.contentBuilder()) { + builder.startObject(); + builder.field(moduleName); + builder.startArray(); + policyBuilder.accept(builder); + builder.endArray(); + builder.endObject(); + + String policy = Strings.toString(builder); + System.out.println("Using entitlement policy:\n" + policy); + spec.withEntitlementsOverride(old -> Resource.fromString(policy)); + } + + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + if (modular == false) { + spec.withPropertiesOverride(old -> { + String props = old.replace("modulename=org.elasticsearch.entitlement.qa.test", ""); + System.out.println("Using plugin properties:\n" + props); + return Resource.fromString(props); + }); + } + } + + private EntitlementsUtil() {} +} diff --git a/libs/entitlement/qa/common/build.gradle b/libs/entitlement/qa/test-plugin/build.gradle similarity index 57% rename from libs/entitlement/qa/common/build.gradle rename to libs/entitlement/qa/test-plugin/build.gradle index 1fd5178e4aee7..4a1531b3e96d8 100644 --- a/libs/entitlement/qa/common/build.gradle +++ b/libs/entitlement/qa/test-plugin/build.gradle @@ -7,10 +7,27 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import org.elasticsearch.gradle.internal.precommit.CheckForbiddenApisTask + +apply plugin: 'elasticsearch.base-internal-es-plugin' apply plugin: 'elasticsearch.build' apply plugin: 'elasticsearch.mrjar' +esplugin { + name = 'test-plugin' + description = 'A test plugin that invokes methods checked by entitlements' + classname = 'org.elasticsearch.entitlement.qa.test.EntitlementTestPlugin' +} + dependencies { implementation project(':server') implementation project(':libs:logging') } + +tasks.named("javadoc").configure { + enabled = false +} + +tasks.withType(CheckForbiddenApisTask).configureEach { + replaceSignatureFiles 'jdk-signatures' +} diff --git a/libs/entitlement/qa/common/src/main/java/module-info.java b/libs/entitlement/qa/test-plugin/src/main/java/module-info.java similarity index 87% rename from libs/entitlement/qa/common/src/main/java/module-info.java rename to libs/entitlement/qa/test-plugin/src/main/java/module-info.java index c40240f3dc1d5..a1df03ad5c974 100644 --- a/libs/entitlement/qa/common/src/main/java/module-info.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/module-info.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -module org.elasticsearch.entitlement.qa.common { +module org.elasticsearch.entitlement.qa.test { requires org.elasticsearch.server; requires org.elasticsearch.base; requires org.elasticsearch.logging; @@ -15,6 +15,4 @@ // Modules we'll attempt to use in order to exercise entitlements requires java.logging; requires java.net.http; - - exports org.elasticsearch.entitlement.qa.common; } diff --git a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/DummyImplementations.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/DummyImplementations.java similarity index 99% rename from libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/DummyImplementations.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/DummyImplementations.java index 304aead1e2bf6..6564e0eed41e1 100644 --- a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/DummyImplementations.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/DummyImplementations.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import java.io.IOException; import java.io.InputStream; diff --git a/libs/entitlement/qa/entitlement-denied/src/main/java/org/elasticsearch/entitlement/qa/EntitlementDeniedPlugin.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/EntitlementTestPlugin.java similarity index 86% rename from libs/entitlement/qa/entitlement-denied/src/main/java/org/elasticsearch/entitlement/qa/EntitlementDeniedPlugin.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/EntitlementTestPlugin.java index 2a2fd35d47cf3..36283cce3c81d 100644 --- a/libs/entitlement/qa/entitlement-denied/src/main/java/org/elasticsearch/entitlement/qa/EntitlementDeniedPlugin.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/EntitlementTestPlugin.java @@ -6,7 +6,7 @@ * your election, the "Elastic License 2.0", the "GNU Affero General Public * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa; +package org.elasticsearch.entitlement.qa.test; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.node.DiscoveryNodes; @@ -15,7 +15,6 @@ import org.elasticsearch.common.settings.IndexScopedSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.SettingsFilter; -import org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction; import org.elasticsearch.features.NodeFeature; import org.elasticsearch.plugins.ActionPlugin; import org.elasticsearch.plugins.Plugin; @@ -26,7 +25,7 @@ import java.util.function.Predicate; import java.util.function.Supplier; -public class EntitlementDeniedPlugin extends Plugin implements ActionPlugin { +public class EntitlementTestPlugin extends Plugin implements ActionPlugin { @Override public List getRestHandlers( final Settings settings, @@ -39,6 +38,6 @@ public List getRestHandlers( final Supplier nodesInCluster, Predicate clusterSupportsFeature ) { - return List.of(new RestEntitlementsCheckAction("denied")); + return List.of(new RestEntitlementsCheckAction()); } } diff --git a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/LoadNativeLibrariesCheckActions.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/LoadNativeLibrariesCheckActions.java similarity index 96% rename from libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/LoadNativeLibrariesCheckActions.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/LoadNativeLibrariesCheckActions.java index e7c12ccbaa5e8..50980bc230f55 100644 --- a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/LoadNativeLibrariesCheckActions.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/LoadNativeLibrariesCheckActions.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; class LoadNativeLibrariesCheckActions { static void runtimeLoad() { diff --git a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/NetworkAccessCheckActions.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/NetworkAccessCheckActions.java similarity index 99% rename from libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/NetworkAccessCheckActions.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/NetworkAccessCheckActions.java index 49cf586ea1285..f778c4be0b779 100644 --- a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/NetworkAccessCheckActions.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/NetworkAccessCheckActions.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import org.elasticsearch.core.SuppressForbidden; diff --git a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/RestEntitlementsCheckAction.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/RestEntitlementsCheckAction.java similarity index 92% rename from libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/RestEntitlementsCheckAction.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/RestEntitlementsCheckAction.java index 0e506d829ac36..712502b38fe90 100644 --- a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/RestEntitlementsCheckAction.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/RestEntitlementsCheckAction.java @@ -7,24 +7,24 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import org.elasticsearch.client.internal.node.NodeClient; import org.elasticsearch.common.Strings; import org.elasticsearch.core.CheckedRunnable; import org.elasticsearch.core.SuppressForbidden; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyBreakIteratorProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyCalendarDataProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyCalendarNameProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyCollatorProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyCurrencyNameProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyDateFormatProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyDateFormatSymbolsProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyDecimalFormatSymbolsProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyLocaleNameProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyLocaleServiceProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyNumberFormatProvider; -import org.elasticsearch.entitlement.qa.common.DummyImplementations.DummyTimeZoneNameProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyBreakIteratorProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyCalendarDataProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyCalendarNameProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyCollatorProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyCurrencyNameProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyDateFormatProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyDateFormatSymbolsProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyDecimalFormatSymbolsProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyLocaleNameProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyLocaleServiceProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyNumberFormatProvider; +import org.elasticsearch.entitlement.qa.test.DummyImplementations.DummyTimeZoneNameProvider; import org.elasticsearch.logging.LogManager; import org.elasticsearch.logging.Logger; import org.elasticsearch.rest.BaseRestHandler; @@ -61,16 +61,15 @@ import javax.net.ssl.SSLContext; import static java.util.Map.entry; -import static org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction.CheckAction.alwaysDenied; -import static org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction.CheckAction.deniedToPlugins; -import static org.elasticsearch.entitlement.qa.common.RestEntitlementsCheckAction.CheckAction.forPlugins; +import static org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction.CheckAction.alwaysDenied; +import static org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction.CheckAction.deniedToPlugins; +import static org.elasticsearch.entitlement.qa.test.RestEntitlementsCheckAction.CheckAction.forPlugins; import static org.elasticsearch.rest.RestRequest.Method.GET; @SuppressWarnings("unused") public class RestEntitlementsCheckAction extends BaseRestHandler { private static final Logger logger = LogManager.getLogger(RestEntitlementsCheckAction.class); public static final Thread NO_OP_SHUTDOWN_HOOK = new Thread(() -> {}, "Shutdown hook for testing"); - private final String prefix; record CheckAction(CheckedRunnable action, boolean isAlwaysDeniedToPlugins, Integer fromJavaVersion) { /** @@ -442,10 +441,6 @@ private static void receiveDatagramSocket() throws IOException { } } - public RestEntitlementsCheckAction(String prefix) { - this.prefix = prefix; - } - public static Set getCheckActionsAllowedInPlugins() { return checkActions.entrySet() .stream() @@ -460,17 +455,17 @@ public static Set getAllCheckActions() { @Override public List routes() { - return List.of(new Route(GET, "/_entitlement/" + prefix + "/_check")); + return List.of(new Route(GET, "/_entitlement_check")); } @Override public String getName() { - return "check_" + prefix + "_action"; + return "check_entitlement_action"; } @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) { - logger.info("RestEntitlementsCheckAction rest handler [{}]", request.path()); + logger.debug("RestEntitlementsCheckAction rest handler [{}]", request.path()); var actionName = request.param("action"); if (Strings.isNullOrEmpty(actionName)) { throw new IllegalArgumentException("Missing action parameter"); diff --git a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java similarity index 96% rename from libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java index df7777b6614aa..548bce8e2f766 100644 --- a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import java.io.IOException; import java.net.URI; diff --git a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/WritePropertiesCheckActions.java b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/WritePropertiesCheckActions.java similarity index 96% rename from libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/WritePropertiesCheckActions.java rename to libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/WritePropertiesCheckActions.java index 8e5173796458d..6ddb3e54a62cf 100644 --- a/libs/entitlement/qa/common/src/main/java/org/elasticsearch/entitlement/qa/common/WritePropertiesCheckActions.java +++ b/libs/entitlement/qa/test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/WritePropertiesCheckActions.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import org.elasticsearch.core.SuppressForbidden; diff --git a/libs/entitlement/qa/common/src/main18/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java b/libs/entitlement/qa/test-plugin/src/main18/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java similarity index 97% rename from libs/entitlement/qa/common/src/main18/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java rename to libs/entitlement/qa/test-plugin/src/main18/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java index 6229b7f8e6cfc..5a456c65d8206 100644 --- a/libs/entitlement/qa/common/src/main18/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java +++ b/libs/entitlement/qa/test-plugin/src/main18/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import java.io.IOException; import java.net.URI; diff --git a/libs/entitlement/qa/common/src/main21/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java b/libs/entitlement/qa/test-plugin/src/main21/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java similarity index 98% rename from libs/entitlement/qa/common/src/main21/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java rename to libs/entitlement/qa/test-plugin/src/main21/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java index 8dcee7e7603de..d94597c2d9dd0 100644 --- a/libs/entitlement/qa/common/src/main21/java/org/elasticsearch/entitlement/qa/common/VersionSpecificNetworkChecks.java +++ b/libs/entitlement/qa/test-plugin/src/main21/java/org/elasticsearch/entitlement/qa/test/VersionSpecificNetworkChecks.java @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -package org.elasticsearch.entitlement.qa.common; +package org.elasticsearch.entitlement.qa.test; import java.io.IOException; import java.net.URI;