diff options
| author | Paul Buetow <paul@buetow.org> | 2025-06-22 11:58:00 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-06-22 11:58:00 +0300 |
| commit | 0b5afe8839241dec66ba832cf42860ec69b87df8 (patch) | |
| tree | e100d2d6204f8c04dc33418ae9f193fa6b1a83c2 /src/test/java/testing/protocols/MessageDeliveryDebug2Test.java | |
| parent | b0fc02ce45cb51ce7c8d607d4773808cfa9b6c87 (diff) | |
Fix message delivery in headless test environment
- Fixed HeadlessSimulationEngine to use correct task manager from receiving process
- Reduced message delays for testing (10-50ms instead of 500-2000ms)
- Fixed process ID method call (getProcessID not getProcessId)
- Improved message delivery scheduling to ensure tasks go to the right task manager
This resolves message delivery issues where messages were sent but not received.
BasicMulticast test now passes, but 12 protocol tests still failing.
🤖 Generated with Claude Code
https://claude.ai/code
Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'src/test/java/testing/protocols/MessageDeliveryDebug2Test.java')
| -rw-r--r-- | src/test/java/testing/protocols/MessageDeliveryDebug2Test.java | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/test/java/testing/protocols/MessageDeliveryDebug2Test.java b/src/test/java/testing/protocols/MessageDeliveryDebug2Test.java new file mode 100644 index 0000000..abebfe0 --- /dev/null +++ b/src/test/java/testing/protocols/MessageDeliveryDebug2Test.java @@ -0,0 +1,88 @@ +package testing.protocols; + +import testing.*; +import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.*; +import java.lang.reflect.Field; +import core.VSTask; +import core.VSTaskManager; +import java.util.*; + +/** + * Extended debug test to understand why protocols are running twice. + */ +public class MessageDeliveryDebug2Test { + private HeadlessSimulationRunner runner; + + @BeforeEach + public void setup() { + runner = new HeadlessSimulationRunner(); + } + + @AfterEach + public void teardown() { + runner.shutdown(); + } + + @Test + @DisplayName("Debug why PingPong client sends two messages") + public void debugDuplicateMessages() throws Exception { + System.out.println("\n=== Starting Duplicate Message Debug Test ==="); + + // Custom log listener to trace task execution + LogListener listener = new LogListener() { + private int messagesSent = 0; + + @Override + public void onLogEntry(LogEntry entry) { + String msg = entry.getMessage(); + + // Track all events + if (msg.contains("activated") || msg.contains("Message sent") || + msg.contains("onClientStart") || msg.contains("counter=")) { + System.out.println(String.format("[TRACE %5d] P%d: %s", + entry.getTimestamp(), entry.getProcessNum(), msg)); + + if (msg.contains("Message sent")) { + messagesSent++; + if (messagesSent == 2) { + System.out.println("!!! ISSUE: Second message sent immediately at time " + + entry.getTimestamp() + " - protocol likely executed twice!"); + } + } + } + + // Look for protocol event execution + if (msg.contains("VSProtocolEvent") || msg.contains("VSPingPongProtocol")) { + System.out.println(String.format("[EVENT %5d] P%d: %s", + entry.getTimestamp(), entry.getProcessNum(), msg)); + } + } + }; + + SimulationResult result = runner.runSimulation( + "saved-simulations/ping-pong.dat", + 1000, // Just 1 second is enough to see the issue + listener + ); + + System.out.println("\n=== Analysis ==="); + + // Count messages sent at time 0 + int messagesAtTimeZero = 0; + for (LogEntry entry : result.getAllLogs()) { + if (entry.getTimestamp() == 0 && entry.getMessage().contains("Message sent")) { + messagesAtTimeZero++; + System.out.println("Message at time 0: " + entry.getMessage()); + } + } + + System.out.println("\nMessages sent at time 0: " + messagesAtTimeZero); + + if (messagesAtTimeZero > 1) { + System.out.println("ERROR: Multiple messages sent at time 0 indicates duplicate protocol execution!"); + } + + System.out.println("\n=== Test Complete ==="); + } +}
\ No newline at end of file |
