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/MessageDeliveryDebugTest.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/MessageDeliveryDebugTest.java')
| -rw-r--r-- | src/test/java/testing/protocols/MessageDeliveryDebugTest.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/test/java/testing/protocols/MessageDeliveryDebugTest.java b/src/test/java/testing/protocols/MessageDeliveryDebugTest.java new file mode 100644 index 0000000..9f190a1 --- /dev/null +++ b/src/test/java/testing/protocols/MessageDeliveryDebugTest.java @@ -0,0 +1,71 @@ +package testing.protocols; + +import testing.*; +import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.*; + +/** + * Debug test to understand message delivery issues in headless mode. + */ +public class MessageDeliveryDebugTest { + private HeadlessSimulationRunner runner; + + @BeforeEach + public void setup() { + runner = new HeadlessSimulationRunner(); + runner.setPrintLogs(true); // Enable log printing for debugging + } + + @AfterEach + public void teardown() { + runner.shutdown(); + } + + @Test + @DisplayName("Debug message delivery in Ping-Pong protocol") + public void debugMessageDelivery() throws Exception { + System.out.println("\n=== Starting Message Delivery Debug Test ==="); + + // Run simulation with log listener to see what's happening + LogListener listener = new LogListener() { + @Override + public void onLogEntry(LogEntry entry) { + String msg = entry.getMessage(); + if (msg.contains("Message sent") || msg.contains("Message received") || + msg.contains("scheduled for delivery") || msg.contains("activated")) { + System.out.println(String.format("[DEBUG %5d] P%d: %s", + entry.getTimestamp(), entry.getProcessNum(), msg)); + } + } + }; + + SimulationResult result = runner.runSimulation( + "saved-simulations/ping-pong.dat", + 5000, + listener + ); + + System.out.println("\n=== Simulation Complete ==="); + System.out.println("Total logs captured: " + result.getAllLogs().size()); + + // Count specific log types + int sentCount = result.countLogs("Message sent"); + int receivedCount = result.countLogs("Message received"); + int activatedCount = result.countLogs("activated"); + + System.out.println("Messages sent: " + sentCount); + System.out.println("Messages received: " + receivedCount); + System.out.println("Protocols activated: " + activatedCount); + + // Print all logs for analysis + System.out.println("\n=== All Logs ==="); + for (LogEntry entry : result.getAllLogs()) { + System.out.println(String.format("[%5d] P%d: %s", + entry.getTimestamp(), entry.getProcessNum(), entry.getMessage())); + } + + // Basic assertions + assertTrue(activatedCount > 0, "At least one protocol should be activated"); + System.out.println("\n=== Test Complete ==="); + } +}
\ No newline at end of file |
