From f8d0ce94fe29aec71097d5fc7fc0b64f3a02710d Mon Sep 17 00:00:00 2001 From: Richard Date: Thu, 24 Sep 2026 12:59:46 +0200 Subject: [PATCH] Test: Parallelitaet verschiedener Agenten ueber Ueberlappung statt Wanduhr pruefen Verschiedene_Agenten_laufen_wirklich_parallel liess die Attrappe nur mit Text antworten: Das langsame Werkzeug lief nie, und geprueft wurde, ob drei leere Laeufe unter 450 ms bleiben. Das bestand auch mit gegenseitig gesperrten Agenten und schlug unter Last fehl. Nach dem Merge von #683 fiel ein Core-Test einmal in einem parallelen Volllauf, danach in elf Laeufen nicht mehr; dieser war der letzte mit einer engen Wanduhr-Schwelle. Jetzt ruft jeder Agent das Werkzeug auf, und bewiesen wird die Ueberlappung (MaxConcurrent > 1). Co-Authored-By: Claude Opus 5.5 --- .../Engine/AgentEngineConcurrencyTests.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/ClawdDotNet.Core.Tests/Engine/AgentEngineConcurrencyTests.cs b/tests/ClawdDotNet.Core.Tests/Engine/AgentEngineConcurrencyTests.cs index 0716be9..31797ab 100644 --- a/tests/ClawdDotNet.Core.Tests/Engine/AgentEngineConcurrencyTests.cs +++ b/tests/ClawdDotNet.Core.Tests/Engine/AgentEngineConcurrencyTests.cs @@ -116,25 +116,27 @@ public sealed class AgentEngineConcurrencyTests { // Wichtige Gegenprobe: Der Fix für B2 darf nicht versehentlich alle Agenten // gegeneinander sperren. - var toolDelay = TimeSpan.FromMilliseconds(200); - var fixture = new EngineFixture().WithTool(FakeTool.Slow(toolDelay)); + // + // Bis zum 2026-09-24 antwortete die Attrappe hier nur mit Text: Das langsame + // Werkzeug lief nie, die Läufe waren sofort fertig, und geprüft wurde nur, ob drei + // leere Läufe unter 450 ms bleiben. Das bestand auch mit gegenseitig gesperrten + // Agenten - und schlug unter Last fehl, weil es die Maschine mass statt der Engine. + // Jetzt ruft jeder Agent das Werkzeug wirklich auf, und bewiesen wird die Überlappung. + var tool = FakeTool.Slow(TimeSpan.FromMilliseconds(500)); + var fixture = new EngineFixture().WithTool(tool); var a = fixture.AddAgent("agent-1", "TestTool"); var b = fixture.AddAgent("agent-2", "TestTool"); var c = fixture.AddAgent("agent-3", "TestTool"); - fixture.Client.AlwaysRespondsWithText("Antwort"); + fixture.Client.RespondsContextually("TestTool"); - var sw = System.Diagnostics.Stopwatch.StartNew(); await Task.WhenAll( fixture.Engine.ChatAsync(a, "x", "test-instance", default), fixture.Engine.ChatAsync(b, "x", "test-instance", default), fixture.Engine.ChatAsync(c, "x", "test-instance", default)); - sw.Stop(); - // Seriell wären es mindestens 3 × 200 ms. Parallel deutlich weniger. - sw.Elapsed.ShouldBeLessThan(TimeSpan.FromMilliseconds(450), - "Agenten dürfen sich nicht gegenseitig blockieren"); + tool.MaxConcurrent.ShouldBeGreaterThan(1, "Agenten dürfen sich nicht gegenseitig blockieren"); } private static async Task WaitUntilAsync(Func condition, int timeoutMs = 2_000)