This is an automated email from the ASF dual-hosted git repository.

wenjin272 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-agents.git


The following commit(s) were added to refs/heads/main by this push:
     new 618777288 [hotfix][api][java] Move ResourceContext lookup factory to 
test utilities (#1349)
618777288 is described below

commit 618777288baecc4519f8410c98be332b0c4499d1
Author: Wenjin Xie <[email protected]>
AuthorDate: Mon Nov 2 14:33:40 2026 +0800

    [hotfix][api][java] Move ResourceContext lookup factory to test utilities 
(#1349)
    
    Generated-by: Codex CLI 0.153.4 (GPT-6)
    
    Co-authored-by: Codex <[email protected]>
---
 .../flink/agents/api/resource/ResourceContext.java | 29 --------------
 .../agents/api/resource/TestResourceContexts.java} | 46 +++-------------------
 .../pom.xml                                        |  9 ++++-
 .../test/VectorStoreIntegrationTest.java           |  4 +-
 .../AnthropicChatModelConnectionTest.java          |  4 +-
 .../anthropic/AnthropicChatModelSetupTest.java     |  4 +-
 .../anthropic/AnthropicMultimodalTest.java         |  4 +-
 .../bedrock/BedrockChatModelConnectionTest.java    |  4 +-
 .../bedrock/BedrockChatModelSetupTest.java         |  4 +-
 .../gemini/GeminiChatModelConnectionTest.java      |  4 +-
 .../gemini/GeminiChatModelSetupTest.java           |  4 +-
 .../chatmodels/gemini/GeminiMultimodalTest.java    |  4 +-
 .../ollama/OllamaChatModelConnectionTest.java      |  4 +-
 .../ollama/OllamaChatModelSetupTest.java           |  4 +-
 .../ollama/OllamaMultimodalLiveTest.java           |  4 +-
 .../chatmodels/ollama/OllamaMultimodalTest.java    |  6 +--
 .../openai/AzureOpenAIChatModelConnectionTest.java |  4 +-
 .../openai/AzureOpenAIChatModelSetupTest.java      |  4 +-
 .../OpenAIChatCompletionsMultimodalLiveTest.java   |  5 ++-
 .../openai/OpenAICompletionsConnectionTest.java    |  4 +-
 .../openai/OpenAICompletionsSetupTest.java         |  4 +-
 .../openai/OpenAIModelAttributionTest.java         |  3 +-
 .../openai/OpenAIResponsesModelConnectionTest.java |  4 +-
 .../openai/OpenAIResponsesModelSetupTest.java      |  4 +-
 .../openai/OpenAIResponsesMultimodalTest.java      |  4 +-
 .../openai/VLLMChatModelConnectionTest.java        |  4 +-
 .../chatmodels/openai/VLLMChatModelSetupTest.java  |  4 +-
 .../watsonx/WatsonxChatModelConnectionTest.java    |  4 +-
 .../watsonx/WatsonxChatModelLiveTest.java          |  4 +-
 .../watsonx/WatsonxChatModelSetupTest.java         |  4 +-
 .../bedrock/BedrockEmbeddingModelTest.java         |  4 +-
 .../ollama/OllamaEmbeddingModelConnectionTest.java |  4 +-
 .../openai/OpenAIEmbeddingModelTest.java           |  4 +-
 .../agents/integrations/mcp/MCPServerTest.java     |  4 +-
 integrations/pom.xml                               | 11 ++++++
 ...ElasticsearchVectorStoreKNumCandidatesTest.java |  4 +-
 .../ElasticsearchVectorStoreTest.java              |  8 ++--
 .../vectorstores/milvus/MilvusVectorStoreTest.java |  9 +++--
 .../opensearch/OpenSearchVectorStoreTest.java      |  7 +++-
 .../pgvector/PgVectorVectorStoreTest.java          |  8 ++--
 .../s3vectors/S3VectorsVectorStoreTest.java        |  7 +++-
 .../agents/plan/AgentPlanDeclareChatModelTest.java |  7 ++--
 .../plan/AgentPlanDeclareDecisionModelTest.java    |  3 +-
 .../agents/plan/AgentPlanDeclareMCPServerTest.java |  4 +-
 .../agents/plan/AgentPlanDeclareSkillsTest.java    |  5 +--
 .../agents/plan/AgentPlanDeclareToolFieldTest.java |  4 +-
 .../plan/AgentPlanDeclareToolMethodTest.java       | 18 ++++-----
 .../flink/agents/plan/FunctionToolPlanTest.java    |  6 +--
 .../plan/actions/DecisionModelActionTest.java      |  4 +-
 .../serializer/AgentPlanJsonDeserializerTest.java  |  5 ++-
 .../flink/agents/plan/tools/bash/BashToolTest.java |  4 +-
 51 files changed, 170 insertions(+), 154 deletions(-)

diff --git 
a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java 
b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java
index 6e2ad8242..5b3b300d9 100644
--- 
a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java
+++ 
b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java
@@ -22,7 +22,6 @@ import org.apache.flink.agents.api.skills.SkillSourceSpec;
 
 import java.util.Collections;
 import java.util.List;
-import java.util.function.BiFunction;
 
 /**
  * Capabilities available to a {@link Resource} during execution.
@@ -62,32 +61,4 @@ public interface ResourceContext {
             throws Exception {
         return Collections.emptyList();
     }
-
-    /**
-     * Create a {@link ResourceContext} backed by the given resource lookup 
function. The skill
-     * methods return empty defaults — convenient for tests or for runtimes 
without skills support.
-     */
-    static ResourceContext fromGetResource(BiFunction<String, ResourceType, 
Resource> getResource) {
-        return new ResourceContext() {
-            @Override
-            public Resource getResource(String name, ResourceType type) {
-                return getResource.apply(name, type);
-            }
-
-            @Override
-            public String generateAvailableSkillsPrompt(List<String> 
skillNames) {
-                return "";
-            }
-
-            @Override
-            public List<String> getSkillDirs(List<String> skillNames) {
-                return Collections.emptyList();
-            }
-
-            @Override
-            public List<String> 
resolveSkillNamesForSources(List<SkillSourceSpec> sources) {
-                return Collections.emptyList();
-            }
-        };
-    }
 }
