summaryrefslogtreecommitdiff
path: root/src/test/java/testing/protocols/ReliableMulticastProtocolTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/testing/protocols/ReliableMulticastProtocolTest.java')
-rw-r--r--src/test/java/testing/protocols/ReliableMulticastProtocolTest.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/test/java/testing/protocols/ReliableMulticastProtocolTest.java b/src/test/java/testing/protocols/ReliableMulticastProtocolTest.java
new file mode 100644
index 0000000..ae9b4d7
--- /dev/null
+++ b/src/test/java/testing/protocols/ReliableMulticastProtocolTest.java
@@ -0,0 +1,86 @@
+package testing.protocols;
+
+import testing.*;
+import org.junit.jupiter.api.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * JUnit test for Reliable Multicast protocol.
+ */
+@DisplayName("Reliable Multicast Protocol Tests")
+public class ReliableMulticastProtocolTest {
+ private HeadlessSimulationRunner runner;
+
+ @BeforeEach
+ public void setup() {
+ runner = new HeadlessSimulationRunner();
+ }
+
+ @AfterEach
+ public void teardown() {
+ runner.shutdown();
+ }
+
+ @Test
+ @DisplayName("Test Reliable Multicast protocol activation")
+ public void testProtocolActivation() throws Exception {
+ SimulationResult result = runner.runSimulation(
+ "saved-simulations/reliable-multicast.dat",
+ 1000
+ );
+
+ ProtocolVerifier verifier = new ProtocolVerifier()
+ .expectLog("Reliable Multicast.*activated")
+ .expectNoLog("ERROR");
+
+ VerificationResult verification = verifier.verify(result.getAllLogs());
+ assertTrue(verification.passed(), verification.getFailureMessage());
+ }
+
+ @Test
+ @DisplayName("Test reliable delivery guarantees")
+ public void testReliableDelivery() throws Exception {
+ SimulationResult result = runner.runSimulation(
+ "saved-simulations/reliable-multicast.dat",
+ 5000
+ );
+
+ // Reliable multicast should ensure delivery
+ ProtocolVerifier verifier = new ProtocolVerifier()
+ .expectLog("Message sent")
+ .expectLog("Message received")
+ .expectLog("Multicast|multicast")
+ .expectNoLog("lost|Lost|LOST")
+ .expectNoLog("failed delivery");
+
+ VerificationResult verification = verifier.verify(result.getAllLogs());
+ assertTrue(verification.passed(), verification.getFailureMessage());
+
+ // Check for acknowledgments or reliability mechanisms
+ boolean hasAck = result.countLogs("ack|ACK|acknowledge|Acknowledge") > 0;
+ boolean hasSeq = result.countLogs("sequence|Sequence|seq|SEQ") > 0;
+ boolean hasReliable = result.countLogs("reliable|Reliable") > 0;
+
+ assertTrue(hasAck || hasSeq || hasReliable,
+ "Should have reliability mechanisms");
+ }
+
+ @Test
+ @DisplayName("Test message ordering in reliable multicast")
+ public void testMessageOrdering() throws Exception {
+ SimulationResult result = runner.runSimulation(
+ "saved-simulations/reliable-multicast.dat",
+ 3000
+ );
+
+ // Verify messages maintain order
+ var messages = result.findAll("Message received");
+
+ long lastTime = -1;
+ for (LogEntry entry : messages) {
+ assertTrue(entry.getTimestamp() >= lastTime,
+ "Messages should be in order");
+ lastTime = entry.getTimestamp();
+ }
+ }
+} \ No newline at end of file