Example #1
0
 def parse_results(values):
     if values is not None:
         for v in values:
             try:
                 val = Value()
                 val.ParseFromString(v)
                 n = objects.Node()
                 n.ParseFromString(val.serializedData)
                 node_to_ask = Node(
                     n.guid, n.nodeAddress.ip, n.nodeAddress.port,
                     n.publicKey,
                     None if not n.HasField("relayAddress") else
                     (n.relayAddress.ip, n.relayAddress.port),
                     n.natType, n.vendor)
                 if n.guid == KeyChain(self.factory.db).guid:
                     proto = self.factory.db.listings.get_proto()
                     l = Listings()
                     l.ParseFromString(proto)
                     for listing in l.listing:
                         if listing.contract_hash == val.valueKey:
                             respond(listing, node_to_ask)
                 else:
                     self.factory.mserver.get_contract_metadata(node_to_ask, val.valueKey)\
                         .addCallback(respond, node_to_ask)
             except Exception:
                 pass
    def test_handleFoundValues(self):
        self._connecting_to_connected()
        self.wire_protocol[self.addr1] = self.con

        self.protocol.router.addContact(self.node1)
        self.protocol.router.addContact(self.node2)
        self.protocol.router.addContact(self.node3)

        node = Node(digest("s"))
        nearest = self.protocol.router.findNeighbors(node)
        spider = ValueSpiderCrawl(self.protocol, node, nearest, KSIZE, ALPHA)
        val = Value()
        val.valueKey = digest("contractID")
        val.serializedData = self.node1.getProto().SerializeToString()
        val1 = val.SerializeToString()
        value = spider._handleFoundValues([(val1,)])
        self.assertEqual(value[0], val.SerializeToString())

        # test handle multiple values
        val.serializedData = self.node2.getProto().SerializeToString()
        val2 = val.SerializeToString()
        found_values = [(val1,), (val1,), (val2,)]
        self.assertEqual(spider._handleFoundValues(found_values), (val1,))

        # test store value at nearest without value
        spider.nearestWithoutValue.push(self.node1)
        spider._handleFoundValues(found_values)
        self.clock.advance(100 * constants.PACKET_TIMEOUT)
        connection.REACTOR.runUntilCurrent()
        self.assertTrue(len(self.proto_mock.send_datagram.call_args_list) > 1)
        self.proto_mock.send_datagram.call_args_list = []
 def test_get(self):
     v = Value()
     v.valueKey = self.key1
     v.serializedData = self.value
     testv = [v.SerializeToString()]
     p = PersistentStorage(":memory:")
     p[self.keyword1] = (self.key1, self.value)
     self.assertEqual(testv, p.get(self.keyword1))
Example #4
0
 def test_get(self):
     v = Value()
     v.valueKey = self.key1
     v.serializedData = self.value
     testv = [v.SerializeToString()]
     p = PersistentStorage(":memory:")
     p[self.keyword1] = (self.key1, self.value)
     self.assertEqual(testv, p.get(self.keyword1))
Example #5
0
 def test_get(self):
     v = Value()
     v.valueKey = self.key1
     v.serializedData = self.value
     testv = [v.SerializeToString()]
     f = ForgetfulStorage()
     f[self.keyword1] = (self.key1, self.value)
     self.assertEqual(testv, f.get(self.keyword1))
 def test_get(self):
     v = Value()
     v.valueKey = self.key1
     v.serializedData = self.value
     testv = [v.SerializeToString()]
     f = ForgetfulStorage()
     f[self.keyword1] = (self.key1, self.value)
     self.assertEqual(testv, f.get(self.keyword1))
 def test_get(self):
     v = Value()
     v.valueKey = self.key1
     v.serializedData = self.value
     v.ttl = 10
     testv = [v.SerializeToString()]
     p = ForgetfulStorage()
     p[self.keyword1] = (self.key1, self.value, 10)
     self.assertEqual(testv, p.get(self.keyword1))
Example #8
0
 def get(self, keyword, default=None):
     self.cull()
     if keyword in self.data:
         ret = []
         for k, v in self[keyword].items():
             value = Value()
             value.valueKey = k
             value.serializedData = v
             ret.append(value.SerializeToString())
         return ret
     return default
Example #9
0
 def get(self, keyword, default=None):
     self.cull()
     if keyword in self.data:
         ret = []
         for k, v in self[keyword].items():
             value = Value()
             value.valueKey = k
             value.serializedData = v
             ret.append(value.SerializeToString())
         return ret
     return default
