Beispiel #1
0
def test_servent():
    receive_servent = ReceiveServent()
    send_servent = SendServent()
    assert_equal(receive_servent.files, [])
    assert_equal(send_servent.files, [])

    # manually set file
    receive_servent.set_files([FileInfo(1,"first file", 600),  FileInfo(2,"second file", 2500) , FileInfo(3, "third file", 5000)])
    assert_equal(receive_servent.check_file(1), True)
    assert_equal(receive_servent.check_file(200), False)

    receive_servent.reactor.gnutella_connect(send_servent.reactor.address)
    try:
        scheduler_loop(timeout=1,count=10)
    finally:
        assert_equal(len(send_servent.sent_message), 1)
        assert_equal(len(receive_servent.receive_message), 1)
        assert_equal(receive_servent.receive_message[0].message_id, send_servent.sent_message[0].message_id)
        assert_equal(receive_servent.receive_message[0].ttl, send_servent.sent_message[0].ttl)
        assert_equal(receive_servent.receive_message[0].hops, send_servent.sent_message[0].hops)
        assert_equal(receive_servent.receive_message[0].payload_length, send_servent.sent_message[0].payload_length)
        assert_equal(receive_servent.receive_message[0].payload_descriptor, send_servent.sent_message[0].payload_descriptor)
        assert_equal(receive_servent.receive_message[0].serialize(), send_servent.sent_message[0].serialize())
        assert_equal(len(send_servent.receive_message), 1)
        assert_equal(send_servent.receive_message[0].body.num_of_files, 3)
        assert_equal(send_servent.receive_message[0].body.num_of_kb, 8)
        close_all()
Beispiel #2
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()
Beispiel #3
0
def main(args):
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')
    dag = {0: [], 1:[0], 2:[0], 3:[1,2]}
    DagBootstrap(dag)

    try:
        schedule_loop()
    finally:
        close_all()
Beispiel #4
0
def __create_node(servent_cls, bootstrap_address):
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')
    servent_cls(bootstrap_address = bootstrap_address)
    try:
        schedule_loop()
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        close_all()    
def __create_node(servent_cls, bootstrap_address, files = []):
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')
    servent = servent_cls(bootstrap_address = bootstrap_address)
    servent.set_files(files = files)
    
    try:
        schedule_loop(timeout=1, count=80)
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        servent.log("result: %s, tx: %s, rx: %s" % (len(servent.search('ABC')), servent.num_tx_message, servent.num_rx_message))
        close_all()  
Beispiel #6
0
def main(argv, argc):    
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')
    if argc == 0:
        print "Running with default behavior."
        print "To see other options, please run with python run_bootstrap.py help"        
        dag = {0: [], 1:[0], 2:[0], 3:[1,2]}
        print "The default is DagBootstrap with %s" % dag
        print "Please use Ctrl+C to terminate"
        DagBootstrap(dag)
        
        try:
            schedule_loop()
        except (KeyboardInterrupt, SystemExit):
            pass
        finally:
            close_all()
        return
    
    if argv[0] == 'help':
        if argc == 1:
            print "You could run the following Bootstrap: "
            for bt in bt_name:
                print "* ", bt
            print "You can find out how to run any of above Bootstrap by typing: "
            print "python run_bootstrap.py help <bootstrap name>"
        else:
            name = argv[1]
            for bt in bootstraps:
                if bt.__name__ == name:
                    if bt.__doc__:
                        print bt.__doc__
                        print additional_note
                    return
            print "We cannot find a bootstrap with name %s" % name
        return
    elif argv[0] in bt_name:
        name = argv[0]
        for bt in bootstraps:
            if bt.__name__ == name:
                kwargs = bt.parse(argv[1:])
                bt(**kwargs)
                
                try:
                    schedule_loop()
                except (KeyboardInterrupt, SystemExit):
                    pass
                finally:
                    close_all()
                return
    else:
        print "No parameter matches. Please python run_bootstrap.py help for help"
Beispiel #7
0
def main(argv, argc):    
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')
    print "Please use Ctrl+C to terminate"
    p = 0.5
    if argc >= 0:
        p = float(argv[0])
    RandomBootstrap(p)
    
    try:
        schedule_loop()
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        close_all()
    return
