コード例 #1
0
ファイル: servent_tests.py プロジェクト: daifu/g-simulator
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()
コード例 #2
0
ファイル: run_cache.py プロジェクト: daifu/g-simulator
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()
コード例 #3
0
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()
コード例 #4
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()
コード例 #5
0
from pygnutella.servent import BasicServent
from pygnutella.scheduler import loop as scheduler_loop, close_all
import logging

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG, format='%(name)s: %(message)s')                     
    servent1 = BasicServent()
    servent2 = BasicServent()
    servent2.reactor.gnutella_connect((servent1.reactor.address))
    try:
        scheduler_loop(timeout=1, count=10)
    except:
        pass
    finally:
        # clean up
        close_all()
コード例 #6
0
from pygnutella.bootstrap import DagBootstrap, BootstrapOutHandler
from pygnutella.scheduler import loop as scheduler_loop, close_all

# expected output
#Node 1:  []
#Node 2:  [('127.0.1.1', '3435')]
#Node 3:  [('127.0.1.1', '3435')]
#Node 4:  [('127.0.1.1', '15025'), ('127.0.1.1', '1252')]   
if __name__ == '__main__':
    dag = {0: [], 1:[0], 2:[0], 3:[1,2]}
    bootstrap_node = DagBootstrap(dag)
    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)
    node4 = BootstrapOutHandler(('127.0.1.1', 5682), bootstrap_node.addr)
    try:
        scheduler_loop(count=6)
    finally:
        print "Node 1: ", node1.peer_list
        print "Node 2: ", node2.peer_list
        print "Node 3: ", node3.peer_list
        print "Node 4: ", node4.peer_list
        close_all()