From a39d04e53e9d49cc4cab5df8a5c9a1ee7490e254 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 30 Sep 2026 05:58:30 +0200 Subject: [PATCH] Ack Cut 1c tests (C#): sessions that stood in for a handshake with a hand-built Accept now handshake Co-Authored-By: Claude Sonnet 5.5 --- .../NetworkingTests.cs | 47 ++++++------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/tests/GameCult.Networking.Tests/NetworkingTests.cs b/tests/GameCult.Networking.Tests/NetworkingTests.cs index 9e060db9..b8f2169e 100644 --- a/tests/GameCult.Networking.Tests/NetworkingTests.cs +++ b/tests/GameCult.Networking.Tests/NetworkingTests.cs @@ -730,8 +730,7 @@ namespace GameCult.Networking.Tests InitialSequence = 200, ResendDelayMs = 100 }); - sender.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 7, Sequence = 1, ChannelId = "control" }); - receiver.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 7, Sequence = 2, ChannelId = "control" }); + sender.Receive(receiver.AcceptConnect(sender.CreateConnect(0), 0), 0); var first = sender.Send("schema", Encoding.UTF8.GetBytes("first"), new CultNetRudpSendOptions { Reliable = true, Ordered = true }); var second = sender.Send("schema", Encoding.UTF8.GetBytes("second"), new CultNetRudpSendOptions { Reliable = true, Ordered = true }); @@ -763,7 +762,7 @@ namespace GameCult.Networking.Tests InitialSequence = 1, ResendDelayMs = 100 }); - session.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 99, Sequence = 50, ChannelId = "control" }); + session.Receive(new CultNetRudpSession(new CultNetRudpSessionOptions { ConnectionId = 99, InitialSequence = 900 }).AcceptConnect(session.CreateConnect(0), 0), 0); var sent = session.Send("schema", Encoding.UTF8.GetBytes("payload"), new CultNetRudpSendOptions { Reliable = true, Ordered = true, NowMs = 10 }); Assert.That(session.DueResends(90), Is.Empty); @@ -788,17 +787,14 @@ namespace GameCult.Networking.Tests ConnectionId = 991, InitialSequence = 500 }); - sender.Receive(new CultNetRudpPacket - { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 991, Sequence = 400, ChannelId = "control" }); - receiver.Receive(new CultNetRudpPacket - { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 991, Sequence = 0, ChannelId = "control" }); + sender.Receive(receiver.AcceptConnect(sender.CreateConnect(0), 0), 0); var oldPacket = sender.Send( "snapshot", new byte[] { 1 }, new CultNetRudpSendOptions { Reliable = true, Ordered = true, NowMs = 0 }); receiver.Receive(oldPacket); - foreach (var sequence in Enumerable.Range(2, 40).Select(value => (uint)value)) + foreach (var sequence in Enumerable.Range(3, 40).Select(value => (uint)value)) { receiver.Receive(new CultNetRudpPacket { @@ -813,16 +809,16 @@ namespace GameCult.Networking.Tests } sender.Receive(receiver.CreateAck()); - Assert.That(sender.PendingReliableSequences.First(), Is.EqualTo(1u)); + Assert.That(sender.PendingReliableSequences.First(), Is.EqualTo(2u)); - var oldRetransmit = sender.DueResends(10).Single(packet => packet.Sequence == 1); + var oldRetransmit = sender.DueResends(10).Single(packet => packet.Sequence == 2); receiver.Receive(oldRetransmit); var exactAck = receiver.CreateAckForReceived(oldRetransmit.Sequence); Assert.That(exactAck.Ack, Is.EqualTo(oldRetransmit.Sequence)); Assert.That(exactAck.AckMask, Is.Zero); sender.Receive(exactAck); - Assert.That(sender.PendingReliableSequences, Does.Not.Contain(1u)); + Assert.That(sender.PendingReliableSequences, Does.Not.Contain(2u)); } [Test] @@ -834,13 +830,7 @@ namespace GameCult.Networking.Tests InitialSequence = 1, ResendDelayMs = 1 }); - session.Receive(new CultNetRudpPacket - { - PacketType = CultNetRudpPacketType.Accept, - ConnectionId = 100, - Sequence = 5000, - ChannelId = "control" - }); + session.Receive(new CultNetRudpSession(new CultNetRudpSessionOptions { ConnectionId = 100, InitialSequence = 900 }).AcceptConnect(session.CreateConnect(0), 0), 0); var packets = Enumerable.Range(0, CultNetRudpSession.ReliableSendWindowPackets) .Select(index => session.Send("schema", Encoding.UTF8.GetBytes(index.ToString()), new CultNetRudpSendOptions { Reliable = true, Ordered = true, NowMs = 0 })) @@ -968,13 +958,7 @@ namespace GameCult.Networking.Tests public void RudpSession_RejectsUnreliableOrderedDelivery() { var session = new CultNetRudpSession(new CultNetRudpSessionOptions { ConnectionId = 196 }); - session.Receive(new CultNetRudpPacket - { - PacketType = CultNetRudpPacketType.Accept, - ConnectionId = 196, - Sequence = 50, - ChannelId = "control" - }); + session.Receive(new CultNetRudpSession(new CultNetRudpSessionOptions { ConnectionId = 196, InitialSequence = 900 }).AcceptConnect(session.CreateConnect(0), 0), 0); var error = Assert.Throws(() => session.Send( "schema", @@ -992,7 +976,7 @@ namespace GameCult.Networking.Tests InitialSequence = 1, MaxPendingReliablePackets = 2 }); - session.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 102, Sequence = 50, ChannelId = "control" }); + session.Receive(new CultNetRudpSession(new CultNetRudpSessionOptions { ConnectionId = 102, InitialSequence = 900 }).AcceptConnect(session.CreateConnect(0), 0), 0); session.Send("schema", Encoding.UTF8.GetBytes("first"), new CultNetRudpSendOptions { Reliable = true, Ordered = true }); session.Send("schema", Encoding.UTF8.GetBytes("second"), new CultNetRudpSendOptions { Reliable = true, Ordered = true }); @@ -1007,7 +991,7 @@ namespace GameCult.Networking.Tests InitialSequence = 1, MaxPendingReliablePackets = 3 }); - fragmented.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 103, Sequence = 50, ChannelId = "control" }); + fragmented.Receive(new CultNetRudpSession(new CultNetRudpSessionOptions { ConnectionId = 103, InitialSequence = 900 }).AcceptConnect(fragmented.CreateConnect(0), 0), 0); error = Assert.Throws(() => fragmented.SendMany( @@ -1062,8 +1046,7 @@ namespace GameCult.Networking.Tests ConnectionId = 124, InitialSequence = 100 }); - sender.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 124, Sequence = 90, ChannelId = "control" }); - receiver.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 124, Sequence = 91, ChannelId = "control" }); + sender.Receive(receiver.AcceptConnect(sender.CreateConnect(0), 0), 0); var first = sender.Send("schema", Encoding.UTF8.GetBytes("first"), new CultNetRudpSendOptions { Reliable = true, Ordered = true }); var control = sender.CreateAck(); @@ -1091,8 +1074,7 @@ namespace GameCult.Networking.Tests ConnectionId = 456, InitialSequence = 100 }); - sender.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 456, Sequence = 90, ChannelId = "control" }); - receiver.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = 456, Sequence = 91, ChannelId = "control" }); + sender.Receive(receiver.AcceptConnect(sender.CreateConnect(0), 0), 0); var packets = sender.SendMany( "schema", @@ -1130,8 +1112,7 @@ namespace GameCult.Networking.Tests InitialSequence = 100, ResendDelayMs = 25 }); - sender.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = connectionId, Sequence = 0, ChannelId = "control" }); - receiver.Receive(new CultNetRudpPacket { PacketType = CultNetRudpPacketType.Accept, ConnectionId = connectionId, Sequence = 0, ChannelId = "control" }); + sender.Receive(receiver.AcceptConnect(sender.CreateConnect(0), 0), 0); var fragmentCount = CultNetRudpSession.ReliableSendWindowPackets + 17; var payload = Enumerable.Range(0, fragmentCount * 8).Select(index => (byte)(index % 251)).ToArray();