Пример #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("")
Пример #2
0
    def test_process_syn(self):
        print("")
        print("Testing process syn")
        print("")

        self.clean_slate_all()
        syn = copy.deepcopy(self.syn)

        # Create file we're suppose to be uploading.
        path = os.path.join(self.alice_storage, syn[u"data_id"])
        if not os.path.exists(path):
            with open(path, "w") as fp:
                fp.write("0")

        # Test accept SYN with a handler.
        def request_handler(contract_id, src_unl, data_id, file_size):
            return 1
        self.bob.handlers["accept"] = [request_handler]
        syn = copy.deepcopy(self.syn)
        self.assertIsInstance(process_syn(
            self.bob, self.alice.sign_contract(syn), enable_accept_handlers=1
        ), OrderedDict)
        del syn["signature"]

        # Test reject SYN with a handler.
        def request_handler(contract_id, src_unl, data_id, file_size):
            return 0
        self.bob.handlers["accept"] = [request_handler]
        syn = copy.deepcopy(self.syn)
        self.assertTrue(process_syn(
            self.bob, self.alice.sign_contract(syn), enable_accept_handlers=1
        ) == -2)
        del syn["signature"]

        # Our UNL is incorrect.
        syn = copy.deepcopy(self.syn)
        syn[u"dest_unl"] = self.alice.net.unl.value
        self.assertTrue(process_syn(
            self.bob, self.alice.sign_contract(syn), enable_accept_handlers=0
        ) == -3)
        syn[u"dest_unl"] = self.bob.net.unl.value
        del syn["signature"]

        # Their sig is invalid.
        syn = copy.deepcopy(self.syn)
        syn[u"signature"] = "x"
        self.assertTrue(process_syn(
            self.bob, syn, enable_accept_handlers=0
        ) == -4)
        del syn["signature"]

        # Handshake state is incorrect.
        syn = copy.deepcopy(self.syn)
        syn = self.alice.sign_contract(syn)
        contract_id = self.bob.contract_id(syn)
        self.bob.handshake[contract_id] = "SYN"
        self.assertTrue(process_syn(
            self.bob, syn, enable_accept_handlers=0
        ) == -5)
        del self.bob.handshake[contract_id]

        # This should pass.
        self.assertIsInstance(process_syn(
            self.bob, syn, enable_accept_handlers=0
        ), OrderedDict)

        print("")
        print("Ending process syn")
        print("")