def test_message_flow(self): print("") print("Testing message flow") print("") # Create file we're suppose to be uploading. path = os.path.join(self.alice_storage, self.syn[u"data_id"]) if not os.path.exists(path): with open(path, "w") as fp: fp.write("0") # Clear existing contracts. self.clean_slate_all() # Alice: build SYN. contract_id = self.alice.simple_data_request( data_id=self.syn[u"data_id"], node_unl=self.bob.net.unl.value, direction=u"send" ) syn = self.alice.contracts[contract_id] self.assertIsInstance(syn, OrderedDict) print(self.alice.net.unl.value) print(self.bob.net.unl.value) print(syn) # Bob: process SYN, build SYN-ACK. syn_ack = process_syn(self.bob, syn) self.assertIsInstance(syn_ack, OrderedDict) # Alice: process SYN-ACK, build ACK. ack = process_syn_ack(self.alice, syn_ack) self.assertIsInstance(ack, OrderedDict) # Bob: process ack. fin = process_ack(self.bob, ack) self.assertTrue(fin == 1) print("") print("Done testing message flow") print("")
def test_valid_ack(self): print("") print("Testing process ack") print("") self.clean_slate_all() syn = self.alice.sign_contract(copy.deepcopy(self.syn)) syn_ack = OrderedDict([(u'status', u'SYN-ACK'), (u'syn', syn)]) syn_ack = self.bob.sign_contract(syn_ack) ack = OrderedDict([(u'status', u'ACK'), (u'syn_ack', syn_ack)]) ack = self.alice.sign_contract(ack) # SYN ack not in message. ack_2 = copy.deepcopy(ack) del ack_2[u"syn_ack"] self.assertTrue(process_ack(self.bob, ack_2) == -1) # Invalid length. ack_2 = copy.deepcopy(ack) ack_2["yy"] = 1 self.assertTrue(process_ack(self.bob, ack_2) == -2) # Not a reply to our syn-ack. ack_2 = copy.deepcopy(ack) self.assertTrue(process_ack(self.bob, ack_2) == -3) # Our sig is invalid. ack_2 = copy.deepcopy(ack) ack_2[u"syn_ack"][u"signature"] = "x" contract_id = self.bob.contract_id(ack_2[u"syn_ack"][u"syn"]) self.bob.contracts[contract_id] = ack_2[u"syn_ack"][u"syn"] self.assertTrue(process_ack(self.bob, ack_2) == -4) # Contract ID not in handshakes. ack_2 = copy.deepcopy(ack) contract_id = self.bob.contract_id(ack_2[u"syn_ack"][u"syn"]) self.bob.contracts[contract_id] = ack_2[u"syn_ack"][u"syn"] self.alice.handshake = {} self.assertTrue(process_ack(self.bob, ack_2) == -5) # Handshake state is invalid. ack_2 = copy.deepcopy(ack) contract_id = self.bob.contract_id(ack_2[u"syn_ack"][u"syn"]) self.bob.contracts[contract_id] = ack_2[u"syn_ack"][u"syn"] self.bob.handshake[contract_id] = { u"state": "SYN", u"timestamp": time.time() } self.assertTrue(process_ack(self.bob, ack_2) == -6) # This should pass. ack_2 = copy.deepcopy(ack) contract_id = self.bob.contract_id(ack_2[u"syn_ack"][u"syn"]) self.bob.contracts[contract_id] = ack_2[u"syn_ack"][u"syn"] self.bob.handshake[contract_id] = { u"state": "SYN-ACK", u"timestamp": time.time() } ret = process_ack(self.bob, ack_2) print(ret) self.assertTrue(ret == 1) print("") print("Ending process ack") print("")