def test_process_message_req_view_change(message_req_service: MessageReqService, external_bus, data: ConsensusSharedData, view_change_message: ViewChange): frm = "frm" digest = view_change_digest(view_change_message) message_req = MessageReq(**{ f.MSG_TYPE.nm: VIEW_CHANGE, f.PARAMS.nm: {f.INST_ID.nm: data.inst_id, f.DIGEST.nm: digest, f.NAME.nm: frm}, }) data.view_change_votes.add_view_change(view_change_message, frm) external_bus.process_incoming(message_req, frm) assert len(external_bus.sent_messages) == 1 assert external_bus.sent_messages[0] == (MessageRep(message_req.msg_type, message_req.params, view_change_message._asdict()), [frm])
def view_change_digest(msg: ViewChange) -> str: msg_as_dict = msg._asdict() # msg_as_dict['checkpoints'] = [cp.__dict__ for cp in msg_as_dict['checkpoints']] serialized = JsonSerializer().dumps(msg_as_dict) return sha256(serialized).hexdigest()