示例#1
0
 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))
示例#2
0
 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'])
示例#3
0
	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))
示例#4
0
	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'])
示例#5
0
	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'])
示例#6
0
 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'])
示例#7
0
 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'])
示例#8
0
	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'])
示例#9
0
                            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)
示例#10
0
							# 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)