def main(args):
    # show log message
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')
    # implement the network
    servent1 = LogCacheServent()
    servent2 = LogCacheServent()
    servent3 = LogCacheServent()
    servent4 = LogCacheServent()
    servent5 = LogCacheServent()
    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:
        print "============Handshake============"
        scheduler_loop(timeout=1,count=10)
    except:
        close_all()
        return
    
    query_message = create_message(GnutellaBodyId.QUERY,
                                   min_speed = 0,
                                   search_criteria = "first file")
    
    # generate two identical query with different message_id
    query_message2 = create_message(GnutellaBodyId.QUERY,
                                   min_speed = 0,
                                   search_criteria = "first file")
            
    try:
        print "============Simulate Query============"
        servent1.flood_ex(query_message)
        scheduler_loop(timeout=1,count=15)
    except:
        close_all()
        return
        
    try:
        print "============Simulate Cache Query============"
        servent5.flood_ex(query_message2)
        scheduler_loop(timeout=1,count=15)
    except:
        close_all()
        return
    
    print "Servent 1's cache hits: ", servent1.hits, "cache misses", servent1.misses
    print "Servent 2's cache hits: ", servent2.hits, "cache misses", servent2.misses
    print "Servent 3's cache hits: ", servent3.hits, "cache misses", servent3.misses
    print "Servent 4's cache hits: ", servent4.hits, "cache misses", servent4.misses
    print "Servent 5's cache hits: ", servent5.hits, "cache misses", servent5.misses
    
    # clean up
    close_all()
Beispiel #9
0
def test_on_receive():
    # test all logic path in on_receive(
    basic_servent = BasicServent()
    test_handler = TestHandler()
    ping_message = create_message(GnutellaBodyId.PING)
    basic_servent.on_receive(test_handler, ping_message)
    # second one test on forward table
    basic_servent.on_receive(test_handler, ping_message)
    pong_message = create_message(GnutellaBodyId.PONG, ip = basic_servent.reactor.ip, 
                                  port = basic_servent.reactor.port, num_of_files = 0, 
                                  num_of_kb = 0)
    basic_servent.on_receive(test_handler, pong_message)
    pong_message2 = create_message(GnutellaBodyId.PONG, message_id = ping_message.message_id,
                                   ip = basic_servent.reactor.ip, port = basic_servent.reactor.port, 
                                   num_of_files = 0, num_of_kb = 0)
    basic_servent.on_receive(test_handler, pong_message2)
    query_message = create_message(GnutellaBodyId.QUERY, min_speed = 2, search_criteria = 'hello world')
    basic_servent.on_receive(test_handler, query_message)
    #queryhit_message = create_message(GnutellaBodyId.QUERYHIT)
    #TODO:
    close_all()
Beispiel #10
0
# You should see the following or something like this if you get PYTHONPATH fixed
# explanation: the first message => request from node with port=38383
# bootstrap node with port = 36124
#('127.0.0.1', 38383)  ->  ('127.0.1.1', 36124) POST 127.0.1.1 3435
#('127.0.0.1', 38383)  ->  ('127.0.1.1', 36124) GET
#('127.0.0.1', 38384)  ->  ('127.0.1.1', 36124) POST 127.0.1.1 15025
#('127.0.0.1', 38384)  ->  ('127.0.1.1', 36124) GET
#('127.0.1.1', 36124)  ->  ('127.0.0.1', 38383) CLOSE
#('127.0.1.1', 36124)  ->  ('127.0.0.1', 38384) PEER 127.0.1.1 3435
#('127.0.1.1', 36124)  ->  ('127.0.0.1', 38384) CLOSE
#('127.0.0.1', 38385)  ->  ('127.0.1.1', 36124) POST 127.0.1.1 1252
#('127.0.0.1', 38385)  ->  ('127.0.1.1', 36124) GET
#('127.0.1.1', 36124)  ->  ('127.0.0.1', 38385) PEER 127.0.1.1 15025
#('127.0.1.1', 36124)  ->  ('127.0.0.1', 38385) CLOSE
#Node 1:  []
#Node 2:  [('127.0.1.1', '3435')]
#Node 3:  [('127.0.1.1', '15025')]

if __name__ == '__main__':
    bootstrap_node = SimpleBootstrap()
    node1 = BootstrapOutHandler(('127.0.1.1', 3435), bootstrap_node.addr)
    node2 = BootstrapOutHandler(('127.0.1.1', 15025), bootstrap_node.addr)
    node3 = BootstrapOutHandler(('127.0.1.1', 1252), bootstrap_node.addr)
    try:
        scheduler_loop(count=5)
    finally:
        print "Node 1: ", node1.peer_list
        print "Node 2: ", node2.peer_list
        print "Node 3: ", node3.peer_list
        close_all()