blob: 9f190a1f03c6cd489b3b7cfb692a9a2f4adb5d10 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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 ===");
}
}
|