def test_learner_receives_quorum_of_accepteds(self): self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='A'), self.channel) self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='B'), self.channel) self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='C'), self.channel) self.assertTrue(type(self.channel.unicast_messages[0]) is Request) self.assertTrue(type(self.channel.unicast_messages[1]) is Response)
def test_node_receives_higher_proposals(self): self.assertEqual(self.state.read(Node.PROPOSED), Proposal(None, 0)) self.role.receive(Prepare.create(proposal=Proposal('A', 1)), self.channel) self.assertEqual(self.state.read(Node.PROPOSED), Proposal('A', 2)) self.role.receive(Promise.create(proposal=Proposal('A', 3)), self.channel) self.assertEqual(self.state.read(Node.PROPOSED), Proposal('A', 4)) self.role.receive(Accept.create(proposal=Proposal('A', 5)), self.channel) self.assertEqual(self.state.read(Node.PROPOSED), Proposal('A', 6)) self.role.receive(Accepted.create(proposal=Proposal('A', 7)), self.channel) self.assertEqual(self.state.read(Node.PROPOSED), Proposal('A', 8))
def test_learner_ignores_duplicate_accepteds(self): self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='A'), self.channel) self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='A'), self.channel) self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='A'), self.channel) self.assertFalse(self.channel.unicast_messages)
def test_learner_receives_quorum_of_accepteds_causes_proposal_to_increment(self): self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='A'), self.channel) self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='B'), self.channel) self.role.receive(Accepted.create(proposal=Proposal('A', 1), sender='C'), self.channel) self.assertTrue(self.state.read(Role.PROPOSED), Proposal('A', 2))