Skip to content

Commit b51dc44

Browse files
committed
Additional mutation
1 parent 7e645a3 commit b51dc44

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

simulator/src/main/java/byzzbench/simulator/protocols/hbft/mutator/ViewChangeMessageFactory.java

+33
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,39 @@ public void accept(FaultContext serializable) {
435435
}
436436
}
437437

438+
}
439+
},
440+
new MessageMutationFault("hbft-view-change-first-req-in-R", "Change first request in R", List.of(ViewChangeMessage.class)) {
441+
@Override
442+
public void accept(FaultContext serializable) {
443+
Optional<Event> event = serializable.getEvent();
444+
if (event.isEmpty()) {
445+
throw invalidMessageTypeException;
446+
}
447+
if (!(event.get() instanceof MessageEvent messageEvent)) {
448+
throw invalidMessageTypeException;
449+
}
450+
if (!(messageEvent.getPayload() instanceof ViewChangeMessage message)) {
451+
throw invalidMessageTypeException;
452+
}
453+
String senderId = messageEvent.getSenderId();
454+
Replica sender = serializable.getScenario().getReplicas().get(senderId);
455+
SortedMap<Long, RequestMessage> requests = message.getRequestsR();
456+
Entry<Long, RequestMessage> firstReq = requests.firstEntry();
457+
if (sender instanceof HbftJavaReplica replica) {
458+
SortedMap<Long, RequestMessage> specRequests = replica.getSpeculativeRequests();
459+
for (Long key : specRequests.keySet()) {
460+
if (!specRequests.get(key).equals(firstReq.getValue())) {
461+
requests.remove(firstReq.getKey());
462+
requests.put(firstReq.getKey(), specRequests.get(key));
463+
ViewChangeMessage mutatedMessage = message.withRequestsR(requests);
464+
mutatedMessage.sign(message.getSignedBy());
465+
messageEvent.setPayload(mutatedMessage);
466+
break;
467+
}
468+
}
469+
}
470+
438471
}
439472
}
440473
//TODO: be able to change the first or last request

0 commit comments

Comments
 (0)