feat(core): TCP in the simulation core
engine.ts ports Swift's "Java-compatible TCP sockets" in one piece, since half a state machine could not be checked: server and client sockets (a free port from Java's random numbers on their own seed), the three-way handshake with its result (connected, invalid socket, unreachable, timed out), segments of 1460 bytes, messages up to the push, a timeout of 3 × 2.5 s with at most three attempts, closing through every Java state including TIME_WAIT (2.5 s), sequence numbers modulo 2^32. Three scenarios match the Swift engine trace for trace: a LAN with data over three segments, closing from both ends, a closed port and an unreachable host; two networks through a router with a firewall rule, data lost until the connection closes, and an accepted socket that does not hold the port of its closed listener; CLOSING, reached by a lost FIN. The engine delivers a FIN within the same close, so both ends close at once only with packet loss; an empty message does not arrive in Swift (it does not advance the sequence number), nor here. Swift's four TCP engine tests are ported, with tests for stopping, a foreign SYN+ACK at a listener and the flag names. 17 mutation probes, 16 caught; the other (delivered, not waited, not connected gives unreachable) cannot be reached through Swift's engine, which never sends a reset and always acknowledges correctly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -96,40 +96,52 @@
|
||||
"localIp" : null,
|
||||
"localPort" : 5000,
|
||||
"node" : "00000000-0000-0000-0000-000000000203",
|
||||
"parent" : null,
|
||||
"protocol" : "udp",
|
||||
"queued" : 0,
|
||||
"remoteIp" : "10.0.0.2",
|
||||
"remotePort" : 54899
|
||||
"remotePort" : 54899,
|
||||
"session" : null,
|
||||
"tcpState" : null
|
||||
},
|
||||
{
|
||||
"id" : "00000000-0000-0000-0000-000000000002",
|
||||
"localIp" : null,
|
||||
"localPort" : 5001,
|
||||
"node" : "00000000-0000-0000-0000-000000000203",
|
||||
"parent" : null,
|
||||
"protocol" : "udp",
|
||||
"queued" : 0,
|
||||
"remoteIp" : null,
|
||||
"remotePort" : null
|
||||
"remotePort" : null,
|
||||
"session" : null,
|
||||
"tcpState" : null
|
||||
},
|
||||
{
|
||||
"id" : "00000000-0000-0000-0000-000000000003",
|
||||
"localIp" : null,
|
||||
"localPort" : 54899,
|
||||
"node" : "00000000-0000-0000-0000-000000000201",
|
||||
"parent" : null,
|
||||
"protocol" : "udp",
|
||||
"queued" : 0,
|
||||
"remoteIp" : "20.0.0.2",
|
||||
"remotePort" : 5000
|
||||
"remotePort" : 5000,
|
||||
"session" : null,
|
||||
"tcpState" : null
|
||||
},
|
||||
{
|
||||
"id" : "00000000-0000-0000-0000-000000000004",
|
||||
"localIp" : null,
|
||||
"localPort" : 5000,
|
||||
"node" : "00000000-0000-0000-0000-000000000202",
|
||||
"parent" : null,
|
||||
"protocol" : "udp",
|
||||
"queued" : 0,
|
||||
"remoteIp" : "10.0.0.2",
|
||||
"remotePort" : 54899
|
||||
"remotePort" : 54899,
|
||||
"session" : null,
|
||||
"tcpState" : null
|
||||
}
|
||||
],
|
||||
"switchTables" : {
|
||||
|
||||
Reference in New Issue
Block a user