Ejemplo n.º 1
0
    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("")
Ejemplo n.º 2
0
    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("")