diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistry.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistry.java index 1f24bcc0..2a265978 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistry.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistry.java @@ -24,11 +24,6 @@ public class BuiltinActionRegistry extends AbstractAgentModule.Standalone { @InjectCapability private ActionCapability actionCapability; - public static BuiltinActionDefinition definition(String name, MetaActionInfo metaActionInfo, - Function, Object> invoker) { - return new BuiltinActionDefinition(BUILTIN_LOCATION + "::" + name, metaActionInfo, invoker); - } - @Init public void init() { definitions.clear(); @@ -44,7 +39,7 @@ public class BuiltinActionRegistry extends AbstractAgentModule.Standalone { } public void defineBuiltinAction(String name, MetaActionInfo metaActionInfo, Function, Object> invoker) { - BuiltinActionDefinition definition = new BuiltinActionDefinition(name, metaActionInfo, invoker); + BuiltinActionDefinition definition = new BuiltinActionDefinition(BUILTIN_LOCATION + "::" + name, metaActionInfo, invoker); definitions.put(definition.actionKey(), definition); } diff --git a/Partner-Core/src/test/java/work/slhaf/partner/core/action/runner/LocalRunnerClientTest.java b/Partner-Core/src/test/java/work/slhaf/partner/core/action/runner/LocalRunnerClientTest.java index e564f257..e0380c7d 100644 --- a/Partner-Core/src/test/java/work/slhaf/partner/core/action/runner/LocalRunnerClientTest.java +++ b/Partner-Core/src/test/java/work/slhaf/partner/core/action/runner/LocalRunnerClientTest.java @@ -888,19 +888,9 @@ public class LocalRunnerClientTest { ConcurrentHashMap existedMetaActions = new ConcurrentHashMap<>(); ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); LocalRunnerClient client = new LocalRunnerClient(existedMetaActions, executor, tempDir.toString()); - BuiltinActionRegistry registry = new BuiltinActionRegistry() { - @Override - protected List buildDefaultActionDefinitions() { - return List.of( - definition("echo", buildMetaActionInfo("echo"), params -> params.get("value")) - ); - } - }; + BuiltinActionRegistry registry = new BuiltinActionRegistry(); client.setBuiltinActionRegistry(registry); - registry.getDefinitions().put( - "builtin::echo", - BuiltinActionRegistry.definition("echo", buildMetaActionInfo("echo"), params -> params.get("value")) - ); + registry.defineBuiltinAction("echo", buildMetaActionInfo("echo"), params -> params.get("value")); try { MetaAction metaAction = buildMetaAction(MetaAction.Type.BUILTIN, "builtin", "echo", Map.of("value", "ok")); diff --git a/Partner-Core/src/test/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistryTest.java b/Partner-Core/src/test/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistryTest.java index 9b47699a..c1ffa057 100644 --- a/Partner-Core/src/test/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistryTest.java +++ b/Partner-Core/src/test/java/work/slhaf/partner/module/modules/action/builtin/BuiltinActionRegistryTest.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONObject; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import work.slhaf.partner.core.action.ActionCapability; -import work.slhaf.partner.core.action.ActionCore; import work.slhaf.partner.core.action.entity.MetaActionInfo; import work.slhaf.partner.core.action.exception.MetaActionNotFoundException; import work.slhaf.partner.core.action.runner.RunnerClient; @@ -16,6 +15,7 @@ import java.util.Map; import java.util.Set; import static org.mockito.Mockito.*; +import static work.slhaf.partner.core.action.ActionCore.BUILTIN_LOCATION; class BuiltinActionRegistryTest { @@ -25,16 +25,6 @@ class BuiltinActionRegistryTest { field.set(registry, actionCapability); } - private static Map indexDefinitions( - List definitions - ) { - Map map = new HashMap<>(); - for (BuiltinActionRegistry.BuiltinActionDefinition definition : definitions) { - map.put(definition.actionKey(), definition); - } - return map; - } - private static MetaActionInfo buildMetaActionInfo(String description) { return new MetaActionInfo( false, @@ -49,15 +39,28 @@ class BuiltinActionRegistryTest { ); } + private static BuiltinActionRegistry.BuiltinActionDefinition buildDefinition( + String name, + MetaActionInfo metaActionInfo, + java.util.function.Function, Object> invoker + ) { + return new BuiltinActionRegistry.BuiltinActionDefinition( + BUILTIN_LOCATION + "::" + name, + metaActionInfo, + invoker + ); + } + @Test void testInitRegistersMetaActionsAndMountsRunner() throws Exception { ActionCapability actionCapability = mock(ActionCapability.class); RunnerClient runnerClient = mock(RunnerClient.class); when(actionCapability.runnerClient()).thenReturn(runnerClient); - BuiltinActionRegistry registry = new TestRegistry(List.of( - BuiltinActionRegistry.definition("echo", buildMetaActionInfo("echo"), params -> params.get("value")) - )); + BuiltinActionRegistry registry = spy(new BuiltinActionRegistry()); + doReturn(List.of( + buildDefinition("echo", buildMetaActionInfo("echo"), params -> params.get("value")) + )).when(registry).buildDefaultActionDefinitions(); injectActionCapability(registry, actionCapability); registry.init(); @@ -71,13 +74,10 @@ class BuiltinActionRegistryTest { @Test void testCallReturnsStringifiedResults() { - BuiltinActionRegistry registry = new TestRegistry(List.of( - BuiltinActionRegistry.definition("echo", buildMetaActionInfo("echo"), params -> params.get("value")), - BuiltinActionRegistry.definition("json", buildMetaActionInfo("json"), params -> Map.of("ok", true)), - BuiltinActionRegistry.definition("nil", buildMetaActionInfo("nil"), params -> null) - )); - - registry.getDefinitions().putAll(indexDefinitions(registry.buildDefaultActionDefinitions())); + BuiltinActionRegistry registry = new BuiltinActionRegistry(); + registry.defineBuiltinAction("echo", buildMetaActionInfo("echo"), params -> params.get("value")); + registry.defineBuiltinAction("json", buildMetaActionInfo("json"), params -> Map.of("ok", true)); + registry.defineBuiltinAction("nil", buildMetaActionInfo("nil"), params -> null); Assertions.assertEquals("hello", registry.call("builtin::echo", Map.of("value", "hello"))); Assertions.assertEquals("{\"ok\":true}", registry.call("builtin::json", Map.of())); @@ -86,50 +86,20 @@ class BuiltinActionRegistryTest { @Test void testCallThrowsWhenMissingDefinition() { - BuiltinActionRegistry registry = new TestRegistry(List.of()); + BuiltinActionRegistry registry = new BuiltinActionRegistry(); Assertions.assertThrows(MetaActionNotFoundException.class, () -> registry.call("builtin::missing", Map.of())); } @Test void testCallPropagatesInvokerFailure() { - BuiltinActionRegistry registry = new TestRegistry(List.of( - BuiltinActionRegistry.definition("boom", buildMetaActionInfo("boom"), params -> { - throw new IllegalStateException("boom"); - }) - )); - registry.getDefinitions().putAll(indexDefinitions(registry.buildDefaultActionDefinitions())); + BuiltinActionRegistry registry = new BuiltinActionRegistry(); + registry.defineBuiltinAction("boom", buildMetaActionInfo("boom"), params -> { + throw new IllegalStateException("boom"); + }); IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> registry.call("builtin::boom", Map.of())); Assertions.assertEquals("boom", exception.getMessage()); } - @Test - void testActionCoreLoadsBuiltinMetaAction() throws Exception { - ActionCore actionCore = new ActionCore(); - try { - actionCore.registerMetaActions(Map.of("builtin::echo", buildMetaActionInfo("echo"))); - - Assertions.assertTrue(actionCore.listAvailableMetaActions().containsKey("builtin::echo")); - Assertions.assertEquals("echo", actionCore.loadMetaActionInfo("builtin::echo").getDescription()); - Assertions.assertEquals("builtin::echo", actionCore.loadMetaAction("builtin::echo").getKey()); - Assertions.assertEquals(ActionCore.BUILTIN_LOCATION, actionCore.loadMetaAction("builtin::echo").getLocation()); - } finally { - actionCore.getExecutor(ActionCore.ExecutorType.PLATFORM).shutdownNow(); - actionCore.getExecutor(ActionCore.ExecutorType.VIRTUAL).shutdownNow(); - } - } - - private static class TestRegistry extends BuiltinActionRegistry { - private final List definitions; - - private TestRegistry(List definitions) { - this.definitions = definitions; - } - - @Override - protected List buildDefaultActionDefinitions() { - return definitions; - } - } }