diff options
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 |
