diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java index d13731fb67bed..e7d40a79baf47 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java @@ -8,7 +8,9 @@ */ package org.elasticsearch.logstashbridge.script; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.ingest.common.ProcessorsWhitelistExtension; import org.elasticsearch.logstashbridge.StableBridgeAPI; import org.elasticsearch.logstashbridge.common.SettingsBridge; @@ -66,7 +68,9 @@ private static ScriptService getScriptService(final Settings settings, final Lon MustacheScriptEngine.NAME, new MustacheScriptEngine(settings) ); - return new ScriptService(settings, scriptEngines, ScriptModule.CORE_CONTEXTS, timeProvider); + @FixForMultiProject // Should this be non-null? + final ProjectResolver projectResolver = null; + return new ScriptService(settings, scriptEngines, ScriptModule.CORE_CONTEXTS, timeProvider, projectResolver); } private static List getPainlessBaseWhiteList() { diff --git a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java index 1d85d80558d7f..2a1e76666c934 100644 --- a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java @@ -18,6 +18,7 @@ import org.apache.lucene.search.Query; import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.time.DateFormatters; import org.elasticsearch.index.mapper.DateFieldMapper; @@ -106,7 +107,8 @@ public Set> getSupportedContexts() { Settings.EMPTY, engines, Map.of(MovingFunctionScript.CONTEXT.name, MovingFunctionScript.CONTEXT), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); } diff --git a/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java b/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java index aa123ebe2cf2d..bf22aa88ccdcc 100644 --- a/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java +++ b/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java @@ -63,7 +63,13 @@ public boolean execute(Token token) { } }; - ScriptService scriptService = new ScriptService(indexSettings, Collections.emptyMap(), Collections.emptyMap(), () -> 1L) { + ScriptService scriptService = new ScriptService( + indexSettings, + Collections.emptyMap(), + Collections.emptyMap(), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ) { @Override @SuppressWarnings("unchecked") public FactoryType compile(Script script, ScriptContext context) { diff --git a/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/ScriptedConditionTokenFilterTests.java b/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/ScriptedConditionTokenFilterTests.java index 6bacf96c71772..85b1cf105cc20 100644 --- a/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/ScriptedConditionTokenFilterTests.java +++ b/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/ScriptedConditionTokenFilterTests.java @@ -64,7 +64,13 @@ public boolean execute(Token token) { }; @SuppressWarnings("unchecked") - ScriptService scriptService = new ScriptService(indexSettings, Collections.emptyMap(), Collections.emptyMap(), () -> 1L) { + ScriptService scriptService = new ScriptService( + indexSettings, + Collections.emptyMap(), + Collections.emptyMap(), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ) { @Override public FactoryType compile(Script script, ScriptContext context) { assertEquals(context, AnalysisPredicateScript.CONTEXT); diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorFactoryTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorFactoryTests.java index 5e07909789d78..185295da96d8c 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorFactoryTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorFactoryTests.java @@ -10,6 +10,7 @@ package org.elasticsearch.ingest.common; import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.ingest.TestIngestDocument; import org.elasticsearch.script.CtxMap; @@ -145,7 +146,8 @@ public void testInlineIsCompiled() throws Exception { return null; }), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); factory = new ScriptProcessor.Factory(scriptService); diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorTests.java index 205d91d6de404..9f6d6cff7a919 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.ingest.common; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.ingest.IngestDocument; import org.elasticsearch.ingest.RandomDocumentPicks; @@ -47,7 +48,8 @@ public void setupScripting() { return null; }), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); script = new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, scriptName, Map.of()); ingestScriptFactory = scriptService.compile(script, IngestScript.CONTEXT); diff --git a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionDoubleValuesScriptTests.java b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionDoubleValuesScriptTests.java index 8b302de382953..593d377030c32 100644 --- a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionDoubleValuesScriptTests.java +++ b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionDoubleValuesScriptTests.java @@ -13,6 +13,7 @@ import org.apache.lucene.search.DoubleValues; import org.apache.lucene.search.DoubleValuesSource; import org.apache.lucene.search.SortField; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.DoubleValuesScript; import org.elasticsearch.script.Script; @@ -39,7 +40,13 @@ public void setUp() throws Exception { super.setUp(); engine = new ExpressionScriptEngine(); - scriptService = new ScriptService(Settings.EMPTY, Map.of("expression", engine), ScriptModule.CORE_CONTEXTS, () -> 1L); + scriptService = new ScriptService( + Settings.EMPTY, + Map.of("expression", engine), + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @SuppressWarnings("unchecked") diff --git a/qa/smoke-test-ingest-with-all-dependencies/src/internalClusterTest/java/org/elasticsearch/ingest/AbstractScriptTestCase.java b/qa/smoke-test-ingest-with-all-dependencies/src/internalClusterTest/java/org/elasticsearch/ingest/AbstractScriptTestCase.java index 8d877bd48c1e3..fc5a59640f6df 100644 --- a/qa/smoke-test-ingest-with-all-dependencies/src/internalClusterTest/java/org/elasticsearch/ingest/AbstractScriptTestCase.java +++ b/qa/smoke-test-ingest-with-all-dependencies/src/internalClusterTest/java/org/elasticsearch/ingest/AbstractScriptTestCase.java @@ -9,6 +9,7 @@ package org.elasticsearch.ingest; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptEngine; @@ -33,7 +34,13 @@ public abstract class AbstractScriptTestCase extends ESTestCase { public void init() throws Exception { MustacheScriptEngine engine = new MustacheScriptEngine(Settings.EMPTY); Map engines = Collections.singletonMap(engine.getType(), engine); - scriptService = new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + scriptService = new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } protected TemplateScript.Factory compile(String template) { diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportDeleteStoredScriptAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportDeleteStoredScriptAction.java index 4a5339484a54d..3fc5c6be4f9c0 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportDeleteStoredScriptAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportDeleteStoredScriptAction.java @@ -58,7 +58,7 @@ protected void masterOperation( ClusterState state, ActionListener listener ) throws Exception { - ScriptService.deleteStoredScript(clusterService, request, listener); + ScriptService.deleteStoredScript(clusterService, projectResolver.getProjectId(), request, listener); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java index 52cbfceaf00de..6f0a3c5793a43 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java @@ -11,8 +11,8 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.ActionFilters; -import org.elasticsearch.action.support.master.TransportMasterNodeReadAction; -import org.elasticsearch.cluster.ClusterState; +import org.elasticsearch.action.support.master.TransportMasterNodeReadProjectAction; +import org.elasticsearch.cluster.ProjectState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.project.ProjectResolver; @@ -24,9 +24,7 @@ import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.TransportService; -public class TransportGetStoredScriptAction extends TransportMasterNodeReadAction { - - private final ProjectResolver projectResolver; +public class TransportGetStoredScriptAction extends TransportMasterNodeReadProjectAction { @Inject public TransportGetStoredScriptAction( @@ -43,25 +41,25 @@ public TransportGetStoredScriptAction( threadPool, actionFilters, GetStoredScriptRequest::new, + projectResolver, GetStoredScriptResponse::new, EsExecutors.DIRECT_EXECUTOR_SERVICE ); - this.projectResolver = projectResolver; } @Override protected void masterOperation( Task task, GetStoredScriptRequest request, - ClusterState state, + ProjectState state, ActionListener listener ) throws Exception { - listener.onResponse(new GetStoredScriptResponse(request.id(), ScriptService.getStoredScript(state, request))); + listener.onResponse(new GetStoredScriptResponse(request.id(), ScriptService.getStoredScript(state.metadata(), request))); } @Override - protected ClusterBlockException checkBlock(GetStoredScriptRequest request, ClusterState state) { - return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ); + protected ClusterBlockException checkBlock(GetStoredScriptRequest request, ProjectState state) { + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java index 43e91e3c57d86..0c865cd8c7417 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java @@ -61,7 +61,7 @@ protected void masterOperation( ClusterState state, ActionListener listener ) throws Exception { - scriptService.putStoredScript(clusterService, request, listener); + scriptService.putStoredScript(clusterService, projectResolver.getProjectId(), request, listener); } @Override diff --git a/server/src/main/java/org/elasticsearch/node/NodeConstruction.java b/server/src/main/java/org/elasticsearch/node/NodeConstruction.java index 646eb7a0d8f52..d2fd9b8ad0b58 100644 --- a/server/src/main/java/org/elasticsearch/node/NodeConstruction.java +++ b/server/src/main/java/org/elasticsearch/node/NodeConstruction.java @@ -302,7 +302,7 @@ static NodeConstruction prepareConstruction( constructor.createClientAndRegistries(settingsModule.getSettings(), threadPool, searchModule, projectResolver); DocumentParsingProvider documentParsingProvider = constructor.getDocumentParsingProvider(); - ScriptService scriptService = constructor.createScriptService(settingsModule, threadPool, serviceProvider); + ScriptService scriptService = constructor.createScriptService(settingsModule, threadPool, serviceProvider, projectResolver); constructor.createUpdateHelper(scriptService); @@ -612,7 +612,12 @@ private void createClientAndRegistries( }); } - private ScriptService createScriptService(SettingsModule settingsModule, ThreadPool threadPool, NodeServiceProvider serviceProvider) { + private ScriptService createScriptService( + SettingsModule settingsModule, + ThreadPool threadPool, + NodeServiceProvider serviceProvider, + ProjectResolver projectResolver + ) { Settings settings = settingsModule.getSettings(); ScriptModule scriptModule = new ScriptModule(settings, pluginsService.filterPlugins(ScriptPlugin.class).toList()); @@ -621,7 +626,8 @@ private ScriptService createScriptService(SettingsModule settingsModule, ThreadP settings, scriptModule.engines, scriptModule.contexts, - threadPool::absoluteTimeInMillis + threadPool::absoluteTimeInMillis, + projectResolver ); ScriptModule.registerClusterSettingsListeners(scriptService, settingsModule.getClusterSettings()); modules.add(b -> { b.bind(ScriptService.class).toInstance(scriptService); }); diff --git a/server/src/main/java/org/elasticsearch/node/NodeServiceProvider.java b/server/src/main/java/org/elasticsearch/node/NodeServiceProvider.java index 3b44d6b25b7af..23382b714ccfe 100644 --- a/server/src/main/java/org/elasticsearch/node/NodeServiceProvider.java +++ b/server/src/main/java/org/elasticsearch/node/NodeServiceProvider.java @@ -16,6 +16,7 @@ import org.elasticsearch.cluster.InternalClusterInfoService; import org.elasticsearch.cluster.NodeUsageStatsForThreadPoolsCollector; import org.elasticsearch.cluster.node.DiscoveryNode; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.breaker.CircuitBreaker; import org.elasticsearch.common.network.NetworkModule; @@ -64,9 +65,10 @@ ScriptService newScriptService( Settings settings, Map engines, Map> contexts, - LongSupplier timeProvider + LongSupplier timeProvider, + ProjectResolver projectResolver ) { - return new ScriptService(settings, engines, contexts, timeProvider); + return new ScriptService(settings, engines, contexts, timeProvider, projectResolver); } ClusterInfoService newClusterInfoService( diff --git a/server/src/main/java/org/elasticsearch/script/ScriptCache.java b/server/src/main/java/org/elasticsearch/script/ScriptCache.java index b1fae56ebf11c..9dab4ef4fb7fd 100644 --- a/server/src/main/java/org/elasticsearch/script/ScriptCache.java +++ b/server/src/main/java/org/elasticsearch/script/ScriptCache.java @@ -11,6 +11,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.common.breaker.CircuitBreaker; import org.elasticsearch.common.breaker.CircuitBreakingException; import org.elasticsearch.common.cache.Cache; @@ -78,13 +79,14 @@ public class ScriptCache { FactoryType compile( ScriptContext context, ScriptEngine scriptEngine, + ProjectId projectId, String id, String idOrCode, ScriptType type, Map options ) { String lang = scriptEngine.getType(); - CacheKey cacheKey = new CacheKey(lang, idOrCode, context.name, options); + CacheKey cacheKey = new CacheKey(lang, projectId, idOrCode, context.name, options); // Relying on computeIfAbsent to avoid multiple threads from compiling the same script try { @@ -204,12 +206,14 @@ public void onRemoval(RemovalNotification notification) { private static final class CacheKey { final String lang; + final ProjectId projectId; final String idOrCode; final String context; final Map options; - private CacheKey(String lang, String idOrCode, String context, Map options) { + private CacheKey(String lang, ProjectId projectId, String idOrCode, String context, Map options) { this.lang = lang; + this.projectId = projectId; this.idOrCode = idOrCode; this.context = context; this.options = options; diff --git a/server/src/main/java/org/elasticsearch/script/ScriptService.java b/server/src/main/java/org/elasticsearch/script/ScriptService.java index c44bf1ffc2731..cb947c2728c52 100644 --- a/server/src/main/java/org/elasticsearch/script/ScriptService.java +++ b/server/src/main/java/org/elasticsearch/script/ScriptService.java @@ -22,6 +22,9 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterStateApplier; import org.elasticsearch.cluster.ClusterStateUpdateTask; +import org.elasticsearch.cluster.metadata.ProjectId; +import org.elasticsearch.cluster.metadata.ProjectMetadata; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.Strings; import org.elasticsearch.common.logging.DeprecationCategory; @@ -176,6 +179,7 @@ public class ScriptService implements Closeable, ClusterStateApplier, ScriptComp private final Map engines; private final Map> contexts; + private final ProjectResolver projectResolver; private final LongSupplier timeProvider; private ClusterState clusterState; @@ -190,10 +194,12 @@ public ScriptService( Settings settings, Map engines, Map> contexts, - LongSupplier timeProvider + LongSupplier timeProvider, + ProjectResolver projectResolver ) { this.engines = Collections.unmodifiableMap(Objects.requireNonNull(engines)); this.contexts = Collections.unmodifiableMap(Objects.requireNonNull(contexts)); + this.projectResolver = projectResolver; if (Strings.hasLength(settings.get(DISABLE_DYNAMIC_SCRIPTING_SETTING))) { throw new IllegalArgumentException( @@ -549,31 +555,45 @@ private ScriptEngine getEngine(String lang) { * @param newMaxSizeInBytes The new maximum number of bytes. */ void setMaxSizeInBytes(int newMaxSizeInBytes) { - for (Map.Entry source : getScriptsFromClusterState().entrySet()) { - if (source.getValue().getSource().getBytes(StandardCharsets.UTF_8).length > newMaxSizeInBytes) { - throw new IllegalArgumentException( - "script.max_size_in_bytes cannot be set to [" - + newMaxSizeInBytes - + "], " - + "stored script [" - + source.getKey() - + "] exceeds the new value with a size of " - + "[" - + source.getValue().getSource().getBytes(StandardCharsets.UTF_8).length - + "]" - ); - } - } + validateNewMaxSizeInBytes(newMaxSizeInBytes); maxSizeInBytes = newMaxSizeInBytes; } + private void validateNewMaxSizeInBytes(int newMaxSizeInBytes) { + if (clusterState == null) { + return; + } + for (var project : clusterState.metadata().projects().values()) { + ScriptMetadata scriptMetadata = project.custom(ScriptMetadata.TYPE); + if (scriptMetadata == null) { + continue; + } + for (Map.Entry source : scriptMetadata.getStoredScripts().entrySet()) { + if (source.getValue().getSource().getBytes(StandardCharsets.UTF_8).length > newMaxSizeInBytes) { + throw new IllegalArgumentException( + "script.max_size_in_bytes cannot be set to [" + + newMaxSizeInBytes + + "], " + + "stored script [" + + source.getKey() + + "] exceeds the new value with a size of " + + "[" + + source.getValue().getSource().getBytes(StandardCharsets.UTF_8).length + + "]" + ); + } + } + } + } + /** * Compiles a script using the given context. * * @return a compiled script which may be used to construct instances of a script for the given context */ public FactoryType compile(Script script, ScriptContext context) { + ProjectId projectId = projectResolver.getProjectId(); Objects.requireNonNull(script); Objects.requireNonNull(context); @@ -590,7 +610,7 @@ public FactoryType compile(Script script, ScriptContext FactoryType compile(Script script, ScriptContext getScriptsFromClusterState() { - if (clusterState == null) { - return Collections.emptyMap(); - } - - ScriptMetadata scriptMetadata = clusterState.metadata().getProject().custom(ScriptMetadata.TYPE); - - if (scriptMetadata == null) { - return Collections.emptyMap(); - } - - return scriptMetadata.getStoredScripts(); - } - - protected StoredScriptSource getScriptFromClusterState(String id) { - ScriptMetadata scriptMetadata = clusterState.metadata().getProject().custom(ScriptMetadata.TYPE); + protected StoredScriptSource getScriptFromClusterState(ProjectId projectId, String id) { + ScriptMetadata scriptMetadata = clusterState.metadata().getProject(projectId).custom(ScriptMetadata.TYPE); if (scriptMetadata == null) { throw new ResourceNotFoundException("unable to find script [" + id + "] in cluster state"); @@ -683,6 +689,7 @@ protected StoredScriptSource getScriptFromClusterState(String id) { public void putStoredScript( ClusterService clusterService, + final ProjectId projectId, PutStoredScriptRequest request, ActionListener listener ) { @@ -732,7 +739,7 @@ public void putStoredScript( submitUnbatchedTask(clusterService, "put-script-" + request.id(), new AckedClusterStateUpdateTask(request, listener) { @Override public ClusterState execute(ClusterState currentState) { - final var project = currentState.metadata().getProject(); + final var project = currentState.metadata().getProject(projectId); final ScriptMetadata originalSmd = project.custom(ScriptMetadata.TYPE); final ScriptMetadata updatedSmd = ScriptMetadata.putStoredScript(originalSmd, request.id(), source); @@ -743,13 +750,14 @@ public ClusterState execute(ClusterState currentState) { public static void deleteStoredScript( ClusterService clusterService, + ProjectId projectId, DeleteStoredScriptRequest request, ActionListener listener ) { submitUnbatchedTask(clusterService, "delete-script-" + request.id(), new AckedClusterStateUpdateTask(request, listener) { @Override public ClusterState execute(ClusterState currentState) { - final var project = currentState.metadata().getProject(); + final var project = currentState.metadata().getProject(projectId); final ScriptMetadata originalSmd = project.custom(ScriptMetadata.TYPE); final ScriptMetadata updatedSmd = ScriptMetadata.deleteStoredScript(originalSmd, request.id()); @@ -767,8 +775,8 @@ private static void submitUnbatchedTask( clusterService.submitUnbatchedStateUpdateTask(source, task); } - public static StoredScriptSource getStoredScript(ClusterState state, GetStoredScriptRequest request) { - ScriptMetadata scriptMetadata = state.metadata().getProject().custom(ScriptMetadata.TYPE); + public static StoredScriptSource getStoredScript(ProjectMetadata project, GetStoredScriptRequest request) { + ScriptMetadata scriptMetadata = project.custom(ScriptMetadata.TYPE); if (scriptMetadata != null) { return scriptMetadata.getStoredScript(request.id()); diff --git a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java index 0cc2dcf38e8ff..0750648a52dfc 100644 --- a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java @@ -14,6 +14,7 @@ import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.support.replication.ReplicationRequest; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.document.DocumentField; @@ -119,7 +120,13 @@ public void setUp() throws Exception { scripts.put("return", vars -> null); final MockScriptEngine engine = new MockScriptEngine("mock", scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(engine.getType(), engine); - ScriptService scriptService = new ScriptService(baseSettings, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + ScriptService scriptService = new ScriptService( + baseSettings, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); updateHelper = new UpdateHelper(scriptService); } diff --git a/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java b/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java index db29c9a61e007..088c748bde5f6 100644 --- a/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java +++ b/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java @@ -29,6 +29,7 @@ import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNodeUtils; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.cluster.routing.RecoverySource; import org.elasticsearch.cluster.routing.ShardRouting; import org.elasticsearch.cluster.routing.ShardRoutingState; @@ -199,7 +200,13 @@ public void setUp() throws Exception { circuitBreakerService = new NoneCircuitBreakerService(); PageCacheRecycler pageCacheRecycler = new PageCacheRecycler(settings); bigArrays = new BigArrays(pageCacheRecycler, circuitBreakerService, CircuitBreaker.REQUEST); - scriptService = new ScriptService(settings, Collections.emptyMap(), Collections.emptyMap(), () -> 1L); + scriptService = new ScriptService( + settings, + Collections.emptyMap(), + Collections.emptyMap(), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); clusterService = ClusterServiceUtils.createClusterService(threadPool, ClusterSettings.createBuiltInClusterSettings(settings)); nodeEnvironment = new NodeEnvironment(settings, environment); threadPoolMergeExecutorService = ThreadPoolMergeExecutorService.maybeCreateThreadPoolMergeExecutorService( diff --git a/server/src/test/java/org/elasticsearch/index/mapper/MappingParserTests.java b/server/src/test/java/org/elasticsearch/index/mapper/MappingParserTests.java index 4b674cf1985b2..6ab4432c1efd3 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/MappingParserTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/MappingParserTests.java @@ -11,6 +11,7 @@ import org.elasticsearch.TransportVersion; import org.elasticsearch.TransportVersions; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.compress.CompressedXContent; import org.elasticsearch.common.settings.Settings; @@ -39,7 +40,13 @@ private static MappingParser createMappingParser(Settings settings) { } private static MappingParser createMappingParser(Settings settings, IndexVersion version, TransportVersion transportVersion) { - ScriptService scriptService = new ScriptService(settings, Collections.emptyMap(), Collections.emptyMap(), () -> 1L); + ScriptService scriptService = new ScriptService( + settings, + Collections.emptyMap(), + Collections.emptyMap(), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); IndexSettings indexSettings = createIndexSettings(version, settings); IndexAnalyzers indexAnalyzers = createIndexAnalyzers(); SimilarityService similarityService = new SimilarityService(indexSettings, scriptService, Collections.emptyMap()); diff --git a/server/src/test/java/org/elasticsearch/ingest/ConditionalProcessorTests.java b/server/src/test/java/org/elasticsearch/ingest/ConditionalProcessorTests.java index 6f1f57bcd67ee..efcdff2f86469 100644 --- a/server/src/test/java/org/elasticsearch/ingest/ConditionalProcessorTests.java +++ b/server/src/test/java/org/elasticsearch/ingest/ConditionalProcessorTests.java @@ -10,6 +10,7 @@ package org.elasticsearch.ingest; import org.elasticsearch.action.support.PlainActionFuture; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.IngestConditionalScript; import org.elasticsearch.script.MockScriptEngine; @@ -61,7 +62,8 @@ public void testChecksCondition() throws Exception { ) ), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); LongSupplier relativeTimeProvider = mock(LongSupplier.class); when(relativeTimeProvider.getAsLong()).thenReturn(0L, TimeUnit.MILLISECONDS.toNanos(1), 0L, TimeUnit.MILLISECONDS.toNanos(2)); @@ -150,7 +152,8 @@ public void testTypeDeprecation() throws Exception { return true; }), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); LongSupplier relativeTimeProvider = mock(LongSupplier.class); @@ -254,7 +257,8 @@ private static void assertMutatingCtxThrows(Consumer> mutati return false; }), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); Map document = new HashMap<>(); ConditionalProcessor processor = new ConditionalProcessor( diff --git a/server/src/test/java/org/elasticsearch/ingest/IngestServiceTests.java b/server/src/test/java/org/elasticsearch/ingest/IngestServiceTests.java index 829ea86678f4e..a7bdc6a8d70a5 100644 --- a/server/src/test/java/org/elasticsearch/ingest/IngestServiceTests.java +++ b/server/src/test/java/org/elasticsearch/ingest/IngestServiceTests.java @@ -704,7 +704,8 @@ public void testGetProcessorsInPipelineComplexConditional() throws Exception { return true; }), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); Map processors = new HashMap<>(); diff --git a/server/src/test/java/org/elasticsearch/ingest/TrackingResultProcessorTests.java b/server/src/test/java/org/elasticsearch/ingest/TrackingResultProcessorTests.java index c218ceef88f89..c54e51c9ef25a 100644 --- a/server/src/test/java/org/elasticsearch/ingest/TrackingResultProcessorTests.java +++ b/server/src/test/java/org/elasticsearch/ingest/TrackingResultProcessorTests.java @@ -10,6 +10,7 @@ package org.elasticsearch.ingest; import org.elasticsearch.action.ingest.SimulateProcessorResult; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.MockScriptEngine; import org.elasticsearch.script.Script; @@ -157,7 +158,8 @@ public void testActualCompoundProcessorWithOnFailureAndTrueCondition() throws Ex Settings.builder().build(), Map.of(Script.DEFAULT_SCRIPT_LANG, new MockScriptEngine(Script.DEFAULT_SCRIPT_LANG, Map.of(scriptName, ctx -> true), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); RuntimeException exception = new RuntimeException("fail"); TestProcessor failProcessor = new TestProcessor("fail", "test", null, exception); @@ -242,7 +244,8 @@ public void testActualCompoundProcessorWithFalseConditional() throws Exception { new MockScriptEngine(Script.DEFAULT_SCRIPT_LANG, Map.of(scriptName, ctx -> false), Map.of()) ), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); CompoundProcessor compoundProcessor = new CompoundProcessor(new TestProcessor(ingestDocument -> { @@ -364,7 +367,8 @@ public void testActualPipelineProcessorWithTrueConditional() throws Exception { Settings.builder().build(), Map.of(Script.DEFAULT_SCRIPT_LANG, new MockScriptEngine(Script.DEFAULT_SCRIPT_LANG, Map.of(scriptName, ctx -> true), Map.of())), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); Pipeline pipeline1 = new Pipeline(pipelineId1, null, null, null, new CompoundProcessor(new TestProcessor(ingestDocument -> { @@ -457,7 +461,8 @@ public void testActualPipelineProcessorWithFalseConditional() throws Exception { new MockScriptEngine(Script.DEFAULT_SCRIPT_LANG, Map.of(scriptName, ctx -> false), Map.of()) ), new HashMap<>(ScriptModule.CORE_CONTEXTS), - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); Pipeline pipeline1 = new Pipeline(pipelineId1, null, null, null, new CompoundProcessor(new TestProcessor(ingestDocument -> { diff --git a/server/src/test/java/org/elasticsearch/script/DoubleValuesScriptTests.java b/server/src/test/java/org/elasticsearch/script/DoubleValuesScriptTests.java index 802534aab07a6..fe84631b82636 100644 --- a/server/src/test/java/org/elasticsearch/script/DoubleValuesScriptTests.java +++ b/server/src/test/java/org/elasticsearch/script/DoubleValuesScriptTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.script; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.test.ESTestCase; @@ -25,7 +26,13 @@ private ScriptService buildScriptService() { scripts.put(i + "+" + i, p -> null); // only care about compilation, not execution } var scriptEngine = new MockScriptEngine("test", scripts, Collections.emptyMap()); - return new ScriptService(Settings.EMPTY, Map.of("test", scriptEngine), new HashMap<>(ScriptModule.CORE_CONTEXTS), () -> 1L); + return new ScriptService( + Settings.EMPTY, + Map.of("test", scriptEngine), + new HashMap<>(ScriptModule.CORE_CONTEXTS), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testDoubleValuesScriptContextCanBeCompiled() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java b/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java index 4f757ccad5f85..a662878af4ced 100644 --- a/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java +++ b/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.script; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.test.ESTestCase; @@ -61,7 +62,13 @@ private ScriptService getMockScriptService(Settings settings) { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(settings, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + settings, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public interface MiscContext { @@ -87,7 +94,13 @@ public void testOnlyScriptEngineContextsReturned() { Map> mockAndMiscContexts = new HashMap<>(mockContexts); mockAndMiscContexts.put(miscContext, new ScriptContext<>(miscContext, MiscContext.class)); - ScriptService ss = new ScriptService(Settings.EMPTY, engines, mockAndMiscContexts, () -> 1L); + ScriptService ss = new ScriptService( + Settings.EMPTY, + engines, + mockAndMiscContexts, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); ScriptLanguagesInfo info = ss.getScriptLanguages(); assertTrue(info.languageContexts.containsKey(MockScriptEngine.NAME)); @@ -116,7 +129,13 @@ public void testContextsAllowedSettingRespected() { Map> mockAndMiscContexts = new HashMap<>(mockContexts); mockAndMiscContexts.put(miscContext, new ScriptContext<>(miscContext, MiscContext.class)); - ScriptService ss = new ScriptService(settings.build(), engines, mockAndMiscContexts, () -> 1L); + ScriptService ss = new ScriptService( + settings.build(), + engines, + mockAndMiscContexts, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); ScriptLanguagesInfo info = ss.getScriptLanguages(); assertTrue(info.languageContexts.containsKey(MockScriptEngine.NAME)); diff --git a/server/src/test/java/org/elasticsearch/script/ScriptServiceTests.java b/server/src/test/java/org/elasticsearch/script/ScriptServiceTests.java index 09f0e2976a87e..9120273b05bb9 100644 --- a/server/src/test/java/org/elasticsearch/script/ScriptServiceTests.java +++ b/server/src/test/java/org/elasticsearch/script/ScriptServiceTests.java @@ -11,9 +11,12 @@ import org.apache.logging.log4j.Level; import org.elasticsearch.ResourceNotFoundException; import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequest; +import org.elasticsearch.cluster.ClusterChangedEvent; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectId; +import org.elasticsearch.cluster.metadata.ProjectMetadata; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.breaker.CircuitBreakingException; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; @@ -61,6 +64,7 @@ public class ScriptServiceTests extends ESTestCase { private Settings baseSettings; private ClusterSettings clusterSettings; private Map> rateLimitedContexts; + private ProjectId projectId; @Before public void setup() throws IOException { @@ -78,21 +82,14 @@ public void setup() throws IOException { engines.put("test", new MockScriptEngine("test", scripts, Collections.emptyMap())); logger.info("--> setup script service"); rateLimitedContexts = compilationRateLimitedContexts(); + projectId = randomProjectIdOrDefault(); } private void buildScriptService(Settings additionalSettings) throws IOException { Settings finalSettings = Settings.builder().put(baseSettings).put(additionalSettings).build(); - scriptService = new ScriptService(finalSettings, engines, contexts, () -> 1L) { + scriptService = new ScriptService(finalSettings, engines, contexts, () -> 1L, TestProjectResolvers.singleProject(projectId)) { @Override - Map getScriptsFromClusterState() { - Map scripts = new HashMap<>(); - scripts.put("test1", new StoredScriptSource("test", "1+1", Collections.emptyMap())); - scripts.put("test2", new StoredScriptSource("test", "1", Collections.emptyMap())); - return scripts; - } - - @Override - protected StoredScriptSource getScriptFromClusterState(String id) { + protected StoredScriptSource getScriptFromClusterState(ProjectId projectId, String id) { // mock the script that gets retrieved from an index return new StoredScriptSource("test", "1+1", Collections.emptyMap()); } @@ -446,25 +443,26 @@ public void testDeleteScript() throws Exception { public void testGetStoredScript() throws Exception { buildScriptService(Settings.EMPTY); - ClusterState cs = ClusterState.builder(new ClusterName("_name")) - .metadata( - Metadata.builder() - .putCustom( - ScriptMetadata.TYPE, - new ScriptMetadata.Builder(null).storeScript("_id", StoredScriptSource.parse(new BytesArray(""" - {"script": {"lang": "_lang", "source": "abc"} }"""), XContentType.JSON)).build() - ) - ) + ProjectMetadata project = ProjectMetadata.builder(projectId) + .putCustom(ScriptMetadata.TYPE, new ScriptMetadata.Builder(null).storeScript("_id", StoredScriptSource.parse(new BytesArray(""" + {"script": {"lang": "_lang", "source": "abc"} }"""), XContentType.JSON)).build()) .build(); - assertEquals("abc", ScriptService.getStoredScript(cs, new GetStoredScriptRequest(TEST_REQUEST_TIMEOUT, "_id")).getSource()); + assertEquals("abc", ScriptService.getStoredScript(project, new GetStoredScriptRequest(TEST_REQUEST_TIMEOUT, "_id")).getSource()); - cs = ClusterState.builder(new ClusterName("_name")).build(); - assertNull(ScriptService.getStoredScript(cs, new GetStoredScriptRequest(TEST_REQUEST_TIMEOUT, "_id"))); + project = ProjectMetadata.builder(randomProjectIdOrDefault()).build(); + assertNull(ScriptService.getStoredScript(project, new GetStoredScriptRequest(TEST_REQUEST_TIMEOUT, "_id"))); } public void testMaxSizeLimit() throws Exception { buildScriptService(Settings.builder().put(ScriptService.SCRIPT_MAX_SIZE_IN_BYTES.getKey(), 4).build()); + ScriptMetadata.Builder scripts = new ScriptMetadata.Builder(null); + scripts.storeScript("test1", new StoredScriptSource("test", "1+1", Collections.emptyMap())); + scripts.storeScript("test2", new StoredScriptSource("test", "1", Collections.emptyMap())); + final var project = ProjectMetadata.builder(projectId).putCustom(ScriptMetadata.TYPE, scripts.build()).build(); + final var state = ClusterState.builder(ClusterName.DEFAULT).putProjectMetadata(project).build(); + scriptService.applyClusterState(new ClusterChangedEvent("", state, ClusterState.EMPTY_STATE)); + scriptService.compile(new Script(ScriptType.INLINE, "test", "1+1", Collections.emptyMap()), randomFrom(contexts.values())); IllegalArgumentException iae = expectThrows(IllegalArgumentException.class, () -> { scriptService.compile(new Script(ScriptType.INLINE, "test", "10+10", Collections.emptyMap()), randomFrom(contexts.values())); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregatorTests.java index 5aab35bcc3ed8..8b33be8c1f7b5 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregatorTests.java @@ -17,6 +17,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.mapper.MappedFieldType; @@ -369,7 +370,13 @@ protected ScriptService getMockScriptService() { }); final MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, deterministicScripts, emptyMap(), emptyMap()); final Map engines = singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } private static List threshold(String fieldName, long threshold, Map vars) { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java index b24bd9617c38f..2302ecd3d2f66 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java @@ -28,6 +28,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; @@ -136,7 +137,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testNoDocs() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/range/DateRangeAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/range/DateRangeAggregatorTests.java index ae703db22ff7b..dff4f897cfad8 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/range/DateRangeAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/range/DateRangeAggregatorTests.java @@ -22,6 +22,7 @@ import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; @@ -559,6 +560,12 @@ protected ScriptService getMockScriptService() { }); final MockScriptEngine engine = new MockScriptEngine(MockScriptEngine.NAME, scripts, emptyMap()); final Map engines = Map.of(engine.getType(), engine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 0); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 0, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } } diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java index ece24f13be4f3..2c94b814ebff0 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java @@ -37,6 +37,7 @@ import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.NumericUtils; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.network.InetAddresses; @@ -174,7 +175,13 @@ protected ScriptService getMockScriptService() { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @Override diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java index b33015f67926c..dc44a4b8ba136 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java @@ -21,6 +21,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.NumericUtils; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.mapper.MappedFieldType; @@ -118,7 +119,13 @@ protected ScriptService getMockScriptService() { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testNoDocs() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/CardinalityAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/CardinalityAggregatorTests.java index 8169a5301f00f..83f96742714e1 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/CardinalityAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/CardinalityAggregatorTests.java @@ -25,6 +25,7 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.hash.MurmurHash3; import org.elasticsearch.common.network.InetAddresses; @@ -127,7 +128,13 @@ protected ScriptService getMockScriptService() { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @Override diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java index dd45f2b98659c..d3ea2c0f9c9d7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.search.aggregations.metrics; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.Maps; @@ -126,7 +127,13 @@ protected ScriptService mockScriptService() { Collections.emptyMap() ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @Override diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java index 21839e003f410..44756483a66e4 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java @@ -32,6 +32,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.Bits; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.core.Tuple; @@ -145,7 +146,13 @@ protected ScriptService getMockScriptService() { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @Override diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MedianAbsoluteDeviationAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MedianAbsoluteDeviationAggregatorTests.java index a6fdfe9c338fd..c464620128eb2 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MedianAbsoluteDeviationAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MedianAbsoluteDeviationAggregatorTests.java @@ -17,6 +17,7 @@ import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.Query; import org.apache.lucene.tests.index.RandomIndexWriter; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.mapper.MappedFieldType; @@ -325,6 +326,12 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } } diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MinAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MinAggregatorTests.java index efafb648f84ac..1a29d21a324c4 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MinAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MinAggregatorTests.java @@ -33,6 +33,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.core.Tuple; @@ -146,7 +147,13 @@ protected ScriptService getMockScriptService() { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testNoMatchingField() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ScriptedMetricAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ScriptedMetricAggregatorTests.java index 5b4f5241d1b3f..d780ba284c98d 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ScriptedMetricAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ScriptedMetricAggregatorTests.java @@ -16,6 +16,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.breaker.CircuitBreaker; import org.elasticsearch.common.breaker.CircuitBreakingException; import org.elasticsearch.common.breaker.NoopCircuitBreaker; @@ -285,7 +286,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, SCRIPTS, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @SuppressWarnings("unchecked") @@ -441,10 +448,6 @@ public void testScriptParamsPassedThrough() throws IOException { } public void testAggParamsPassedToReduceScript() throws IOException { - MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, SCRIPTS, Collections.emptyMap()); - Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - ScriptService scriptService = new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); - try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { for (int i = 0; i < 100; i++) { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/StatsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/StatsAggregatorTests.java index ddd1fa987ad2b..b06d6e57b340a 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/StatsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/StatsAggregatorTests.java @@ -17,6 +17,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.NumericUtils; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.time.DateFormatter; import org.elasticsearch.core.CheckedConsumer; @@ -471,6 +472,12 @@ protected ScriptService getMockScriptService() { ); final MockScriptEngine engine = new MockScriptEngine(MockScriptEngine.NAME, scripts, emptyMap()); final Map engines = singletonMap(engine.getType(), engine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } } diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/SumAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/SumAggregatorTests.java index 1d405fcd5afb9..dc3394717e857 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/SumAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/SumAggregatorTests.java @@ -22,6 +22,7 @@ import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.NumericUtils; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.TriConsumer; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; @@ -366,7 +367,13 @@ protected ScriptService getMockScriptService() { ); final MockScriptEngine engine = new MockScriptEngine(MockScriptEngine.NAME, scripts, emptyMap()); final Map engines = singletonMap(engine.getType(), engine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } private static MappedFieldType defaultFieldType() { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java index b3daa20189f8c..d048ac1192cc9 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java @@ -23,6 +23,7 @@ import org.apache.lucene.search.Query; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; @@ -97,7 +98,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testGeoField() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java index ba6b9ddabdaf1..25adcfe3b68be 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java @@ -18,6 +18,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.mapper.KeywordFieldMapper; @@ -56,7 +57,13 @@ protected ScriptService getMockScriptService() { ); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testScript() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java b/server/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java index dc1f12d6cf657..2a43046d5f23d 100644 --- a/server/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java +++ b/server/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java @@ -12,6 +12,7 @@ import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.SortField; import org.elasticsearch.cluster.metadata.IndexMetadata; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.env.Environment; @@ -83,7 +84,8 @@ public static void init() { baseSettings, Collections.singletonMap(engine.getType(), engine), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); SearchModule searchModule = new SearchModule(Settings.EMPTY, emptyList()); diff --git a/server/src/test/java/org/elasticsearch/snapshots/SnapshotResiliencyTests.java b/server/src/test/java/org/elasticsearch/snapshots/SnapshotResiliencyTests.java index 156efc5a0d7e6..2fe0071bf53b2 100644 --- a/server/src/test/java/org/elasticsearch/snapshots/SnapshotResiliencyTests.java +++ b/server/src/test/java/org/elasticsearch/snapshots/SnapshotResiliencyTests.java @@ -2427,7 +2427,13 @@ public RecyclerBytesStreamOutput newNetworkBytesStream() { ); nodeEnv = new NodeEnvironment(settings, environment); final NamedXContentRegistry namedXContentRegistry = new NamedXContentRegistry(Collections.emptyList()); - final ScriptService scriptService = new ScriptService(settings, emptyMap(), emptyMap(), () -> 1L); + final ScriptService scriptService = new ScriptService( + settings, + emptyMap(), + emptyMap(), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); final SetOnce rerouteServiceSetOnce = new SetOnce<>(); final SnapshotsInfoService snapshotsInfoService = new InternalSnapshotsInfoService( diff --git a/test/framework/src/main/java/org/elasticsearch/index/mapper/TestScriptEngine.java b/test/framework/src/main/java/org/elasticsearch/index/mapper/TestScriptEngine.java index 378ef33627784..c254fd66dba3e 100644 --- a/test/framework/src/main/java/org/elasticsearch/index/mapper/TestScriptEngine.java +++ b/test/framework/src/main/java/org/elasticsearch/index/mapper/TestScriptEngine.java @@ -9,10 +9,12 @@ package org.elasticsearch.index.mapper; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; import org.elasticsearch.script.ScriptService; +import org.elasticsearch.test.ESTestCase; import java.util.Map; import java.util.Set; @@ -29,7 +31,7 @@ protected Object buildScriptFactory(ScriptContext context) { public Set> getSupportedContexts() { return Set.of(context); } - }), Map.of(context.name, context), () -> 1L); + }), Map.of(context.name, context), () -> 1L, TestProjectResolvers.singleProject(ESTestCase.randomProjectIdOrDefault())); } @Override diff --git a/test/framework/src/main/java/org/elasticsearch/ingest/TestTemplateService.java b/test/framework/src/main/java/org/elasticsearch/ingest/TestTemplateService.java index c5bfd2a39eddd..09eb6edac1a53 100644 --- a/test/framework/src/main/java/org/elasticsearch/ingest/TestTemplateService.java +++ b/test/framework/src/main/java/org/elasticsearch/ingest/TestTemplateService.java @@ -9,6 +9,7 @@ package org.elasticsearch.ingest; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.MockScriptEngine; import org.elasticsearch.script.Script; @@ -33,7 +34,13 @@ public static ScriptService instance(boolean compilationException) { } private TestTemplateService(boolean compilationException) { - super(Settings.EMPTY, Collections.singletonMap(DEFAULT_TEMPLATE_LANG, new MockScriptEngine()), Collections.emptyMap(), () -> 1L); + super( + Settings.EMPTY, + Collections.singletonMap(DEFAULT_TEMPLATE_LANG, new MockScriptEngine()), + Collections.emptyMap(), + () -> 1L, + TestProjectResolvers.alwaysThrow() + ); this.compilationException = compilationException; } diff --git a/test/framework/src/main/java/org/elasticsearch/node/MockNode.java b/test/framework/src/main/java/org/elasticsearch/node/MockNode.java index be21a1c8ab694..c40af1e0b3d9d 100644 --- a/test/framework/src/main/java/org/elasticsearch/node/MockNode.java +++ b/test/framework/src/main/java/org/elasticsearch/node/MockNode.java @@ -14,6 +14,7 @@ import org.elasticsearch.cluster.ClusterInfoService; import org.elasticsearch.cluster.MockInternalClusterInfoService; import org.elasticsearch.cluster.node.DiscoveryNode; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.network.NetworkModule; @@ -143,10 +144,11 @@ ScriptService newScriptService( Settings settings, Map engines, Map> contexts, - LongSupplier timeProvider + LongSupplier timeProvider, + ProjectResolver projectResolver ) { if (pluginsService.filterPlugins(MockScriptService.TestPlugin.class).findAny().isEmpty()) { - return super.newScriptService(pluginsService, settings, engines, contexts, timeProvider); + return super.newScriptService(pluginsService, settings, engines, contexts, timeProvider, projectResolver); } return new MockScriptService(settings, engines, contexts); } diff --git a/test/framework/src/main/java/org/elasticsearch/script/MockScriptService.java b/test/framework/src/main/java/org/elasticsearch/script/MockScriptService.java index 1207b6fb40985..8b4d8f154459d 100644 --- a/test/framework/src/main/java/org/elasticsearch/script/MockScriptService.java +++ b/test/framework/src/main/java/org/elasticsearch/script/MockScriptService.java @@ -9,6 +9,8 @@ package org.elasticsearch.script; +import org.elasticsearch.cluster.metadata.ProjectId; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.MockNode; import org.elasticsearch.plugins.Plugin; @@ -24,7 +26,8 @@ public class MockScriptService extends ScriptService { public static class TestPlugin extends Plugin {} public MockScriptService(Settings settings, Map engines, Map> contexts) { - super(settings, engines, contexts, () -> 1L); + // Since this script service is used in mock nodes for internal cluster tests, we need to always resolve the default project ID. + super(settings, engines, contexts, () -> 1L, TestProjectResolvers.DEFAULT_PROJECT_ONLY); } @Override @@ -60,7 +63,7 @@ public Set> getSupportedContexts() { }; return new MockScriptService(Settings.EMPTY, Map.of("lang", engine), Map.of(context.name, context)) { @Override - protected StoredScriptSource getScriptFromClusterState(String id) { + protected StoredScriptSource getScriptFromClusterState(ProjectId projectId, String id) { return storedLookup.get(id); } }; diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/boxplot/BoxplotAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/boxplot/BoxplotAggregatorTests.java index 297dbf5233922..55896fa6e3e9d 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/boxplot/BoxplotAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/boxplot/BoxplotAggregatorTests.java @@ -15,6 +15,7 @@ import org.apache.lucene.search.Query; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.mapper.KeywordFieldMapper; @@ -79,7 +80,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testNoMatchingField() throws IOException { diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/MultiTermsAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/MultiTermsAggregatorTests.java index 8ed213bf2ab98..e67b21ada67cf 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/MultiTermsAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/MultiTermsAggregatorTests.java @@ -21,6 +21,7 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.time.DateFormatter; import org.elasticsearch.core.CheckedConsumer; @@ -112,7 +113,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testIntegersFloatsAndStrings() throws IOException { diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/rate/RateAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/rate/RateAggregatorTests.java index 548069b83b4f8..1e47eb141e4cc 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/rate/RateAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/rate/RateAggregatorTests.java @@ -21,6 +21,7 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.fielddata.ScriptDocValues; @@ -107,7 +108,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testNoMatchingField() throws IOException { diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java index 04f0563e433a2..b979544ac0d6a 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java @@ -16,6 +16,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.index.mapper.IpFieldMapper; @@ -415,6 +416,12 @@ protected ScriptService getMockScriptService() { ); final MockScriptEngine engine = new MockScriptEngine(MockScriptEngine.NAME, scripts, emptyMap()); final Map engines = singletonMap(engine.getType(), engine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } } diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/topmetrics/TopMetricsAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/topmetrics/TopMetricsAggregatorTests.java index 96a373fc2e155..b1311736bf976 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/topmetrics/TopMetricsAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/topmetrics/TopMetricsAggregatorTests.java @@ -25,6 +25,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.util.NumericUtils; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.breaker.CircuitBreaker; import org.elasticsearch.common.breaker.CircuitBreakingException; import org.elasticsearch.common.settings.Settings; @@ -624,7 +625,13 @@ protected ScriptService getMockScriptService() { return field.getValue(); }), emptyMap()); Map engines = singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } @Override diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregatorTests.java index dcee4d4b05c21..14898647c8e4b 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregatorTests.java @@ -13,6 +13,7 @@ import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.Query; import org.apache.lucene.tests.index.RandomIndexWriter; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.time.DateUtils; import org.elasticsearch.core.CheckedConsumer; @@ -137,7 +138,13 @@ protected ScriptService getMockScriptService() { MockScriptEngine scriptEngine = new MockScriptEngine(MockScriptEngine.NAME, scripts, Collections.emptyMap()); Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } public void testNoMatchingField() throws IOException { diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authc/support/mapper/TemplateRoleNameTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authc/support/mapper/TemplateRoleNameTests.java index a23a9c1e9c8b0..492d1e9366d55 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authc/support/mapper/TemplateRoleNameTests.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authc/support/mapper/TemplateRoleNameTests.java @@ -10,7 +10,9 @@ import org.elasticsearch.cluster.ClusterChangedEvent; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.cluster.metadata.ProjectMetadata; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; @@ -92,7 +94,8 @@ public void testEvaluateRoles() throws Exception { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final ExpressionModel model = new ExpressionModel(); model.defineField("username", "hulk"); @@ -148,7 +151,8 @@ public void testValidate() { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final TemplateRoleName plainString = new TemplateRoleName(new BytesArray(""" @@ -176,7 +180,8 @@ public void testValidateWillPassWithEmptyContext() { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final BytesReference template = new BytesArray(""" @@ -207,7 +212,8 @@ public void testValidateWillFailForSyntaxError() { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final BytesReference template = new BytesArray(""" @@ -242,10 +248,11 @@ public void testValidateWillCompileButNotExecutePainlessScript() { Settings.EMPTY, Map.of("painless", scriptEngine), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ) { @Override - protected StoredScriptSource getScriptFromClusterState(String id) { + protected StoredScriptSource getScriptFromClusterState(ProjectId projectId, String id) { if ("valid".equals(id)) { return new StoredScriptSource("painless", "params.metedata.group", Map.of()); } else { @@ -271,7 +278,8 @@ public void testValidationWillFailWhenInlineScriptIsNotEnabled() { settings, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final BytesReference inlineScript = new BytesArray(""" { "source":"" }"""); @@ -288,7 +296,8 @@ public void testValidateWillFailWhenStoredScriptIsNotEnabled() { settings, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final ClusterChangedEvent clusterChangedEvent = mock(ClusterChangedEvent.class); final ClusterState clusterState = mock(ClusterState.class); @@ -299,7 +308,7 @@ public void testValidateWillFailWhenStoredScriptIsNotEnabled() { when(clusterChangedEvent.state()).thenReturn(clusterState); when(clusterState.metadata()).thenReturn(metadata); when(project.custom(ScriptMetadata.TYPE)).thenReturn(scriptMetadata); - when(metadata.getProject()).thenReturn(project); + when(metadata.getProject(any())).thenReturn(project); when(storedScriptSource.getLang()).thenReturn("mustache"); when(storedScriptSource.getSource()).thenReturn(""); when(storedScriptSource.getOptions()).thenReturn(Collections.emptyMap()); @@ -319,7 +328,8 @@ public void testValidateWillFailWhenStoredScriptIsNotFound() { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final ClusterChangedEvent clusterChangedEvent = mock(ClusterChangedEvent.class); final ClusterState clusterState = mock(ClusterState.class); @@ -329,7 +339,7 @@ public void testValidateWillFailWhenStoredScriptIsNotFound() { when(clusterChangedEvent.state()).thenReturn(clusterState); when(clusterState.metadata()).thenReturn(metadata); when(project.custom(ScriptMetadata.TYPE)).thenReturn(scriptMetadata); - when(metadata.getProject()).thenReturn(project); + when(metadata.getProject(any())).thenReturn(project); scriptService.applyClusterState(clusterChangedEvent); final BytesReference storedScript = new BytesArray(""" diff --git a/x-pack/plugin/identity-provider/src/test/java/org/elasticsearch/xpack/idp/saml/sp/WildcardServiceProviderResolverTests.java b/x-pack/plugin/identity-provider/src/test/java/org/elasticsearch/xpack/idp/saml/sp/WildcardServiceProviderResolverTests.java index 3dfee84bbdedf..54c3905f225eb 100644 --- a/x-pack/plugin/identity-provider/src/test/java/org/elasticsearch/xpack/idp/saml/sp/WildcardServiceProviderResolverTests.java +++ b/x-pack/plugin/identity-provider/src/test/java/org/elasticsearch/xpack/idp/saml/sp/WildcardServiceProviderResolverTests.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.idp.saml.sp; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.ScriptModule; import org.elasticsearch.script.ScriptService; @@ -99,7 +100,8 @@ public void setUpResolver() { settings, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); final ServiceProviderDefaults samlDefaults = new ServiceProviderDefaults("elastic-cloud", NameID.TRANSIENT, Duration.ofMinutes(15)); resolver = new WildcardServiceProviderResolver(settings, scriptService, new SamlServiceProviderFactory(samlDefaults)); diff --git a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/inference/ltr/LearningToRankServiceTests.java b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/inference/ltr/LearningToRankServiceTests.java index e374517f6e82c..3530adbd5a751 100644 --- a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/inference/ltr/LearningToRankServiceTests.java +++ b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/inference/ltr/LearningToRankServiceTests.java @@ -10,6 +10,7 @@ import org.elasticsearch.ElasticsearchStatusException; import org.elasticsearch.ResourceNotFoundException; import org.elasticsearch.action.ActionListener; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.index.query.MatchNoneQueryBuilder; @@ -247,6 +248,12 @@ private LearningToRankService getTestLearningToRankService(TrainedModelProvider private ScriptService getTestScriptService() { ScriptEngine scriptEngine = new MustacheScriptEngine(Settings.EMPTY); - return new ScriptService(Settings.EMPTY, Map.of(DEFAULT_TEMPLATE_LANG, scriptEngine), ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + Map.of(DEFAULT_TEMPLATE_LANG, scriptEngine), + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } } diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/ActiveDirectoryRealmTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/ActiveDirectoryRealmTests.java index f6c98a467205e..3325facdc603d 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/ActiveDirectoryRealmTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/ActiveDirectoryRealmTests.java @@ -18,6 +18,7 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.client.internal.Client; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.settings.MockSecureSettings; @@ -439,7 +440,8 @@ public void testRealmWithTemplatedRoleMapping() throws Exception { settings, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); NativeRoleMappingStore roleMapper = new NativeRoleMappingStore(settings, mockClient, mockSecurityIndex, scriptService) { @Override diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/LdapRealmTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/LdapRealmTests.java index ed6066509ca3f..be5170848afb0 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/LdapRealmTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/ldap/LdapRealmTests.java @@ -11,6 +11,7 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.client.internal.Client; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.settings.MockSecureSettings; import org.elasticsearch.common.settings.SecureSettings; @@ -536,7 +537,8 @@ public void testLdapRealmWithTemplatedRoleMapping() throws Exception { defaultGlobalSettings, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); NativeRoleMappingStore roleMapper = new NativeRoleMappingStore( defaultGlobalSettings, diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/NativeRoleMappingStoreTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/NativeRoleMappingStoreTests.java index d9c19b570e8e4..5281e0efdbae7 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/NativeRoleMappingStoreTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/NativeRoleMappingStoreTests.java @@ -17,6 +17,7 @@ import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.settings.Settings; @@ -91,7 +92,8 @@ public void setup() { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); securityIndex = mockHealthySecurityIndex(); } diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/ProjectStateRoleMapperTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/ProjectStateRoleMapperTests.java index a498d1e0027ce..0365a770b24c0 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/ProjectStateRoleMapperTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authc/support/mapper/ProjectStateRoleMapperTests.java @@ -57,7 +57,8 @@ public void setup() { Settings.EMPTY, Collections.singletonMap(MustacheScriptEngine.NAME, new MustacheScriptEngine(Settings.EMPTY)), ScriptModule.CORE_CONTEXTS, - () -> 1L + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) ); clusterService = mock(ClusterService.class); disabledSettings = Settings.builder().put("xpack.security.authc.cluster_state_role_mappings.enabled", false).build(); diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/condition/ScriptConditionTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/condition/ScriptConditionTests.java index fa0dc89fd5106..22c9ea6611c75 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/condition/ScriptConditionTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/condition/ScriptConditionTests.java @@ -12,7 +12,7 @@ import org.elasticsearch.cluster.ClusterChangedEvent; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.script.GeneralScriptException; @@ -85,11 +85,12 @@ public void init() throws IOException { return total > threshold; }); - scriptService = WatcherMockScriptPlugin.newMockScriptService(scripts); + final var projectId = randomUniqueProjectId(); + ClusterState cs = new ClusterState.Builder(ClusterName.DEFAULT).putProjectMetadata( + ProjectMetadata.builder(projectId).putCustom(ScriptMetadata.TYPE, new ScriptMetadata.Builder(null).build()) + ).build(); - ClusterState.Builder clusterState = new ClusterState.Builder(new ClusterName("_name")); - clusterState.metadata(Metadata.builder().putCustom(ScriptMetadata.TYPE, new ScriptMetadata.Builder(null).build())); - ClusterState cs = clusterState.build(); + scriptService = WatcherMockScriptPlugin.newMockScriptService(scripts, projectId); scriptService.applyClusterState(new ClusterChangedEvent("_source", cs, cs)); } diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/input/transform/TransformInputTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/input/transform/TransformInputTests.java index 248f5d0ef4783..bd4ab562c0477 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/input/transform/TransformInputTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/input/transform/TransformInputTests.java @@ -44,7 +44,7 @@ public class TransformInputTests extends ESTestCase { @Before public void setupScriptService() { - scriptService = WatcherMockScriptPlugin.newMockScriptService(Collections.singletonMap("1", s -> "2")); + scriptService = WatcherMockScriptPlugin.newMockScriptService(Collections.singletonMap("1", s -> "2"), randomProjectIdOrDefault()); } public void testExecute() { diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/support/WatcherTemplateTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/support/WatcherTemplateTests.java index 3018afbe97338..6e7abecbe6d73 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/support/WatcherTemplateTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/support/WatcherTemplateTests.java @@ -6,6 +6,7 @@ */ package org.elasticsearch.xpack.watcher.support; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.Nullable; import org.elasticsearch.script.ScriptContext; @@ -43,7 +44,13 @@ public void init() throws Exception { Watcher.SCRIPT_TEMPLATE_CONTEXT.name, Watcher.SCRIPT_TEMPLATE_CONTEXT ); - ScriptService scriptService = new ScriptService(Settings.EMPTY, engines, contexts, () -> 1L); + ScriptService scriptService = new ScriptService( + Settings.EMPTY, + engines, + contexts, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); textTemplateEngine = new TextTemplateEngine(scriptService); } diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/WatcherMockScriptPlugin.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/WatcherMockScriptPlugin.java index f69b28a40ff5d..d9751c7a83a06 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/WatcherMockScriptPlugin.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/WatcherMockScriptPlugin.java @@ -6,6 +6,8 @@ */ package org.elasticsearch.xpack.watcher.test; +import org.elasticsearch.cluster.metadata.ProjectId; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.MockScriptEngine; import org.elasticsearch.script.MockScriptPlugin; @@ -70,10 +72,10 @@ protected Map, MockScriptEngine.ContextCompiler> pluginContextC return CONTEXT_COMPILERS; } - public static ScriptService newMockScriptService(Map, Object>> scripts) { + public static ScriptService newMockScriptService(Map, Object>> scripts, ProjectId projectId) { Map engines = new HashMap<>(); engines.put(MockScriptEngine.NAME, new MockScriptEngine(MockScriptEngine.NAME, scripts, CONTEXT_COMPILERS)); Map> contexts = CONTEXTS.stream().collect(Collectors.toMap(o -> o.name, Function.identity())); - return new ScriptService(Settings.EMPTY, engines, contexts, () -> 1L); + return new ScriptService(Settings.EMPTY, engines, contexts, () -> 1L, TestProjectResolvers.singleProject(projectId)); } } diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchInputTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchInputTests.java index 2097edd763352..fd18a11b68c70 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchInputTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchInputTests.java @@ -12,6 +12,7 @@ import org.elasticsearch.action.search.ShardSearchFailure; import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.client.internal.Client; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.settings.Settings; @@ -78,7 +79,13 @@ public void setup() { Map> contexts = new HashMap<>(); contexts.put(Watcher.SCRIPT_TEMPLATE_CONTEXT.name, Watcher.SCRIPT_TEMPLATE_CONTEXT); contexts.put(WatcherTransformScript.CONTEXT.name, WatcherTransformScript.CONTEXT); - scriptService = new ScriptService(Settings.EMPTY, engines, contexts, () -> 1L); + scriptService = new ScriptService( + Settings.EMPTY, + engines, + contexts, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); ThreadPool threadPool = mock(ThreadPool.class); ThreadContext threadContext = new ThreadContext(Settings.EMPTY); diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchTransformTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchTransformTests.java index 9eabdad115f8a..bef54e70f5a88 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchTransformTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/test/integration/SearchTransformTests.java @@ -8,6 +8,7 @@ import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.internal.Client; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.TimeValue; import org.elasticsearch.script.MockScriptEngine; @@ -68,7 +69,13 @@ public void testParser() throws Exception { final MockScriptEngine engine = new MockScriptEngine("mock", Collections.emptyMap(), Collections.emptyMap()); Map engines = Collections.singletonMap(engine.getType(), engine); - ScriptService scriptService = new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + ScriptService scriptService = new ScriptService( + Settings.EMPTY, + engines, + ScriptModule.CORE_CONTEXTS, + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); Client client = mock(Client.class); SearchTransformFactory transformFactory = new SearchTransformFactory( diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/transform/script/ScriptTransformTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/transform/script/ScriptTransformTests.java index c0772c73ede15..c8791d639779c 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/transform/script/ScriptTransformTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/transform/script/ScriptTransformTests.java @@ -6,6 +6,7 @@ */ package org.elasticsearch.xpack.watcher.transform.script; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptContext; @@ -203,6 +204,12 @@ public static ScriptService createScriptService() throws Exception { Map> contexts = new HashMap<>(ScriptModule.CORE_CONTEXTS); contexts.put(WatcherTransformScript.CONTEXT.name, WatcherTransformScript.CONTEXT); contexts.put(Watcher.SCRIPT_TEMPLATE_CONTEXT.name, Watcher.SCRIPT_TEMPLATE_CONTEXT); - return new ScriptService(settings, Collections.emptyMap(), Collections.emptyMap(), () -> 1L); + return new ScriptService( + settings, + Collections.emptyMap(), + Collections.emptyMap(), + () -> 1L, + TestProjectResolvers.singleProject(randomProjectIdOrDefault()) + ); } }