diff --git a/test/hbbft_SUITE.erl b/test/hbbft_SUITE.erl index 870e194..e963b88 100644 --- a/test/hbbft_SUITE.erl +++ b/test/hbbft_SUITE.erl @@ -624,8 +624,21 @@ merge_replies(N, NewReplies, Replies) -> case lists:keyfind(N, 1, NewReplies) of false -> merge_replies(N - 1, lists:keydelete(N, 1, NewReplies), Replies); - {N, ok} -> + {N, {result, _}} -> merge_replies(N - 1, lists:keydelete(N, 1, NewReplies), Replies); + {N, {result_and_send, _, {send, ToSend}}} -> + NewSend = + case lists:keyfind(N, 1, Replies) of + false -> + {N, {send, ToSend}}; + {N, OldSend} -> + {N, {send, OldSend ++ ToSend}} + end, + merge_replies( + N - 1, + lists:keydelete(N, 1, NewReplies), + lists:keystore(N, 1, Replies, NewSend) + ); {N, {send, ToSend}} -> NewSend = case lists:keyfind(N, 1, Replies) of diff --git a/test/hbbft_handler.erl b/test/hbbft_handler.erl index 85cd4ce..6016519 100644 --- a/test/hbbft_handler.erl +++ b/test/hbbft_handler.erl @@ -29,11 +29,11 @@ init(HBBFTArgs) -> handle_command({txn, Txn}, State) -> case hbbft:input(State#state.hbbft, Txn) of - {HBBFT, ok} -> + {HBBFT, {result, _}} -> {reply, ok, [], State#state{hbbft=HBBFT}}; {_HBBFT, full} -> {reply, {error, full}, ignore}; - {HBBFT, {send, ToSend}} -> + {HBBFT, {result_and_send, _, {send, ToSend}}} -> {reply, ok, fixup_msgs(ToSend), State#state{hbbft=HBBFT}} end; handle_command({finalize_round, Txns, TempBlock}, State) -> diff --git a/test/hbbft_test_utils.erl b/test/hbbft_test_utils.erl index d65dadb..40a7306 100644 --- a/test/hbbft_test_utils.erl +++ b/test/hbbft_test_utils.erl @@ -70,8 +70,16 @@ merge_replies(N, NewReplies, Replies) -> case lists:keyfind(N, 1, NewReplies) of false -> merge_replies(N-1, lists:keydelete(N, 1, NewReplies), Replies); - {N, ok} -> + {N, {result, _}} -> merge_replies(N-1, lists:keydelete(N, 1, NewReplies), Replies); + {N, {result_and_send, _, {send, ToSend}}} -> + NewSend = case lists:keyfind(N, 1, Replies) of + false -> + {N, {send, ToSend}}; + {N, OldSend} -> + {N, {send, OldSend ++ ToSend}} + end, + merge_replies(N-1, lists:keydelete(N, 1, NewReplies), lists:keystore(N, 1, Replies, NewSend)); {N, {send, ToSend}} -> NewSend = case lists:keyfind(N, 1, Replies) of false -> diff --git a/test/hbbft_worker.erl b/test/hbbft_worker.erl index 6e4eb0f..352cf55 100644 --- a/test/hbbft_worker.erl +++ b/test/hbbft_worker.erl @@ -166,6 +166,9 @@ handle_info(Msg, State) -> ct:log("unhandled msg ~p~n", [Msg]), {noreply, State}. +dispatch({NewHBBFT, {result_and_send, _, {send, ToSend}}}, State) -> + do_send(ToSend, State), + State#state{hbbft=maybe_serialize_HBBFT(NewHBBFT, State#state.to_serialize)}; dispatch({NewHBBFT, {send, ToSend}}, State) -> do_send(ToSend, State), State#state{hbbft=maybe_serialize_HBBFT(NewHBBFT, State#state.to_serialize)};