Example #10
0
 def get(self, keyword, default=None):
     self.cull()
     if len(self[keyword]) > 0:
         ret = []
         for k, v, birthday in self[keyword]:
             value = Value()
             value.valueKey = k
             value.serializedData = v
             value.ttl = int(round(self.ttl - (time.time() - birthday)))
             ret.append(value.SerializeToString())
         return ret
     return default
    def test_handleFoundValues(self):
        self._connecting_to_connected()
        self.wire_protocol[self.addr1] = self.con

        self.protocol.router.addContact(self.node1)
        self.protocol.router.addContact(self.node2)
        self.protocol.router.addContact(self.node3)

        node = Node(digest("s"))
        nearest = self.protocol.router.findNeighbors(node)
        spider = ValueSpiderCrawl(self.protocol, node, nearest,
                                  dht.constants.KSIZE, dht.constants.ALPHA)
        val = Value()
        val.valueKey = digest("contractID")
        val.serializedData = self.node1.getProto().SerializeToString()
        val1 = val.SerializeToString()
        value = spider._handleFoundValues([(val1, )])
        self.assertEqual(value[0], val.SerializeToString())

        # test handle multiple values
        val.serializedData = self.node2.getProto().SerializeToString()
        val2 = val.SerializeToString()
        found_values = [(val1, ), (val1, ), (val2, )]
        self.assertEqual(spider._handleFoundValues(found_values), (val1, ))

        # test store value at nearest without value
        spider.nearestWithoutValue.push(self.node1)
        spider._handleFoundValues(found_values)
        self.clock.advance(100 * constants.PACKET_TIMEOUT)
        connection.REACTOR.runUntilCurrent()
        self.assertTrue(len(self.proto_mock.send_datagram.call_args_list) > 1)
        self.proto_mock.send_datagram.call_args_list = []
Example #12
0
    def test_nodesFound(self):
        self._connecting_to_connected()
        self.wire_protocol[self.addr1] = self.con
        self.wire_protocol[self.addr2] = self.con
        self.wire_protocol[self.addr3] = self.con

        self.protocol.router.addContact(self.node1)
        self.protocol.router.addContact(self.node2)
        self.protocol.router.addContact(self.node3)

        # test response with uncontacted nodes
        node = Node(digest("s"))
        nearest = self.protocol.router.findNeighbors(node)
        spider = ValueSpiderCrawl(self.protocol, node, nearest, 20, 3)
        response = (True, (self.node1.getProto().SerializeToString(), self.node2.getProto().SerializeToString(),
                           self.node3.getProto().SerializeToString()))
        responses = {self.node1.id: response}
        spider._nodesFound(responses)
        self.clock.advance(constants.PACKET_TIMEOUT)
        connection.REACTOR.runUntilCurrent()
        self.assertEqual(len(self.proto_mock.send_datagram.call_args_list), 4)

        # test all been contacted
        spider = ValueSpiderCrawl(self.protocol, node, nearest, 20, 3)
        for peer in spider.nearest.getUncontacted():
            spider.nearest.markContacted(peer)
        response = (True, (self.node1.getProto().SerializeToString(), self.node2.getProto().SerializeToString(),
                           self.node3.getProto().SerializeToString()))
        responses = {self.node2.id: response}
        resp = spider._nodesFound(responses)
        self.assertTrue(resp is None)

        # test didn't happen
        spider = ValueSpiderCrawl(self.protocol, node, nearest, 20, 3)
        response = (False, (self.node1.getProto().SerializeToString(), self.node2.getProto().SerializeToString(),
                            self.node3.getProto().SerializeToString()))
        responses = {self.node1.id: response}
        spider._nodesFound(responses)
        self.assertTrue(len(spider.nearest) == 2)

        # test got value
        val = Value()
        val.valueKey = digest("contractID")
        val.serializedData = self.protocol.sourceNode.getProto().SerializeToString()
        val.ttl = 10
        response = (True, ("value", val.SerializeToString()))
        responses = {self.node3.id: response}
        spider.nearestWithoutValue = NodeHeap(node, 1)
        value = spider._nodesFound(responses)
        self.assertEqual(value[0], val.SerializeToString())
