From 51261b012870e5e5afc377b94da20ab484a9b844 Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Fri, 25 Sep 2026 00:01:42 +1000 Subject: [PATCH] test(session): sample ownership after each non-owner request --- .../HighAvailability/SessionDirectoryReplicaTests.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/Jellyfin.Server.Tests/HighAvailability/SessionDirectoryReplicaTests.cs b/tests/Jellyfin.Server.Tests/HighAvailability/SessionDirectoryReplicaTests.cs index 05a67fa06a..ef0fe965d7 100644 --- a/tests/Jellyfin.Server.Tests/HighAvailability/SessionDirectoryReplicaTests.cs +++ b/tests/Jellyfin.Server.Tests/HighAvailability/SessionDirectoryReplicaTests.cs @@ -137,16 +137,20 @@ public sealed class SessionDirectoryReplicaTests : IAsyncLifetime session.AddController(controller); await replicaA.OnSessionControllerConnected(session); - for (var i = 0; i < 6; i++) + // The load balancer keeps handing the device's requests to whichever replica it likes, and the + // replica without the websocket must never take the session from the one that has it. + for (var i = 0; i < 8; i++) { await Request(replicaB, "device-roaming"); - await Request(replicaA, "device-roaming"); - await Task.Delay(300, cancellationToken); + await Task.Delay(250, cancellationToken); var entry = await _directory.GetAsync(session.Id, cancellationToken); Assert.NotNull(entry); Assert.Equal("pod-a", entry.OwnerPod); Assert.True(entry.HoldsConnection); + + await Request(replicaA, "device-roaming"); + await Task.Delay(50, cancellationToken); } var listedByA = await replicaA.GetSessions(_user.Id, null, null, null, false, cancellationToken);