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