Beispiel #1
0
    def test_find_closest(self):
        nodes = [Node(random_32bytes()) for _ in xrange(6)]
        table = RoutingTable(self.node)
        table.buckets[4] = nodes[:2]
        table.buckets[3] = [nodes[2]]
        table.buckets[5] = nodes[3:5]
        table.buckets[10] = [nodes[5]]

        search_node = Node(random_32bytes())
        result = table._find_closest_bucket(4, search_node)
        self.assertEqual(result, sorted([
            ((search_node ^ n).distance_key(), n) for n in nodes
        ]))
Beispiel #2
0
def main(n_processes, fill, test, needs_server):
    for _ in xrange(n_processes):
        try:
            seed = random.choice(kads).node
        except IndexError:
            seed = None

        node = Node(random_32bytes(), port=next(ports))
        dht = DHT(node, seed, context=context)
        kads.append(dht)
        processes.append(dht.run())
        print "%s started." % node

    if fill:
        with open('./lipsum.txt') as f:
            result = re.findall("[A-Z]{2,}(?![a-z])|[A-Z][a-z]+(?=[A-Z])|[\'\w\-]+", f.read())
            for idx in xrange(1, len(result)):
                first, second = result[idx-1], result[idx]
                random.choice(kads)[first] = second
            if test:
                n_failures = 0
                for idx in xrange(1, len(result)):
                    first, second = result[idx-1], result[idx]
                    try:
                        print "%s -> %s" % (first, random.choice(kads)[first])
                    except KeyError:
                        n_failures += 1
                print "Failed %s times" % n_failures
    if needs_server:
        app.run()
Beispiel #3
0
def main(n_processes, fill, test, needs_server):
    for _ in xrange(n_processes):
        try:
            seed = random.choice(kads).node
        except IndexError:
            seed = None

        node = Node(random_32bytes(), port=next(ports))
        dht = DHT(node, seed, context=context)
        kads.append(dht)
        processes.append(dht.run())
        print "%s started." % node

    if fill:
        with open('./lipsum.txt') as f:
            result = re.findall(
                "[A-Z]{2,}(?![a-z])|[A-Z][a-z]+(?=[A-Z])|[\'\w\-]+", f.read())
            for idx in xrange(1, len(result)):
                first, second = result[idx - 1], result[idx]
                random.choice(kads)[first] = second
            if test:
                n_failures = 0
                for idx in xrange(1, len(result)):
                    first, second = result[idx - 1], result[idx]
                    try:
                        print "%s -> %s" % (first, random.choice(kads)[first])
                    except KeyError:
                        n_failures += 1
                print "Failed %s times" % n_failures
    if needs_server:
        app.run()
Beispiel #4
0
def create():
    node = Node(random_32bytes(), port=next(ports))
    seed = random.choice(kads).node
    dht = DHT(node, seed, context=context)
    kads.append(dht)
    processes.append(dht.run())
    return json.dumps({'n': len(processes) - 1})
Beispiel #5
0
def create():
    node = Node(random_32bytes(), port=next(ports))
    seed = random.choice(kads).node
    dht = DHT(node, seed, context=context)
    kads.append(dht)
    processes.append(dht.run())
    return json.dumps({
        'n': len(processes)-1
    })
Beispiel #6
0
    def test_mark_as_not_seen(self):
        target = Node(random_32bytes())
        table = RoutingTable(self.node)
        table.update(target)

        for _ in xrange(RoutingTable.N_RETRIES-1):
            table.mark_as_unavailable(target)
            self.assertEqual(len(table.find_closest(target)), 1)
            self.assertTrue(table._unavailabilities[target] > 0)

        table.mark_as_unavailable(target)
        self.assertEqual(table._unavailabilities[target], 0)
Beispiel #7
0
def slave(uid):
    node = Node(random_32bytes(), port=3001)
    bootstrap = Node(bytearray(uid), port=3000)
    dht = DHT(node, bootstrap)
    dht.run()