Exemplo n.º 1
0
def main(args):
    # create a network
    # if len(args)<3:
    #     usage();
    #     return
    # ip = args[0]
    # port = int(args[1])
    # num_node = int(args[2])
    # address = (ip, port)
    # create_network([CacheServent]*num_node, address)

    # implement the network
    servent1 = CacheServent()
    servent2 = CacheServent()
    servent3 = CacheServent()
    servent4 = CacheServent()
    servent5 = CacheServent()
    servent3.set_files(
        [FileInfo(1, "first file", 600), FileInfo(2, "second file", 2500), FileInfo(3, "third file", 5000)]
    )
    servent1.reactor.gnutella_connect(servent2.reactor.address)
    servent2.reactor.gnutella_connect(servent3.reactor.address)
    servent3.reactor.gnutella_connect(servent4.reactor.address)
    servent5.reactor.gnutella_connect(servent2.reactor.address)
    try:
        scheduler_loop(timeout=1, count=10)
    finally:
        # flood is query to neighbors
        servent1.search_queryhit("first file")
        scheduler_loop(timeout=1, count=10)
        # servent2.search_queryhit('first file')
        # scheduler_loop(timeout=1,count=10)
        servent5.search_queryhit("first file")
        scheduler_loop(timeout=1, count=15)
        close_all()
Exemplo n.º 2
0
 def search_queryhit(self, criteria):
     result = CacheServent.search_queryhit(self, criteria)
     if result:
         self.log("Cache found results(%d)", len(result))
     else:
         self.log("Not in cache")
     return result
Exemplo n.º 3
0
def test_cache():
    test_servent = CacheServent()

    ip = dotted_quad_to_num('127.0.0.1')
    port = 59850
    speed = 100 
    result_set = [{
            'file_index': 3435,
            'file_size': 100,
            'file_name': 'A'
        },
        {
            'file_index': 3535,
            'file_size': 200,
            'file_name': 'B'
        }]
    servent_id = 'thisisservent_id'
    
    fake_queryhit = create_message(GnutellaBodyId.QUERYHIT,
                                   ip = ip,
                                   port = port,
                                   result_set = result_set,
                                   servent_id = servent_id,
                                   speed = 1)

    test_servent.save_queryhit(fake_queryhit)
    cache_result = test_servent.search_queryhit("A")
    # test the result
    assert_equal(len(cache_result), 1)
    assert_equal(cache_result[0][3][0]['file_index'], 3435)
    
    # test the merge
    result_set2 = [{
            'file_index': 3435,
            'file_size': 100,
            'file_name': 'A'
        },
        {
            'file_index': 35345,
            'file_size': 200,
            'file_name': 'C'
        }]    
    fake_queryhit2 = create_message(GnutellaBodyId.QUERYHIT,
                                   ip = ip,
                                   port = port,
                                   result_set = result_set2,
                                   servent_id = servent_id,
                                   speed = 1)
    
    test_servent.save_queryhit(fake_queryhit2)
    # check if it actually merge
    assert_equal(len(test_servent.queryhit_cache), 1)
    
    cache_result = test_servent.search_queryhit("C")
    # test the result
    assert_equal(len(cache_result), 1)
    assert_equal(cache_result[0][3][0]['file_index'], 35345)
    # complex test, use two servent
    servent_id2 = 'thisisserventid1'
    fake_queryhit3 = create_message(GnutellaBodyId.QUERYHIT,
                                   ip = ip,
                                   port = port,
                                   result_set = result_set,
                                   servent_id = servent_id2,
                                   speed = 1)
    test_servent.save_queryhit(fake_queryhit3)
    # test if it does not merge
    assert_equal(len(test_servent.queryhit_cache), 2)
    # test the result
    cache_result = test_servent.search_queryhit("A")
    assert_equal(len(cache_result), 2)