Example #13
0
 def parse_results(values):
     if values is not None:
         for v in values:
             try:
                 val = Value()
                 val.ParseFromString(v)
                 n = objects.Node()
                 n.ParseFromString(val.serializedData)
                 node_to_ask = Node(n.guid, n.ip, n.port,
                                    n.signedPublicKey, True)
                 self.factory.mserver.get_contract_metadata(
                     node_to_ask,
                     val.valueKey).addCallback(respond, node_to_ask)
             except Exception:
                 pass
Example #14
0
    def test_nodesFound(self):
        self._connecting_to_connected()
        self.wire_protocol[self.addr1] = self.con
        self.wire_protocol[self.addr2] = self.con
        self.wire_protocol[self.addr3] = self.con

        self.protocol.router.addContact(self.node1)
        self.protocol.router.addContact(self.node2)
        self.protocol.router.addContact(self.node3)

        # test response with uncontacted nodes
        node = Node(digest("s"))
        nearest = self.protocol.router.findNeighbors(node)
        spider = ValueSpiderCrawl(self.protocol, node, nearest, 20, 3)
        response = (True, (self.node1.getProto().SerializeToString(),
                           self.node2.getProto().SerializeToString(),
                           self.node3.getProto().SerializeToString()))
        responses = {self.node1.id: response}
        spider._nodesFound(responses)
        self.clock.advance(constants.PACKET_TIMEOUT)
        connection.REACTOR.runUntilCurrent()
        self.assertEqual(len(self.proto_mock.send_datagram.call_args_list), 4)

        # test all been contacted
        spider = ValueSpiderCrawl(self.protocol, node, nearest, 20, 3)
        for peer in spider.nearest.getUncontacted():
            spider.nearest.markContacted(peer)
        response = (True, (self.node1.getProto().SerializeToString(),
                           self.node2.getProto().SerializeToString(),
                           self.node3.getProto().SerializeToString()))
        responses = {self.node2.id: response}
        resp = spider._nodesFound(responses)
        self.assertTrue(resp is None)

        # test didn't happen
        spider = ValueSpiderCrawl(self.protocol, node, nearest, 20, 3)
        response = (False, (self.node1.getProto().SerializeToString(),
                            self.node2.getProto().SerializeToString(),
                            self.node3.getProto().SerializeToString()))
        responses = {self.node1.id: response}
        spider._nodesFound(responses)
        self.assertTrue(len(spider.nearest) == 2)

        # test got value
        val = Value()
        val.valueKey = digest("contractID")
        val.serializedData = self.protocol.sourceNode.getProto(
        ).SerializeToString()
        val.ttl = 10
        response = (True, ("value", val.SerializeToString()))
        responses = {self.node3.id: response}
        spider.nearestWithoutValue = NodeHeap(node, 1)
        value = spider._nodesFound(responses)
        self.assertEqual(value[0], val.SerializeToString())
Example #15
0
 def parse_results(values):
     if values is not None:
         for v in values:
             try:
                 val = Value()
                 val.ParseFromString(v)
                 n = objects.Node()
                 n.ParseFromString(val.serializedData)
                 node_to_ask = Node(n.guid, n.ip, n.port,
                                    n.signedPublicKey, True)
                 if n.guid == KeyChain(self.factory.db).guid:
                     proto = self.factory.db.ListingsStore().get_proto()
                     l = Listings()
                     l.ParseFromString(proto)
                     for listing in l.listing:
                         if listing.contract_hash == val.valueKey:
                             respond(listing, node_to_ask)
                 else:
                     self.factory.mserver.get_contract_metadata(node_to_ask, val.valueKey)\
                         .addCallback(respond, node_to_ask)
             except Exception:
                 pass
Example #16
0
 def test_get(self):
     v = Value()
     v.valueKey = self.key1
     v.serializedData = self.value
     v.ttl = 10
     testv = [v.SerializeToString()]
     p = ForgetfulStorage()
     p[self.keyword1] = (self.key1, self.value, 10)
     self.assertEqual(testv, p.get(self.keyword1))
Example #17
0
 def get(self, keyword, default=None):
     self.cull()
     if len(self[keyword]) > 0:
         ret = []
         for k, v, birthday in self[keyword]:
             value = Value()
             value.valueKey = k
             value.serializedData = v
             value.ttl = int(round(self.ttl - (time.time() - birthday)))
             ret.append(value.SerializeToString())
         return ret
     return default