def create_new_view_from_vc(vc, validators, checkpoint=None, batches=None): vc_digest = view_change_digest(vc) vcs = [(node_name, vc_digest) for node_name in validators] checkpoint = checkpoint or vc.checkpoints[0] batches = batches or vc.prepared return NewView(vc.viewNo, sorted(vcs, key=itemgetter(0)), checkpoint, batches)
def test_view_change_digest_is_256_bit_hexdigest(random): digest = view_change_digest( create_view_change(initial_view_no=0, stable_cp=random.integer(0, 10000), batches=create_batches(view_no=0))) assert isinstance(digest, str) assert len(digest) == 64 assert all(v in string.hexdigits for v in digest)
def _view_change_acks(vc, vc_frm, primary, count): digest = view_change_digest(vc) non_senders = [ name for name in validators if name not in [vc_frm, primary] ] ack_frms = random.sample(non_senders, count) return [(ViewChangeAck(viewNo=vc.viewNo, name=vc_frm, digest=digest), ack_frm) for ack_frm in ack_frms]
def test_different_view_change_messages_have_different_digests(random): batches = create_batches(view_no=0) assert view_change_digest(create_view_change(initial_view_no=0, stable_cp=100, batches=batches)) != \ view_change_digest(create_view_change(initial_view_no=1, stable_cp=100, batches=batches)) assert view_change_digest(create_view_change(initial_view_no=1, stable_cp=100, batches=batches)) != \ view_change_digest(create_view_change(initial_view_no=1, stable_cp=101, batches=batches)) assert view_change_digest( create_view_change(initial_view_no=1, stable_cp=100, batches=create_batches(view_no=0))) != \ view_change_digest(create_view_change(initial_view_no=1, stable_cp=100, batches=create_batches(view_no=1))) assert view_change_digest(create_view_change(initial_view_no=0, stable_cp=100, batches=batches)) == \ view_change_digest(create_view_change(initial_view_no=0, stable_cp=100, batches=batches))
def test_non_primary_responds_to_view_change_message_with_view_change_ack_to_new_primary( some_item, other_item, validators, primary, view_change_service, initial_view_no, view_change_message): next_view_no = initial_view_no + 1 non_primary_name = some_item(validators, exclude=[primary(next_view_no)]) service = view_change_service(non_primary_name) service.start_view_change() service._network.sent_messages.clear() vc = view_change_message(next_view_no) frm = other_item(validators, exclude=[non_primary_name]) service._network.process_incoming(vc, frm) assert len(service._network.sent_messages) == 1 msg, dst = service._network.sent_messages[0] assert dst == service._data.primary_name assert isinstance(msg, ViewChangeAck) assert msg.viewNo == vc.viewNo assert msg.name == frm assert msg.digest == view_change_digest(vc)
def create_view_change_acks(vc, vc_frm, senders): digest = view_change_digest(vc) senders = [name for name in senders if name != vc_frm] return [(ViewChangeAck(viewNo=vc.viewNo, name=vc_frm, digest=digest), ack_frm) for ack_frm in senders]
def test_different_view_change_messages_have_different_digests( view_change_message, random): vc = view_change_message(random.integer(0, 10000)) other_vc = view_change_message(random.integer(0, 10000)) assert view_change_digest(vc) != view_change_digest(other_vc)
def test_view_change_digest_is_256_bit_hexdigest(view_change_message, random): vc = view_change_message(random.integer(0, 10000)) digest = view_change_digest(vc) assert isinstance(digest, str) assert len(digest) == 64 assert all(v in string.hexdigits for v in digest)