acdream/tests/AcDream.Core.Net.Tests/Packets
Erik 6cda431eae feat(net): PacketCodec.Encode — full outbound datagram assembly
Completes the encode side of the codec so acdream can stop hand-
assembling outbound packets in tests. Given a PacketHeader (with Flags
set, DataSize ignored/overwritten) and a body byte span, Encode:

  1. Overwrites header.DataSize with body.Length
  2. Parses the optional section out of the body (reusing
     PacketHeaderOptional.Parse as a length measurer) and hashes those bytes
  3. If BlobFragments is set, walks the body tail as back-to-back
     fragments and sums their Hash32s
  4. For unencrypted: header.Checksum = headerHash + optionalHash + fragmentHash
  5. For EncryptedChecksum: pulls one ISAAC keystream word and computes
     header.Checksum = headerHash + (isaacKey XOR payloadHash)
  6. Packs header + body into the final datagram

Tests (6 new, 67 total in net project, 144 across both test projects):
  - Unencrypted round-trip: Encode then TryDecode recovers the AckSequence
    field
  - DataSize is overwritten (caller can pass garbage)
  - Encrypted round-trip: two ISAACs with same seed, one encoding and
    one decoding, both agree on the keystream word
  - Encrypted but no ISAAC → throws InvalidOperationException
  - LoginRequest end-to-end: LoginRequest.Build → Encode → TryDecode →
    LoginRequest.Parse round-trips credentials exactly. This is the
    single most important integration test for the outbound side —
    every byte this exercises is exactly what acdream will put on the
    wire when Phase 4.6 goes live.
  - BlobFragments body with one embedded fragment: Encode preserves
    the fragment and fragmentHash is correctly folded into the checksum

Codec is now complete end-to-end (decode + encode) and has the
LoginRequest outbound path proven against its own decoder. The next
commit will wire NetClient over real UDP sockets and connect to the
localhost ACE server.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 14:38:14 +02:00
..
FragmentAssemblerTests.cs feat(net): message fragment header + fragment + assembler (Phase 4.3) 2026-04-11 14:20:53 +02:00
LoginRequestTests.cs feat(net): PacketWriter + LoginRequest payload builder (Phase 4.5a/b) 2026-04-11 14:36:39 +02:00
MessageFragmentHeaderTests.cs feat(net): message fragment header + fragment + assembler (Phase 4.3) 2026-04-11 14:20:53 +02:00
MessageFragmentTests.cs feat(net): message fragment header + fragment + assembler (Phase 4.3) 2026-04-11 14:20:53 +02:00
PacketCodecEncodeTests.cs feat(net): PacketCodec.Encode — full outbound datagram assembly 2026-04-11 14:38:14 +02:00
PacketCodecTests.cs feat(net): PacketHeaderOptional + full packet decode + CRC verify (Phase 4.4) 2026-04-11 14:24:29 +02:00
PacketHeaderTests.cs feat(net): PacketHeader + PacketHeaderFlags + Hash32 checksum (Phase 4.2) 2026-04-11 14:17:37 +02:00
PacketWriterTests.cs feat(net): PacketWriter + LoginRequest payload builder (Phase 4.5a/b) 2026-04-11 14:36:39 +02:00