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