def test_proposerReceivePromise_allNACK(self): nacc = {'proposalID': None, 'value': None, 'type': "NACK"} nacc1 = {'proposalID': None, 'value': None, 'type': "NACK"} nacc2 = {'proposalID': None, 'value': None, 'type': "NACK"} proposer.receivePromise(nacc) proposer.receivePromise(nacc1) self.assertEqual("RESTART", proposer.receivePromise(nacc2))
def test_proposerReceivePromise_allACK_withValue(self): acc = {'proposalID': 9, 'value': "BestestePost", 'type': "ACK"} acc2 = {'proposalID': 2, 'value': "blogtest", 'type': "ACK"} acc3 = {'proposalID': 5, 'value': "bestPost", 'type': "ACK"} proposer.receivePromise(acc) proposer.receivePromise(acc2) self.assertEqual(acc['value'], proposer.receivePromise(acc3)['value'])
def test_proposerReceivePromise_allNACK(self): nacc = {'proposalID' : None, 'value' : None, 'type' : "NACK"} nacc1 = {'proposalID' : None, 'value' : None, 'type' : "NACK"} nacc2 = {'proposalID' : None, 'value' : None, 'type' : "NACK"} proposer.receivePromise(nacc) proposer.receivePromise(nacc1) self.assertEqual("RESTART", proposer.receivePromise(nacc2))
def test_proposerReceivePromise_allACK_withValue(self): acc = {'proposalID' : 9, 'value' : "BestestePost", 'type' : "ACK"} acc2 = {'proposalID' : 2, 'value' : "blogtest", 'type' : "ACK"} acc3 = {'proposalID' : 5, 'value' : "bestPost", 'type' : "ACK"} proposer.receivePromise(acc) proposer.receivePromise(acc2) self.assertEqual(acc['value'], proposer.receivePromise(acc3)['value'])
def test_proposerReceivePromise_allACK_withoutValue(self): proposer.proposalID = 34 acc1 = {'proposalID' : None, 'value' : None, 'type' : "ACK"} acc2 = {'proposalID' : None, 'value' : None, 'type' : "ACK"} acc3 = {'proposalID' : None, 'value' : None, 'type' : "ACK"} proposer.receivePromise(acc1) proposer.receivePromise(acc2) self.assertEqual(proposer.proposalID, proposer.receivePromise(acc3)['proposalID'])
def test_proposerReceivePromise_allACK_withoutValue(self): proposer.proposalID = 34 acc1 = {'proposalID': None, 'value': None, 'type': "ACK"} acc2 = {'proposalID': None, 'value': None, 'type': "ACK"} acc3 = {'proposalID': None, 'value': None, 'type': "ACK"} proposer.receivePromise(acc1) proposer.receivePromise(acc2) self.assertEqual(proposer.proposalID, proposer.receivePromise(acc3)['proposalID'])
def test_proposerReceivePromise_misc(self): acc1 = {'proposalID': None, 'value': None, 'type': "ACK"} acc2 = {'proposalID': None, 'value': None, 'type': "ACK"} acc3 = {'proposalID': 9, 'value': "BestestePost", 'type': "ACK"} nacc1 = {'proposalID': None, 'value': None, 'type': "NACK"} nacc2 = {'proposalID': None, 'value': None, 'type': "NACK"} proposer.receivePromise(acc1) proposer.receivePromise(acc2) proposer.receivePromise(nacc1) proposer.receivePromise(nacc2) self.assertEqual(acc3['value'], proposer.receivePromise(acc3)['value'])
def test_proposerReceivePromise_misc(self): acc1 = {'proposalID' : None, 'value' : None, 'type' : "ACK"} acc2 = {'proposalID' : None, 'value' : None, 'type' : "ACK"} acc3 = {'proposalID' : 9, 'value' : "BestestePost", 'type' : "ACK"} nacc1 = {'proposalID' : None, 'value' : None, 'type' : "NACK"} nacc2 = {'proposalID' : None, 'value' : None, 'type' : "NACK"} proposer.receivePromise(acc1) proposer.receivePromise(acc2) proposer.receivePromise(nacc1) proposer.receivePromise(nacc2) self.assertEqual(acc3['value'], proposer.receivePromise(acc3)['value'])
data += "}" # Else if we have received a propose-message, forward it to an acceptor if data[0:8] == "PROPOSE:": result = data[8:] proposed = json.loads(result) reply = acceptor.receivePropose(proposed) s.send("ACK:" + json.dumps(reply)) # Else if we have received an ACK-message, an acceptor has accepted our proposal, # forwards this to the proposer, which in turn broadcasts an accept-message if # it has the majority of the acceptors accept its proposal elif data[0:4] == "ACK:": result = data[4:] result = json.loads(result) reply = proposer.receivePromise(result) if reply == "RESTART": # In this case, propose your own value again, before others in queue proposemessage = json.dumps( proposer.prepare(proposer.myValue)) broadcast("PROPOSE:" + proposemessage) # When majority is received, check if conflict has occured (previous proposal accepted, # but not decided), if so, insert post first in queue. elif reply != None: if reply['conflict'] != None: post = reply['conflict'] posts.insert(0, post) # Conflict occured, add post to begining of posts, continue as normal del reply['conflict'] reply = json.dumps(reply) broadcast("ACCEPT:" + reply)
# Else if we have received a propose-message, forward it to an acceptor if data[0:8] == "PROPOSE:": result = data[8:] proposed = json.loads(result) reply = acceptor.receivePropose(proposed) s.send("ACK:"+json.dumps(reply)) # Else if we have received an ACK-message, an acceptor has accepted our proposal, # forwards this to the proposer, which in turn broadcasts an accept-message if # it has the majority of the acceptors accept its proposal elif data[0:4] == "ACK:": result = data[4:] result = json.loads(result) reply = proposer.receivePromise(result) if reply == "RESTART": # In this case, propose your own value again, before others in queue proposemessage = json.dumps(proposer.prepare(proposer.myValue)) broadcast("PROPOSE:"+proposemessage) # When majority is received, check if conflict has occured (previous proposal accepted, # but not decided), if so, insert post first in queue. elif reply != None: if reply['conflict'] != None: post = reply['conflict'] posts.insert(0, post) # Conflict occured, add post to begining of posts, continue as normal del reply['conflict'] reply = json.dumps(reply) broadcast("ACCEPT:"+reply)