blob: 3e41a05fd347c68d665aef4ff83eb92513f295a9 (
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package testing.protocols;
import testing.*;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* Deep debug test to understand why messages aren't being received.
*/
public class MessageDeliveryDebug3Test {
private HeadlessSimulationRunner runner;
@BeforeEach
public void setup() {
runner = new HeadlessSimulationRunner();
runner.setPrintLogs(true);
}
@AfterEach
public void teardown() {
runner.shutdown();
}
@Test
@DisplayName("Debug message delivery with detailed logging")
public void debugMessageDelivery() throws Exception {
System.out.println("\n=== Starting Message Delivery Deep Debug ===");
// Run for longer to see if messages eventually get delivered
SimulationResult result = runner.runSimulation(
"saved-simulations/ping-pong.dat",
10000 // 10 seconds
);
System.out.println("\n=== Analysis ===");
// Count message types
int sentCount = 0;
int receivedCount = 0;
int scheduledCount = 0;
for (LogEntry entry : result.getAllLogs()) {
String msg = entry.getMessage();
if (msg.contains("Message sent")) {
sentCount++;
System.out.println("SENT at " + entry.getTimestamp() + ": " + msg);
} else if (msg.contains("Message received")) {
receivedCount++;
System.out.println("RECEIVED at " + entry.getTimestamp() + ": " + msg);
} else if (msg.contains("scheduled for delivery")) {
scheduledCount++;
System.out.println("SCHEDULED: " + msg);
}
}
System.out.println("\nTotal messages sent: " + sentCount);
System.out.println("Total messages received: " + receivedCount);
System.out.println("Total messages scheduled: " + scheduledCount);
// Check if we're getting any server/client activity
boolean hasServerActivity = false;
boolean hasClientActivity = false;
for (LogEntry entry : result.getAllLogs()) {
String msg = entry.getMessage();
if (msg.contains("Server") && msg.contains("activated")) {
hasServerActivity = true;
}
if (msg.contains("Client") && msg.contains("activated")) {
hasClientActivity = true;
}
}
System.out.println("\nServer activated: " + hasServerActivity);
System.out.println("Client activated: " + hasClientActivity);
// Print all logs for full context
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()));
}
assertTrue(sentCount > 0, "Should have sent at least one message");
assertTrue(receivedCount > 0, "Should have received at least one message");
}
}
|