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)