From 6c3458a5ec37a5b69957ad17c84de58984698f25 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Tue, 11 Aug 2026 21:44:53 +0900 Subject: Audit and align v1 runtime design --- tests/Agent.Core.Tests/ConfigurationTests.cs | 57 ++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'tests/Agent.Core.Tests/ConfigurationTests.cs') diff --git a/tests/Agent.Core.Tests/ConfigurationTests.cs b/tests/Agent.Core.Tests/ConfigurationTests.cs index 79c746d..e84d132 100644 --- a/tests/Agent.Core.Tests/ConfigurationTests.cs +++ b/tests/Agent.Core.Tests/ConfigurationTests.cs @@ -43,6 +43,63 @@ public sealed class ConfigurationTests Assert.Equal("http", result.Transport); } + [Fact] + public void CommandLine_defaults_to_serve_when_command_is_omitted() + { + Assert.Equal(AppCommand.Serve, CommandLine.Parse([]).Command); + CommandLine withOption = CommandLine.Parse(["--lang", "ja"]); + Assert.Equal(AppCommand.Serve, withOption.Command); + Assert.Equal("ja", withOption.Language); + } + + [Fact] + public void Local_configuration_recursively_merges_maps_and_replaces_sequences() + { + using var directory = new TestDirectory(); + string config = CreateValidConfiguration(directory); + directory.File("agent.local.yaml", """ + application: + language: ja + sandbox: + filesystem: + read: [C:/local-only] + """); + + AgentConfiguration result = ConfigurationLoader.Load(config); + + Assert.Equal("ja", result.Application.Language); + Assert.Equal(["C:/local-only"], result.Sandbox.Filesystem.Read); + Assert.Equal("model", result.Ollama.Model); + } + + [Fact] + public void Unknown_local_configuration_property_is_fatal() + { + using var directory = new TestDirectory(); + string config = CreateValidConfiguration(directory); + directory.File("agent.local.yaml", "unknown_local: true\n"); + + Assert.Throws(() => ConfigurationLoader.Load(config)); + } + + [Fact] + public void Execute_file_without_process_approval_reports_canonical_keys() + { + using var directory = new TestDirectory(); + string config = CreateValidConfiguration(directory); + string executable = directory.File("tools/tool.exe", "fixture").Replace('\\', '/'); + directory.File("agent.local.yaml", $$""" + sandbox: + filesystem: + execute: [{{executable}}] + """); + + ConfigurationException error = Assert.Throws(() => ConfigurationLoader.Load(config)); + Assert.Contains("sandbox.filesystem.execute", error.Message, StringComparison.Ordinal); + Assert.Contains("sandbox.process.approvals", error.Message, StringComparison.Ordinal); + Assert.Contains(Path.GetFullPath(executable), error.Message, StringComparison.OrdinalIgnoreCase); + } + [Fact] public void SkillLoader_loads_standard_skill_directories_only() { -- cgit v1.2.3