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 <noreply@anthropic.com>
This commit is contained in:
parent
45f98c5638
commit
a39d04e53e
1 changed files with 14 additions and 33 deletions
|
|
@ -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<InvalidOperationException>(() =>
|
||||
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<InvalidOperationException>(() =>
|
||||
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();
|
||||
|
|
|
|||
Loading…
Reference in a new issue