blob: 719bb37aa13124d41af1cd49d589665527edfe35 (
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
|
package testing.protocols;
import testing.*;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* Test with longer timeout to ensure all messages are delivered.
*/
public class MessageDeliveryDebug4Test {
private HeadlessSimulationRunner runner;
@BeforeEach
public void setup() {
runner = new HeadlessSimulationRunner();
}
@Test
@DisplayName("Test counter values with extended timeout")
public void testCounterValues() throws Exception {
System.out.println("\n=== Testing Counter Values ===");
// Run for 10 seconds to ensure all messages are exchanged
SimulationResult result = runner.runSimulation(
"saved-simulations/ping-pong.dat",
10000
);
System.out.println("\n=== Counter Analysis ===");
// Look for all counter values
int maxClientCounter = 0;
int maxServerCounter = 0;
for (LogEntry entry : result.getAllLogs()) {
String msg = entry.getMessage();
if (msg.contains("counter=")) {
int start = msg.indexOf("counter=") + 8;
int end = msg.indexOf(";", start);
if (end == -1) end = msg.indexOf(" ", start);
if (end == -1) end = msg.length();
try {
int counter = Integer.parseInt(msg.substring(start, end));
System.out.println("Found counter=" + counter + " at time " + entry.getTimestamp());
if (msg.contains("fromClient=true")) {
maxClientCounter = Math.max(maxClientCounter, counter);
} else if (msg.contains("fromServer=true")) {
maxServerCounter = Math.max(maxServerCounter, counter);
}
} catch (NumberFormatException e) {
// Ignore
}
}
}
System.out.println("\nMax client counter: " + maxClientCounter);
System.out.println("Max server counter: " + maxServerCounter);
// Count messages
int sentCount = result.countLogs("Message sent");
int receivedCount = result.countLogs("Message received");
System.out.println("\nTotal messages sent: " + sentCount);
System.out.println("Total messages received: " + receivedCount);
// Print timeline
System.out.println("\n=== Message Timeline ===");
for (LogEntry entry : result.getAllLogs()) {
String msg = entry.getMessage();
if (msg.contains("Message sent") || msg.contains("Message received") ||
msg.contains("activated")) {
System.out.println(String.format("[%5d] P%d: %s",
entry.getTimestamp(), entry.getProcessNum(),
msg.substring(msg.indexOf(";") + 2))); // Skip PID part
}
}
assertTrue(maxClientCounter >= 2, "Client should reach at least counter=2");
assertTrue(maxServerCounter >= 1, "Server should reach at least counter=1");
}
}
|