Make the Rust suite green and stop silently ignoring packages
exact_reliable_acks_clear_more_than_one_ack_window_of_fragments has been failing on main. It was not a defect: send_many returned 32 packets where the test expected 40, and 32 is exactly CULTNET_RUDP_RELIABLE_SEND_WINDOW_PACKETS. The reliable send window landed and this test kept asserting the pre-window behaviour, so a test whose name is about crossing an ack window had stopped crossing one. It now asserts that a window's worth leaves immediately, that the remaining eight fragments queue, and that acknowledgements promote them until every fragment is delivered -- the same loop packages/cultnet-rs/tests /cultnet.rs already uses for this contract. All three Rust crates are green: 46, 95 and 7. The NuGet packages rule hides every language package until one is named in the re-include list, and cultmath, cultmesh-browser and cultmesh-kotlin were never added. Nothing is currently lost -- every source file in them is tracked -- but any new file added to those three would have been dropped in silence. cultmesh-rs hit this on the way in. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
62ac7e3483
commit
4c0dc07ba5
2 changed files with 28 additions and 5 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -309,6 +309,12 @@ node_modules/
|
|||
!packages/cultnet-rs/**
|
||||
!packages/cultmesh-rs/
|
||||
!packages/cultmesh-rs/**
|
||||
!packages/cultmath/
|
||||
!packages/cultmath/**
|
||||
!packages/cultmesh-browser/
|
||||
!packages/cultmesh-browser/**
|
||||
!packages/cultmesh-kotlin/
|
||||
!packages/cultmesh-kotlin/**
|
||||
packages/**/node_modules/
|
||||
packages/**/dist/
|
||||
packages/**/dist-test/
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
use std::collections::VecDeque;
|
||||
use std::net::UdpSocket;
|
||||
use std::time::Duration;
|
||||
|
||||
|
|
@ -317,16 +318,32 @@ fn exact_reliable_acks_clear_more_than_one_ack_window_of_fragments() -> Result<(
|
|||
},
|
||||
Some(1),
|
||||
)?;
|
||||
assert_eq!(packets.len(), 40);
|
||||
// Forty one-byte fragments cannot leave inside one reliable send window. The
|
||||
// window's worth goes out now and the rest queue until acknowledgements free
|
||||
// space, which is the crossing this test exists to prove.
|
||||
assert_eq!(packets.len(), CULTNET_RUDP_RELIABLE_SEND_WINDOW_PACKETS);
|
||||
assert_eq!(
|
||||
sender.queued_reliable_packet_count(),
|
||||
40 - CULTNET_RUDP_RELIABLE_SEND_WINDOW_PACKETS
|
||||
);
|
||||
|
||||
let mut wire = VecDeque::from(packets);
|
||||
let mut delivered = Vec::new();
|
||||
for packet in &packets {
|
||||
let result = receiver.receive(packet, 2)?;
|
||||
delivered.extend(result.delivered);
|
||||
sender.receive(&receiver.create_ack_for(packet.sequence), 3)?;
|
||||
while !wire.is_empty() {
|
||||
let admitted = wire.len();
|
||||
for _ in 0..admitted {
|
||||
let packet = wire.pop_front().expect("admitted packet remains queued");
|
||||
let received = receiver.receive(&packet, 2)?;
|
||||
delivered.extend(received.delivered);
|
||||
}
|
||||
let acknowledged = sender.receive(&receiver.create_ack(), 3)?;
|
||||
wire.extend(acknowledged.ready_to_send);
|
||||
}
|
||||
|
||||
assert_eq!(delivered.len(), 1);
|
||||
assert_eq!(delivered[0].payload, vec![0x5a; 40]);
|
||||
assert!(sender.pending_reliable_sequences().is_empty());
|
||||
assert_eq!(sender.outstanding_reliable_packet_count(), 0);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue