summaryrefslogtreecommitdiff
path: root/src/main/java/testing/ProtocolVerifier.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-06-22 11:58:00 +0300
committerPaul Buetow <paul@buetow.org>2025-06-22 11:58:00 +0300
commit0b5afe8839241dec66ba832cf42860ec69b87df8 (patch)
treee100d2d6204f8c04dc33418ae9f193fa6b1a83c2 /src/main/java/testing/ProtocolVerifier.java
parentb0fc02ce45cb51ce7c8d607d4773808cfa9b6c87 (diff)
Fix message delivery in headless test environment
- Fixed HeadlessSimulationEngine to use correct task manager from receiving process - Reduced message delays for testing (10-50ms instead of 500-2000ms) - Fixed process ID method call (getProcessID not getProcessId) - Improved message delivery scheduling to ensure tasks go to the right task manager This resolves message delivery issues where messages were sent but not received. BasicMulticast test now passes, but 12 protocol tests still failing. 🤖 Generated with Claude Code https://claude.ai/code Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'src/main/java/testing/ProtocolVerifier.java')
-rw-r--r--src/main/java/testing/ProtocolVerifier.java65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/main/java/testing/ProtocolVerifier.java b/src/main/java/testing/ProtocolVerifier.java
index 19ed1f2..e5338d4 100644
--- a/src/main/java/testing/ProtocolVerifier.java
+++ b/src/main/java/testing/ProtocolVerifier.java
@@ -80,6 +80,29 @@ public class ProtocolVerifier {
}
/**
+ * Expect at least n messages to be sent during the simulation.
+ */
+ public ProtocolVerifier expectAtLeastNMessages(int minMessages) {
+ rules.add(new MessageCountRule(minMessages, Integer.MAX_VALUE));
+ return this;
+ }
+
+ /**
+ * Expect exactly n messages to be sent during the simulation.
+ */
+ public ProtocolVerifier expectExactlyNMessages(int count) {
+ rules.add(new MessageCountRule(count, count));
+ return this;
+ }
+
+ /**
+ * Expect messages to be sent (at least 1).
+ */
+ public ProtocolVerifier expectMessages() {
+ return expectAtLeastNMessages(1);
+ }
+
+ /**
* Verify all rules against the provided logs.
*/
public VerificationResult verify(List<LogEntry> logs) {
@@ -240,4 +263,46 @@ public class ProtocolVerifier {
return new RuleResult(passed, message, matches);
}
}
+
+ /**
+ * Rule that verifies message count.
+ */
+ private static class MessageCountRule implements VerificationRule {
+ private final int minCount;
+ private final int maxCount;
+ private final String description;
+
+ public MessageCountRule(int minCount, int maxCount) {
+ this.minCount = minCount;
+ this.maxCount = maxCount;
+ this.description = String.format(
+ "Message count should be %s",
+ minCount == maxCount ?
+ String.valueOf(minCount) :
+ minCount + "-" + (maxCount == Integer.MAX_VALUE ? "∞" : maxCount)
+ );
+ }
+
+ @Override
+ public RuleResult verify(List<LogEntry> logs) {
+ int messageCount = 0;
+ List<LogEntry> messageLogs = new ArrayList<>();
+
+ // Count all "Message sent" logs
+ for (LogEntry log : logs) {
+ if (log.getMessage().contains("Message sent")) {
+ messageCount++;
+ messageLogs.add(log);
+ }
+ }
+
+ boolean passed = messageCount >= minCount && messageCount <= maxCount;
+ String message = String.format(
+ "%s (found %d messages)",
+ description, messageCount
+ );
+
+ return new RuleResult(passed, message, messageLogs);
+ }
+ }
} \ No newline at end of file