summaryrefslogtreecommitdiff
path: root/src/test/java/testing/protocols/MessageDeliveryDebug4Test.java
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");
    }
}