diff --git 
a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java 
b/api/src/test/java/org/apache/flink/agents/api/resource/TestResourceContexts.java
similarity index 51%
copy from 
api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java
copy to 
api/src/test/java/org/apache/flink/agents/api/resource/TestResourceContexts.java
index 6e2ad8242..637eed559 100644
--- 
a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceContext.java
+++ 
b/api/src/test/java/org/apache/flink/agents/api/resource/TestResourceContexts.java
@@ -24,50 +24,16 @@ import java.util.Collections;
 import java.util.List;
 import java.util.function.BiFunction;
 
-/**
- * Capabilities available to a {@link Resource} during execution.
- *
- * <p>Mirrors the Python {@code 
flink_agents.api.resource_context.ResourceContext}.
- */
-public interface ResourceContext {
-
-    /** Get another resource declared in the same Agent. */
-    Resource getResource(String name, ResourceType type) throws Exception;
-
-    /**
-     * Generate the available skills prompt for the given skill names.
-     *
-     * <p>Returns an empty string if no skills are configured.
-     */
-    String generateAvailableSkillsPrompt(List<String> skillNames) throws 
Exception;
-
-    /**
-     * Return absolute directory paths for the given skill names.
-     *
-     * <p>Returns an empty list if no skills are configured or none of the 
requested skills are
-     * filesystem-backed.
-     */
-    List<String> getSkillDirs(List<String> skillNames) throws Exception;
-
-    /**
-     * Resolve skill names from the given source specifications.
-     *
-     * <p>At plan time, a descriptor may record a set of {@link 
SkillSourceSpec} entries as a marker
-     * meaning "all skills from these sources." At runtime, this method 
resolves the marker into
-     * actual skill names by looking up the sources in the agent's {@code 
SkillManager}.
-     *
-     * <p>Returns an empty list if no skills are configured or the sources are 
not loaded.
-     */
-    default List<String> resolveSkillNamesForSources(List<SkillSourceSpec> 
sources)
-            throws Exception {
-        return Collections.emptyList();
-    }
+/** Resource context factories for tests that only need resource lookup. */
+public final class TestResourceContexts {
+    private TestResourceContexts() {}
 
     /**
      * Create a {@link ResourceContext} backed by the given resource lookup 
function. The skill
-     * methods return empty defaults — convenient for tests or for runtimes 
without skills support.
+     * methods return empty defaults.
      */
-    static ResourceContext fromGetResource(BiFunction<String, ResourceType, 
Resource> getResource) {
+    public static ResourceContext fromGetResource(
+            BiFunction<String, ResourceType, Resource> getResource) {
         return new ResourceContext() {
             @Override
             public Resource getResource(String name, ResourceType type) {
diff --git a/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml 
b/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml
index 54ff65760..070e9ab6b 100644
--- a/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml
+++ b/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml
@@ -40,6 +40,13 @@ under the License.
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-agents-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.flink</groupId>
             <artifactId>${flink.agents.dist.artifactId}</artifactId>
@@ -245,4 +252,4 @@ under the License.
         </profile>
     </profiles>
 
-</project>
\ No newline at end of file
+</project>
diff --git 
a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/VectorStoreIntegrationTest.java
 
b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/VectorStoreIntegrationTest.java
index 444e2bb39..fdf8ee35d 100644
--- 
a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/VectorStoreIntegrationTest.java
+++ 
b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/VectorStoreIntegrationTest.java
@@ -19,7 +19,7 @@
 package org.apache.flink.agents.integration.test;
 
 import org.apache.flink.agents.api.AgentsExecutionEnvironment;
-import org.apache.flink.agents.api.resource.ResourceContext;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.vectorstores.Document;
 import 
org.apache.flink.agents.integrations.vectorstores.pgvector.PgVectorVectorStore;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -129,7 +129,7 @@ public class VectorStoreIntegrationTest {
             store =
                     new PgVectorVectorStore(
                             VectorStoreIntegrationAgent.vectorStore(),
-                            ResourceContext.fromGetResource((name, type) -> 
null));
+                            TestResourceContexts.fromGetResource((name, type) 
-> null));
             store.createCollectionIfNotExists(table, Map.of());
             store.addEmbedding(
                     pgVectorSeed(Integer.parseInt(envOr("PGVECTOR_DIMS", 
"768"))), table, Map.of());
diff --git 
a/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelConnectionTest.java
 
b/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelConnectionTest.java
index 46d10c63a..7f348c38b 100644
--- 
a/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelConnectionTest.java
+++ 
b/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelConnectionTest.java
@@ -42,6 +42,7 @@ import 
org.apache.flink.agents.api.chat.messages.ReasoningBlock;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -78,7 +79,8 @@ import static 
org.assertj.core.api.InstanceOfAssertFactories.STRING;
  */
 class AnthropicChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
diff --git 
a/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelSetupTest.java
 
b/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelSetupTest.java
index 081837100..5b86d368c 100644
--- 
a/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelSetupTest.java
+++ 
b/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicChatModelSetupTest.java
@@ -20,6 +20,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.anthropic;
 
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -33,7 +34,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link AnthropicChatModelSetup}. */
 class AnthropicChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder base() {
         return 
ResourceDescriptor.Builder.newBuilder(AnthropicChatModelSetup.class.getName())
diff --git 
a/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicMultimodalTest.java
 
b/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicMultimodalTest.java
index 6a20d0ba3..897146482 100644
--- 
a/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicMultimodalTest.java
+++ 
b/integrations/chat-models/anthropic/src/test/java/org/apache/flink/agents/integrations/chatmodels/anthropic/AnthropicMultimodalTest.java
@@ -32,8 +32,8 @@ import 
org.apache.flink.agents.api.chat.messages.ToolCallBlock;
 import org.apache.flink.agents.api.chat.messages.ToolResultBlock;
 import 
org.apache.flink.agents.api.chat.messages.UnsupportedContentBlockException;
 import org.apache.flink.agents.api.chat.messages.VideoBlock;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -67,7 +67,7 @@ class AnthropicMultimodalTest {
                         .addInitialArgument("model", 
"claude-sonnet-4-20250514")
                         .build();
         return new AnthropicChatModelConnection(
-                descriptor, ResourceContext.fromGetResource((a, b) -> null));
+                descriptor, TestResourceContexts.fromGetResource((a, b) -> 
null));
     }
 
     private static Map<String, Object> params() {
diff --git 
a/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelConnectionTest.java
 
b/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelConnectionTest.java
index cd457fce7..528323f87 100644
--- 
a/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelConnectionTest.java
+++ 
b/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelConnectionTest.java
@@ -32,6 +32,7 @@ import 
org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -69,7 +70,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 /** Tests for {@link BedrockChatModelConnection}. */
 class BedrockChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor descriptor(String region, String model) {
         ResourceDescriptor.Builder b =
diff --git 
a/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelSetupTest.java
 
b/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelSetupTest.java
index d7153588b..e8e100e6f 100644
--- 
a/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelSetupTest.java
+++ 
b/integrations/chat-models/bedrock/src/test/java/org/apache/flink/agents/integrations/chatmodels/bedrock/BedrockChatModelSetupTest.java
@@ -21,6 +21,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.bedrock;
 import org.apache.flink.agents.api.chat.model.BaseChatModelSetup;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -34,7 +35,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link BedrockChatModelSetup}. */
 class BedrockChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     @DisplayName("getParameters includes model and default temperature")
diff --git 
a/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelConnectionTest.java
 
b/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelConnectionTest.java
index 21f439ae6..893bbb35a 100644
--- 
a/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelConnectionTest.java
+++ 
b/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelConnectionTest.java
@@ -39,6 +39,7 @@ import 
org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -71,7 +72,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
  */
 class GeminiChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     /** A model Google documents native structured-output support for. */
     private static final String CAPABLE_MODEL = "gemini-2.5-flash";
diff --git 
a/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelSetupTest.java
 
b/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelSetupTest.java
index bc2f0de97..5c00185ab 100644
--- 
a/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelSetupTest.java
+++ 
b/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiChatModelSetupTest.java
@@ -21,6 +21,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.gemini;
 import org.apache.flink.agents.api.chat.model.BaseChatModelSetup;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -34,7 +35,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link GeminiChatModelSetup}. */
 class GeminiChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder base() {
         return 
ResourceDescriptor.Builder.newBuilder(GeminiChatModelSetup.class.getName())
diff --git 
a/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiMultimodalTest.java
 
b/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiMultimodalTest.java
index 8ed6e7e7f..fd6227a0c 100644
--- 
a/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiMultimodalTest.java
+++ 
b/integrations/chat-models/gemini/src/test/java/org/apache/flink/agents/integrations/chatmodels/gemini/GeminiMultimodalTest.java
@@ -30,8 +30,8 @@ import org.apache.flink.agents.api.chat.messages.TextBlock;
 import org.apache.flink.agents.api.chat.messages.ToolResultBlock;
 import 
org.apache.flink.agents.api.chat.messages.UnsupportedContentBlockException;
 import org.apache.flink.agents.api.chat.messages.VideoBlock;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -167,7 +167,7 @@ class GeminiMultimodalTest {
                         .build();
         GeminiChatModelConnection connection =
                 new GeminiChatModelConnection(
-                        descriptor, ResourceContext.fromGetResource((a, b) -> 
null));
+                        descriptor, TestResourceContexts.fromGetResource((a, 
b) -> null));
         ChatMessage assistant =
                 ChatMessage.assistant(
                         List.of(TextBlock.of("hi"), 
AudioBlock.fromBase64("audio/wav", BASE64)));
diff --git 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelConnectionTest.java
 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelConnectionTest.java
index 41ac8c947..d074ec951 100644
--- 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelConnectionTest.java
+++ 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelConnectionTest.java
@@ -31,6 +31,7 @@ import 
org.apache.flink.agents.api.chat.messages.ToolCallBlock;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -57,7 +58,8 @@ import static org.assertj.core.api.Assertions.assertThat;
  */
 class OllamaChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
diff --git 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetupTest.java
 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetupTest.java
index f379c1824..bf4130a31 100644
--- 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetupTest.java
+++ 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetupTest.java
@@ -20,6 +20,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.ollama;
 
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
@@ -30,7 +31,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link OllamaChatModelSetup}. */
 class OllamaChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     void getModel_returnsValueFromDescriptor() {
diff --git 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalLiveTest.java
 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalLiveTest.java
index 504932986..f878e5182 100644
--- 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalLiveTest.java
+++ 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalLiveTest.java
@@ -22,8 +22,8 @@ import org.apache.flink.agents.api.chat.messages.ChatMessage;
 import org.apache.flink.agents.api.chat.messages.ChatResult;
 import org.apache.flink.agents.api.chat.messages.ImageBlock;
 import org.apache.flink.agents.api.chat.messages.TextBlock;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
@@ -73,7 +73,7 @@ class OllamaMultimodalLiveTest {
                         .build();
         OllamaChatModelConnection connection =
                 new OllamaChatModelConnection(
-                        descriptor, ResourceContext.fromGetResource((name, 
type) -> null));
+                        descriptor, 
TestResourceContexts.fromGetResource((name, type) -> null));
         Map<String, Object> params = new HashMap<>();
         params.put("model", MODEL);
         // Not every vision model supports thinking (qwen2.5vl does not).
diff --git 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalTest.java
 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalTest.java
index 82f07edfc..fe2ed75b4 100644
--- 
a/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalTest.java
+++ 
b/integrations/chat-models/ollama/src/test/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaMultimodalTest.java
@@ -34,8 +34,8 @@ import org.apache.flink.agents.api.chat.messages.TextBlock;
 import org.apache.flink.agents.api.chat.messages.ToolResultBlock;
 import 
org.apache.flink.agents.api.chat.messages.UnsupportedContentBlockException;
 import org.apache.flink.agents.api.chat.messages.VideoBlock;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -61,7 +61,7 @@ class OllamaMultimodalTest {
                         .addInitialArgument("endpoint", 
"http://localhost:11434";)
                         .build();
         return new OllamaChatModelConnection(
-                        descriptor, ResourceContext.fromGetResource((a, b) -> 
null))
+                        descriptor, TestResourceContexts.fromGetResource((a, 
b) -> null))
                 .buildRequest(List.of(message), List.of(), Map.of("model", 
"llava"), null);
     }
 
@@ -180,7 +180,7 @@ class OllamaMultimodalTest {
                         .addInitialArgument("endpoint", 
"http://localhost:11434";)
                         .build();
         return new OllamaChatModelConnection(
-                        descriptor, ResourceContext.fromGetResource((a, b) -> 
null))
+                        descriptor, TestResourceContexts.fromGetResource((a, 
b) -> null))
                 .chat(List.of(message), List.of(), Map.of("model", "llava"));
     }
 }
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelConnectionTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelConnectionTest.java
index 2f0ffd404..1e93fd3da 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelConnectionTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelConnectionTest.java
@@ -42,6 +42,7 @@ import 
org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -78,7 +79,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
  */
 class AzureOpenAIChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     /** A deployment name is chosen by the user and carries no capability 
information. */
     private static final String DEPLOYMENT = "my-deployment";
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelSetupTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelSetupTest.java
index bc83a7423..4b1fdaa7b 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelSetupTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/AzureOpenAIChatModelSetupTest.java
@@ -21,6 +21,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.openai;
 import org.apache.flink.agents.api.chat.model.BaseChatModelSetup;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -34,7 +35,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link AzureOpenAIChatModelSetup}. */
 class AzureOpenAIChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder descriptorBuilder() {
         return 
ResourceDescriptor.Builder.newBuilder(AzureOpenAIChatModelSetup.class.getName());
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIChatCompletionsMultimodalLiveTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIChatCompletionsMultimodalLiveTest.java
index f40c0d358..cf1f0e898 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIChatCompletionsMultimodalLiveTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIChatCompletionsMultimodalLiveTest.java
@@ -25,8 +25,8 @@ import org.apache.flink.agents.api.chat.messages.ContentBlock;
 import org.apache.flink.agents.api.chat.messages.DocumentBlock;
 import org.apache.flink.agents.api.chat.messages.ImageBlock;
 import org.apache.flink.agents.api.chat.messages.TextBlock;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
@@ -124,7 +124,8 @@ class OpenAIChatCompletionsMultimodalLiveTest {
         }
         OpenAICompletionsConnection connection =
                 new OpenAICompletionsConnection(
-                        descriptor.build(), 
ResourceContext.fromGetResource((name, type) -> null));
+                        descriptor.build(),
+                        TestResourceContexts.fromGetResource((name, type) -> 
null));
         Map<String, Object> params = new HashMap<>();
         params.put("model", model);
         return connection
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsConnectionTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsConnectionTest.java
index 7dfb88ce2..d8d6b8851 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsConnectionTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsConnectionTest.java
@@ -36,6 +36,7 @@ import 
org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -65,7 +66,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
  */
 class OpenAICompletionsConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsSetupTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsSetupTest.java
index 0eaede03d..c281ddcdd 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsSetupTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAICompletionsSetupTest.java
@@ -20,6 +20,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.openai;
 
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -31,7 +32,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link OpenAICompletionsSetup}. */
 class OpenAICompletionsSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder base() {
         return 
ResourceDescriptor.Builder.newBuilder(OpenAICompletionsSetup.class.getName())
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIModelAttributionTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIModelAttributionTest.java
index 906b2047f..a98c8d976 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIModelAttributionTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIModelAttributionTest.java
@@ -23,6 +23,7 @@ import org.apache.flink.agents.api.chat.messages.ChatMessage;
 import org.apache.flink.agents.api.chat.messages.ChatResult;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -77,7 +78,7 @@ class OpenAIModelAttributionTest {
                             .addInitialArgument("api_base_url", 
endpoint.baseUrl())
                             .addInitialArgument("model", DEFAULT_MODEL)
                             .build();
-            ResourceContext context = ResourceContext.fromGetResource((a, b) 
-> null);
+            ResourceContext context = TestResourceContexts.fromGetResource((a, 
b) -> null);
             OpenAICompletionsConnection connection =
                     vllm
                             ? new VLLMChatModelConnection(descriptor, context)
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelConnectionTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelConnectionTest.java
index 2651d5b5d..bebc66ad1 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelConnectionTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelConnectionTest.java
@@ -33,6 +33,7 @@ import 
org.apache.flink.agents.api.chat.messages.ReasoningBlock;
 import org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -51,7 +52,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
  */
 class OpenAIResponsesModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder connectionDescriptor() {
         return ResourceDescriptor.Builder.newBuilder(
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelSetupTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelSetupTest.java
index 0284be27c..ffda6b419 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelSetupTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesModelSetupTest.java
@@ -20,6 +20,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.openai;
 
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -31,7 +32,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link OpenAIResponsesModelSetup}. */
 class OpenAIResponsesModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder base() {
         return 
ResourceDescriptor.Builder.newBuilder(OpenAIResponsesModelSetup.class.getName())
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesMultimodalTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesMultimodalTest.java
index cf8469b1a..4eacaacc2 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesMultimodalTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/OpenAIResponsesMultimodalTest.java
@@ -31,8 +31,8 @@ import 
org.apache.flink.agents.api.chat.messages.ToolResultBlock;
 import 
org.apache.flink.agents.api.chat.messages.UnsupportedContentBlockException;
 import org.apache.flink.agents.api.chat.messages.UrlSource;
 import org.apache.flink.agents.api.chat.messages.VideoBlock;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -170,7 +170,7 @@ class OpenAIResponsesMultimodalTest {
                         .build();
         OpenAIResponsesModelConnection connection =
                 new OpenAIResponsesModelConnection(
-                        descriptor, ResourceContext.fromGetResource((a, b) -> 
null));
+                        descriptor, TestResourceContexts.fromGetResource((a, 
b) -> null));
         ChatMessage message = 
ChatMessage.user(List.of(AudioBlock.fromBase64("audio/wav", BASE64)));
 
         assertThatThrownBy(() -> connection.chat(List.of(message), List.of(), 
Map.of()))
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelConnectionTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelConnectionTest.java
index e8727f325..413ad773c 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelConnectionTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelConnectionTest.java
@@ -22,6 +22,7 @@ import org.apache.flink.agents.api.chat.messages.ChatMessage;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -38,7 +39,8 @@ import static org.assertj.core.api.Assertions.assertThatCode;
  */
 class VLLMChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder connectionDescriptor() {
         return 
ResourceDescriptor.Builder.newBuilder(VLLMChatModelConnection.class.getName());
diff --git 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelSetupTest.java
 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelSetupTest.java
index 19c7be5fa..0d7f310c1 100644
--- 
a/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelSetupTest.java
+++ 
b/integrations/chat-models/openai/src/test/java/org/apache/flink/agents/integrations/chatmodels/openai/VLLMChatModelSetupTest.java
@@ -19,6 +19,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.openai;
 
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -32,7 +33,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Tests for {@link VLLMChatModelSetup}. */
 class VLLMChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor.Builder descriptorBuilder() {
         return 
ResourceDescriptor.Builder.newBuilder(VLLMChatModelSetup.class.getName());
diff --git 
a/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelConnectionTest.java
 
b/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelConnectionTest.java
index fa8041c7e..6865e010a 100644
--- 
a/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelConnectionTest.java
+++ 
b/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelConnectionTest.java
@@ -37,6 +37,7 @@ import 
org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
 import org.apache.flink.agents.api.chat.model.NativeStructuredOutputSupport;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -73,7 +74,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
  */
 class WatsonxChatModelConnectionTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
     private static final Function<String, String> NO_ENVIRONMENT = ignored -> 
null;
     private static final ObjectMapper MAPPER = new ObjectMapper();
     private static final String CHAT_RESPONSE =
diff --git 
a/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelLiveTest.java
 
b/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelLiveTest.java
index 536efb7be..754bc650a 100644
--- 
a/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelLiveTest.java
+++ 
b/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelLiveTest.java
@@ -23,6 +23,7 @@ import org.apache.flink.agents.api.chat.messages.ChatResult;
 import org.apache.flink.agents.api.chat.messages.MessageRole;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
@@ -42,7 +43,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 @EnabledIf("credentialsAvailable")
 class WatsonxChatModelLiveTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     /** Flat output schema for the live structured-output call. */
     public static class Answer {
diff --git 
a/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelSetupTest.java
 
b/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelSetupTest.java
index be0cdffef..9f6534581 100644
--- 
a/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelSetupTest.java
+++ 
b/integrations/chat-models/watsonx/src/test/java/org/apache/flink/agents/integrations/chatmodels/watsonx/WatsonxChatModelSetupTest.java
@@ -19,6 +19,7 @@ package 
org.apache.flink.agents.integrations.chatmodels.watsonx;
 
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -32,7 +33,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 /** Unit tests for {@link WatsonxChatModelSetup}. */
 class WatsonxChatModelSetupTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     @DisplayName("Default model applies when the model argument is omitted")
diff --git 
a/integrations/embedding-models/bedrock/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/bedrock/BedrockEmbeddingModelTest.java
 
b/integrations/embedding-models/bedrock/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/bedrock/BedrockEmbeddingModelTest.java
index 99c8e9b81..e3a3835d2 100644
--- 
a/integrations/embedding-models/bedrock/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/bedrock/BedrockEmbeddingModelTest.java
+++ 
b/integrations/embedding-models/bedrock/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/bedrock/BedrockEmbeddingModelTest.java
@@ -24,6 +24,7 @@ import 
org.apache.flink.agents.api.embedding.model.BaseEmbeddingModelSetup;
 import org.apache.flink.agents.api.embedding.model.EmbeddingResult;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import software.amazon.awssdk.core.SdkBytes;
@@ -47,7 +48,8 @@ import static org.mockito.Mockito.when;
 /** Tests for {@link BedrockEmbeddingModelConnection} and {@link 
BedrockEmbeddingModelSetup}. */
 class BedrockEmbeddingModelTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor connDescriptor(String region) {
         ResourceDescriptor.Builder b =
diff --git 
a/integrations/embedding-models/ollama/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/ollama/OllamaEmbeddingModelConnectionTest.java
 
b/integrations/embedding-models/ollama/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/ollama/OllamaEmbeddingModelConnectionTest.java
index 167ffecb0..c7aabe7de 100644
--- 
a/integrations/embedding-models/ollama/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/ollama/OllamaEmbeddingModelConnectionTest.java
+++ 
b/integrations/embedding-models/ollama/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/ollama/OllamaEmbeddingModelConnectionTest.java
@@ -22,6 +22,7 @@ import 
org.apache.flink.agents.api.annotation.EmbeddingModelConnection;
 import org.apache.flink.agents.api.embedding.model.BaseEmbeddingModelSetup;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -39,7 +40,8 @@ class OllamaEmbeddingModelConnectionTest {
                 .build();
     }
 
-    private static ResourceContext dummyResource = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static ResourceContext dummyResource =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     @DisplayName("Create OllamaEmbeddingModelConnection and check embed 
method")
diff --git 
a/integrations/embedding-models/openai/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/openai/OpenAIEmbeddingModelTest.java
 
b/integrations/embedding-models/openai/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/openai/OpenAIEmbeddingModelTest.java
index 892e721f0..9d249d9a6 100644
--- 
a/integrations/embedding-models/openai/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/openai/OpenAIEmbeddingModelTest.java
+++ 
b/integrations/embedding-models/openai/src/test/java/org/apache/flink/agents/integrations/embeddingmodels/openai/OpenAIEmbeddingModelTest.java
@@ -31,6 +31,7 @@ import 
org.apache.flink.agents.api.embedding.model.BaseEmbeddingModelSetup;
 import org.apache.flink.agents.api.embedding.model.EmbeddingResult;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
@@ -52,7 +53,8 @@ import static org.mockito.Mockito.when;
 
 class OpenAIEmbeddingModelTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     private static ResourceDescriptor connDescriptor() {
         return 
ResourceDescriptor.Builder.newBuilder(OpenAIEmbeddingModelConnection.class.getName())
diff --git 
a/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPServerTest.java
 
b/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPServerTest.java
index 847fd2248..5397f707e 100644
--- 
a/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPServerTest.java
+++ 
b/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPServerTest.java
@@ -20,10 +20,10 @@ package org.apache.flink.agents.integrations.mcp;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.modelcontextprotocol.spec.McpSchema;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceName;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.integrations.mcp.auth.ApiKeyAuth;
 import org.apache.flink.agents.integrations.mcp.auth.BasicAuth;
 import org.apache.flink.agents.integrations.mcp.auth.BearerTokenAuth;
@@ -88,7 +88,7 @@ class MCPServerTest {
         MCPServer server =
                 new MCPServer(
                         descriptor,
-                        ResourceContext.fromGetResource(
+                        TestResourceContexts.fromGetResource(
                                 (name, type) -> {
                                     throw new UnsupportedOperationException(
                                             "No dependencies expected");
diff --git a/integrations/pom.xml b/integrations/pom.xml
index 77ec1d066..269fe185b 100644
--- a/integrations/pom.xml
+++ b/integrations/pom.xml
@@ -42,6 +42,17 @@ under the License.
         <opentelemetry.version>1.51.0</opentelemetry.version>
     </properties>
 
+    <dependencies>
+        <!-- Shared fixtures from the API module are available only to 
integration tests. -->
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-agents-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
     <modules>
         <module>chat-models</module>
         <module>embedding-models</module>
diff --git 
a/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreKNumCandidatesTest.java
 
b/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreKNumCandidatesTest.java
index fb2c3f908..55ee2f771 100644
--- 
a/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreKNumCandidatesTest.java
+++ 
b/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreKNumCandidatesTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.flink.agents.integrations.vectorstores.elasticsearch;
 
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -45,7 +45,7 @@ class ElasticsearchVectorStoreKNumCandidatesTest {
                         .addInitialArgument("num_candidates", numCandidates)
                         .build();
         return new ElasticsearchVectorStore(
-                descriptor, ResourceContext.fromGetResource((name, type) -> 
null));
+                descriptor, TestResourceContexts.fromGetResource((name, type) 
-> null));
     }
 
     @Test
diff --git 
a/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreTest.java
 
b/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreTest.java
index 21bb0f916..79d63d47f 100644
--- 
a/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreTest.java
+++ 
b/integrations/vector-stores/elasticsearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/elasticsearch/ElasticsearchVectorStoreTest.java
@@ -20,9 +20,9 @@ package 
org.apache.flink.agents.integrations.vectorstores.elasticsearch;
 
 import org.apache.flink.agents.api.embedding.model.BaseEmbeddingModelSetup;
 import org.apache.flink.agents.api.resource.Resource;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.vectorstores.BaseVectorStore;
 import 
org.apache.flink.agents.api.vectorstores.CollectionManageableVectorStore;
 import org.apache.flink.agents.api.vectorstores.Document;
@@ -77,7 +77,8 @@ public class ElasticsearchVectorStoreTest {
         store =
                 new ElasticsearchVectorStore(
                         builder.build(),
-                        
ResourceContext.fromGetResource(ElasticsearchVectorStoreTest::getResource));
+                        TestResourceContexts.fromGetResource(
+                                ElasticsearchVectorStoreTest::getResource));
         store.open();
     }
 
@@ -330,7 +331,8 @@ public class ElasticsearchVectorStoreTest {
         BaseVectorStore kStore =
                 new ElasticsearchVectorStore(
                         descriptor,
-                        
ResourceContext.fromGetResource(ElasticsearchVectorStoreTest::getResource));
+                        TestResourceContexts.fromGetResource(
+                                ElasticsearchVectorStoreTest::getResource));
         kStore.open();
         return kStore;
     }
diff --git 
a/integrations/vector-stores/milvus/src/test/java/org/apache/flink/agents/integrations/vectorstores/milvus/MilvusVectorStoreTest.java
 
b/integrations/vector-stores/milvus/src/test/java/org/apache/flink/agents/integrations/vectorstores/milvus/MilvusVectorStoreTest.java
index bfd44ceb7..555c3e26f 100644
--- 
a/integrations/vector-stores/milvus/src/test/java/org/apache/flink/agents/integrations/vectorstores/milvus/MilvusVectorStoreTest.java
+++ 
b/integrations/vector-stores/milvus/src/test/java/org/apache/flink/agents/integrations/vectorstores/milvus/MilvusVectorStoreTest.java
@@ -33,6 +33,7 @@ import org.apache.flink.agents.api.resource.Resource;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.vectorstores.BaseVectorStore;
 import 
org.apache.flink.agents.api.vectorstores.CollectionManageableVectorStore;
 import org.apache.flink.agents.api.vectorstores.Document;
@@ -52,7 +53,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 /** Tests for {@link MilvusVectorStore}. */
 public class MilvusVectorStoreTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     void testConstructorAndStoreKwargs() {
@@ -141,7 +143,8 @@ public class MilvusVectorStoreTest {
                         .build();
         MilvusVectorStore store =
                 new MilvusVectorStore(
-                        desc, 
ResourceContext.fromGetResource(MilvusVectorStoreTest::getResource));
+                        desc,
+                        
TestResourceContexts.fromGetResource(MilvusVectorStoreTest::getResource));
         store.open();
         MilvusClientV2 client =
                 new MilvusClientV2(
@@ -571,7 +574,7 @@ public class MilvusVectorStoreTest {
         MilvusVectorStore store =
                 new MilvusVectorStore(
                         descriptor(collection),
-                        
ResourceContext.fromGetResource(MilvusVectorStoreTest::getResource));
+                        
TestResourceContexts.fromGetResource(MilvusVectorStoreTest::getResource));
         store.open();
         return store;
     }
diff --git 
a/integrations/vector-stores/opensearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/opensearch/OpenSearchVectorStoreTest.java
 
b/integrations/vector-stores/opensearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/opensearch/OpenSearchVectorStoreTest.java
index 43ee586ad..9e89c878f 100644
--- 
a/integrations/vector-stores/opensearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/opensearch/OpenSearchVectorStoreTest.java
+++ 
b/integrations/vector-stores/opensearch/src/test/java/org/apache/flink/agents/integrations/vectorstores/opensearch/OpenSearchVectorStoreTest.java
@@ -23,6 +23,7 @@ import org.apache.flink.agents.api.resource.Resource;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.vectorstores.BaseVectorStore;
 import 
org.apache.flink.agents.api.vectorstores.CollectionManageableVectorStore;
 import org.apache.flink.agents.api.vectorstores.Document;
@@ -49,7 +50,8 @@ import static org.assertj.core.api.Assertions.assertThat;
  */
 public class OpenSearchVectorStoreTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     @DisplayName("Constructor creates store with IAM auth")
@@ -167,7 +169,8 @@ public class OpenSearchVectorStoreTest {
         store =
                 new OpenSearchVectorStore(
                         builder.build(),
-                        
ResourceContext.fromGetResource(OpenSearchVectorStoreTest::getResource));
+                        TestResourceContexts.fromGetResource(
+                                OpenSearchVectorStoreTest::getResource));
     }
 
     @Test
diff --git 
a/integrations/vector-stores/pgvector/src/test/java/org/apache/flink/agents/integrations/vectorstores/pgvector/PgVectorVectorStoreTest.java
 
b/integrations/vector-stores/pgvector/src/test/java/org/apache/flink/agents/integrations/vectorstores/pgvector/PgVectorVectorStoreTest.java
index fba180f51..77326bb34 100644
--- 
a/integrations/vector-stores/pgvector/src/test/java/org/apache/flink/agents/integrations/vectorstores/pgvector/PgVectorVectorStoreTest.java
+++ 
b/integrations/vector-stores/pgvector/src/test/java/org/apache/flink/agents/integrations/vectorstores/pgvector/PgVectorVectorStoreTest.java
@@ -22,6 +22,7 @@ import org.apache.flink.agents.api.resource.Resource;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.vectorstores.BaseVectorStore;
 import 
org.apache.flink.agents.api.vectorstores.CollectionManageableVectorStore;
 import org.apache.flink.agents.api.vectorstores.Document;
@@ -55,7 +56,8 @@ import static org.assertj.core.api.Assertions.within;
  */
 public class PgVectorVectorStoreTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
     private static final String LIVE = "PGVECTOR_URI";
 
     @Test
@@ -1151,14 +1153,14 @@ public class PgVectorVectorStoreTest {
     private static PgVectorVectorStore openForcedIndexStore(String collection) 
throws Exception {
         return new PgVectorVectorStore(
                 descriptor(collection, forcedIndexUri()),
-                
ResourceContext.fromGetResource(PgVectorVectorStoreTest::getResource));
+                
TestResourceContexts.fromGetResource(PgVectorVectorStoreTest::getResource));
     }
 
     private static PgVectorVectorStore openStore(String collection) throws 
Exception {
         PgVectorVectorStore store =
                 new PgVectorVectorStore(
                         descriptor(collection),
-                        
ResourceContext.fromGetResource(PgVectorVectorStoreTest::getResource));
+                        
TestResourceContexts.fromGetResource(PgVectorVectorStoreTest::getResource));
         store.open();
         return store;
     }
diff --git 
a/integrations/vector-stores/s3vectors/src/test/java/org/apache/flink/agents/integrations/vectorstores/s3vectors/S3VectorsVectorStoreTest.java
 
b/integrations/vector-stores/s3vectors/src/test/java/org/apache/flink/agents/integrations/vectorstores/s3vectors/S3VectorsVectorStoreTest.java
index 311cb3bec..82a475abc 100644
--- 
a/integrations/vector-stores/s3vectors/src/test/java/org/apache/flink/agents/integrations/vectorstores/s3vectors/S3VectorsVectorStoreTest.java
+++ 
b/integrations/vector-stores/s3vectors/src/test/java/org/apache/flink/agents/integrations/vectorstores/s3vectors/S3VectorsVectorStoreTest.java
@@ -23,6 +23,7 @@ import org.apache.flink.agents.api.resource.Resource;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.vectorstores.BaseVectorStore;
 import org.apache.flink.agents.api.vectorstores.Document;
 import org.junit.jupiter.api.Assertions;
@@ -46,7 +47,8 @@ import static org.assertj.core.api.Assertions.assertThat;
  */
 public class S3VectorsVectorStoreTest {
 
-    private static final ResourceContext NOOP = 
ResourceContext.fromGetResource((a, b) -> null);
+    private static final ResourceContext NOOP =
+            TestResourceContexts.fromGetResource((a, b) -> null);
 
     @Test
     @DisplayName("Constructor creates store")
@@ -117,7 +119,8 @@ public class S3VectorsVectorStoreTest {
         store =
                 new S3VectorsVectorStore(
                         desc,
-                        
ResourceContext.fromGetResource(S3VectorsVectorStoreTest::getResource));
+                        TestResourceContexts.fromGetResource(
+                                S3VectorsVectorStoreTest::getResource));
     }
 
     @Test
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java
index aa3dae9bd..83463908b 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareChatModelTest.java
@@ -36,6 +36,7 @@ import org.apache.flink.agents.api.resource.Resource;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.plan.resourceprovider.ResourceProvider;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -107,7 +108,7 @@ class AgentPlanDeclareChatModelTest {
                 .get(type)
                 .get(name)
                 .provide(
-                        ResourceContext.fromGetResource(
+                        TestResourceContexts.fromGetResource(
                                 (n, t) -> {
                                     throw new UnsupportedOperationException(
                                             "No dependencies expected");
@@ -151,7 +152,7 @@ class AgentPlanDeclareChatModelTest {
                                 .get(ResourceType.CHAT_MODEL)
                                 .get("testChatModel")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -182,7 +183,7 @@ class AgentPlanDeclareChatModelTest {
                                 .get(ResourceType.CHAT_MODEL)
                                 .get("testChatModel")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareDecisionModelTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareDecisionModelTest.java
index ecc18328a..7ddc5044e 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareDecisionModelTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareDecisionModelTest.java
@@ -31,6 +31,7 @@ import 
org.apache.flink.agents.api.decision.DecisionResult.PredicateAnswer;
 import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.plan.resourceprovider.JavaResourceProvider;
 import org.apache.flink.agents.plan.resourceprovider.ResourceProvider;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -105,7 +106,7 @@ public class AgentPlanDeclareDecisionModelTest {
                                 .get("connection")
                                 .provide(null);
         ResourceContext context =
-                ResourceContext.fromGetResource(
+                TestResourceContexts.fromGetResource(
                         (name, type) -> {
                             assertThat(name).isEqualTo("connection");
                             
assertThat(type).isEqualTo(ResourceType.DECISION_MODEL_CONNECTION);
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareMCPServerTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareMCPServerTest.java
index 501bfd4d6..4f47952e8 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareMCPServerTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareMCPServerTest.java
@@ -26,10 +26,10 @@ import org.apache.flink.agents.api.annotation.Action;
 import org.apache.flink.agents.api.context.RunnerContext;
 import org.apache.flink.agents.api.prompt.Prompt;
 import org.apache.flink.agents.api.resource.Resource;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceName;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.integrations.mcp.MCPPrompt;
@@ -193,7 +193,7 @@ class AgentPlanDeclareMCPServerTest {
                 .get(type)
                 .get(name)
                 .provide(
-                        ResourceContext.fromGetResource(
+                        TestResourceContexts.fromGetResource(
                                 (n, t) -> {
                                     throw new UnsupportedOperationException(
                                             "No dependencies expected");
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareSkillsTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareSkillsTest.java
index 8f25968e0..9bda9b099 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareSkillsTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareSkillsTest.java
@@ -20,6 +20,7 @@ package org.apache.flink.agents.plan;
 
 import org.apache.flink.agents.api.agents.Agent;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.skills.SkillSourceSpec;
 import org.apache.flink.agents.api.skills.Skills;
 import org.apache.flink.agents.plan.resourceprovider.JavaResourceProvider;
@@ -326,8 +327,6 @@ class AgentPlanDeclareSkillsTest {
                 
plan.getResourceProviders().get(ResourceType.SKILLS).get(Skills.SKILLS_CONFIG);
         return (Skills)
                 ((JavaSerializableResourceProvider) configProvider)
-                        .provide(
-                                
org.apache.flink.agents.api.resource.ResourceContext
-                                        .fromGetResource((n, t) -> null));
+                        .provide(TestResourceContexts.fromGetResource((n, t) 
-> null));
     }
 }
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolFieldTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolFieldTest.java
index 081bb178c..48b472762 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolFieldTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolFieldTest.java
@@ -27,8 +27,8 @@ import org.apache.flink.agents.api.annotation.Action;
 import org.apache.flink.agents.api.annotation.ToolParam;
 import org.apache.flink.agents.api.context.RunnerContext;
 import org.apache.flink.agents.api.resource.Resource;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -126,7 +126,7 @@ class AgentPlanDeclareToolFieldTest {
                 .get(type)
                 .get(name)
                 .provide(
-                        ResourceContext.fromGetResource(
+                        TestResourceContexts.fromGetResource(
                                 (n, t) -> {
                                     throw new UnsupportedOperationException(
                                             "No dependencies expected");
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java
index 4d68c8d3f..3d648c478 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/AgentPlanDeclareToolMethodTest.java
@@ -29,8 +29,8 @@ import org.apache.flink.agents.api.annotation.Action;
 import org.apache.flink.agents.api.annotation.ToolParam;
 import org.apache.flink.agents.api.context.RunnerContext;
 import org.apache.flink.agents.api.resource.Resource;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.Tool;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameterInjection;
@@ -123,7 +123,7 @@ class AgentPlanDeclareToolMethodTest {
                 .get(type)
                 .get(name)
                 .provide(
-                        ResourceContext.fromGetResource(
+                        TestResourceContexts.fromGetResource(
                                 (n, t) -> {
                                     throw new UnsupportedOperationException(
                                             "No dependencies expected");
@@ -148,7 +148,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("calculate")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -170,7 +170,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("getWeather")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -252,7 +252,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("getWeather")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -283,7 +283,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("queryOrder")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -318,7 +318,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("queryOrder")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -378,7 +378,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("getWeather")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -473,7 +473,7 @@ class AgentPlanDeclareToolMethodTest {
                                 .get(ResourceType.TOOL)
                                 .get("calculate")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java 
b/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java
index 67d4ca0dd..efeb8ef91 100644
--- a/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java
+++ b/plan/src/test/java/org/apache/flink/agents/plan/FunctionToolPlanTest.java
@@ -26,8 +26,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.flink.agents.api.agents.Agent;
 import org.apache.flink.agents.api.annotation.Tool;
 import org.apache.flink.agents.api.annotation.ToolParam;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameterInjection;
 import org.apache.flink.agents.api.tools.ToolParameters;
@@ -105,7 +105,7 @@ class FunctionToolPlanTest {
                                 .get(ResourceType.TOOL)
                                 .get("javaTool")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
@@ -127,7 +127,7 @@ class FunctionToolPlanTest {
                                 .get(ResourceType.TOOL)
                                 .get("pyTool")
                                 .provide(
-                                        ResourceContext.fromGetResource(
+                                        TestResourceContexts.fromGetResource(
                                                 (n, t) -> {
                                                     throw new 
UnsupportedOperationException(
                                                             "No dependencies 
expected");
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/actions/DecisionModelActionTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/actions/DecisionModelActionTest.java
index 8da69b784..c5595d4f4 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/actions/DecisionModelActionTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/actions/DecisionModelActionTest.java
@@ -30,9 +30,9 @@ import org.apache.flink.agents.api.decision.DecisionResult;
 import org.apache.flink.agents.api.event.DecisionRequestEvent;
 import org.apache.flink.agents.api.event.DecisionResponseEvent;
 import org.apache.flink.agents.api.metrics.FlinkAgentsMetricGroup;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.trace.ExecutionReporter;
 import 
org.apache.flink.agents.plan.resource.python.PythonDecisionModelConnection;
 import org.apache.flink.agents.plan.resource.python.PythonDecisionModelSetup;
@@ -475,7 +475,7 @@ class DecisionModelActionTest {
             model =
                     new BaseDecisionModelSetup(
                             descriptor,
-                            ResourceContext.fromGetResource((name, type) -> 
connection));
+                            TestResourceContexts.fromGetResource((name, type) 
-> connection));
         } else {
             model = new PythonDecisionModelSetup(adapter, pythonResource, 
descriptor, null);
         }
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java
 
b/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java
index 867d1bb05..7864adb20 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/serializer/AgentPlanJsonDeserializerTest.java
@@ -25,8 +25,8 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import org.apache.flink.agents.api.Event;
 import org.apache.flink.agents.api.InputEvent;
 import org.apache.flink.agents.api.context.RunnerContext;
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceType;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.ToolMetadata;
 import org.apache.flink.agents.api.tools.ToolParameterInjection;
 import org.apache.flink.agents.plan.AgentPlan;
@@ -195,7 +195,8 @@ public class AgentPlanJsonDeserializerTest {
         ResourceProvider provider =
                 
agentPlan.getResourceProviders().get(ResourceType.TOOL).get("query_order");
         FunctionTool deserializedTool =
-                (FunctionTool) 
provider.provide(ResourceContext.fromGetResource((n, t) -> null));
+                (FunctionTool)
+                        
provider.provide(TestResourceContexts.fromGetResource((n, t) -> null));
         assertEquals(
                 Map.of("tenant_id", 
ToolParameterInjection.fromSensoryMemory("request.tenant_id")),
                 deserializedTool.getInjectedArgs());
diff --git 
a/plan/src/test/java/org/apache/flink/agents/plan/tools/bash/BashToolTest.java 
b/plan/src/test/java/org/apache/flink/agents/plan/tools/bash/BashToolTest.java
index 6a0ca08c1..c2f03a7da 100644
--- 
a/plan/src/test/java/org/apache/flink/agents/plan/tools/bash/BashToolTest.java
+++ 
b/plan/src/test/java/org/apache/flink/agents/plan/tools/bash/BashToolTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.flink.agents.plan.tools.bash;
 
-import org.apache.flink.agents.api.resource.ResourceContext;
 import org.apache.flink.agents.api.resource.ResourceDescriptor;
+import org.apache.flink.agents.api.resource.TestResourceContexts;
 import org.apache.flink.agents.api.tools.ToolParameters;
 import org.apache.flink.agents.api.tools.ToolResponse;
 import org.junit.jupiter.api.Test;
@@ -41,7 +41,7 @@ class BashToolTest {
     private static BashTool tool() {
         return new BashTool(
                 new ResourceDescriptor(BashTool.class.getName(), Map.of()),
-                ResourceContext.fromGetResource((n, t) -> null));
+                TestResourceContexts.fromGetResource((n, t) -> null));
     }
 
     private static ToolParameters args(

Reply via email to