예제 #1
0
 def create_protocol_callback():
     peer = BitcoinPeerProtocol(MAINNET["MAGIC_HEADER"])
     install_pingpong_manager(peer)
     fetcher = Fetcher(peer)
     peer.add_task(run_peer(
         peer, fetcher, fast_forward_add_peer,
         blockfetcher, inv_collector, blockhandler))
     return peer
예제 #2
0
 def create_protocol_callback():
     peer = BitcoinPeerProtocol(network["MAGIC_HEADER"])
     install_pingpong_manager(peer)
     fetcher = Fetcher(peer)
     peer.add_task(run_peer(
         peer, fetcher, self.getheaders_add_peer,
         self.blockfetcher, self.inv_collector))
     return peer
예제 #3
0
 def create_protocol_callback():
     peer = BitcoinPeerProtocol(network["MAGIC_HEADER"])
     install_pingpong_manager(peer)
     fetcher = Fetcher(peer)
     peer.add_task(
         run_peer(peer, fetcher, self.getheaders_add_peer,
                  self.blockfetcher, self.inv_collector))
     return peer
예제 #4
0
def test_queue_gc():
    # create a peer
    # add 50 listeners
    # receive 100 messages
    # first 10 listeners will stop listening after two messages
    # check GC
    peer = BitcoinPeerProtocol(MAGIC_HEADER)
    pt = PeerTransport(None)
    peer.connection_made(pt)

    next_message_list = [peer.new_get_next_message_f() for i in range(50)]
    assert len(peer.message_queues) == 50
    next_message_list = None
    assert len(peer.message_queues) == 0

    @asyncio.coroutine
    def async_listen(next_message, delay=0):
        for i in range(101):
            name, data = yield from next_message()
        yield from asyncio.sleep(delay)

    for i in range(3):
        peer.add_task(async_listen(peer.new_get_next_message_f(), delay=60))
    tasks = [
        asyncio.Task(async_listen(peer.new_get_next_message_f(), delay=1))
        for i in range(50)
    ]

    peer.data_received(VERSION_MSG_BIN)
    for i in range(100):
        peer.data_received(VERACK_MSG_BIN)

    # give everyone a chance to run (but no one finishes)
    asyncio.get_event_loop().run_until_complete(
        asyncio.wait(tasks, timeout=0.1))

    assert len(peer.message_queues) == 53

    # now let all 50 finish. They should be collected.
    asyncio.get_event_loop().run_until_complete(asyncio.wait(tasks))

    ## you would think this number would be 3, but it's not.
    ## oh well. This is close enough.
    assert len(peer.message_queues) <= 4
예제 #5
0
def test_queue_gc():
    # create a peer
    # add 50 listeners
    # receive 100 messages
    # first 10 listeners will stop listening after two messages
    # check GC
    peer = BitcoinPeerProtocol(MAGIC_HEADER)
    pt = PeerTransport(None)
    peer.connection_made(pt)

    next_message_list = [peer.new_get_next_message_f() for i in range(50)]
    assert len(peer.message_queues) == 50
    next_message_list = None
    assert len(peer.message_queues) == 0

    @asyncio.coroutine
    def async_listen(next_message, delay=0):
        for i in range(101):
            name, data = yield from next_message()
        yield from asyncio.sleep(delay)

    for i in range(3):
        peer.add_task(async_listen(peer.new_get_next_message_f(), delay=60))
    tasks = [asyncio.Task(async_listen(peer.new_get_next_message_f(), delay=1)) for i in range(50)]

    peer.data_received(VERSION_MSG_BIN)
    for i in range(100):
        peer.data_received(VERACK_MSG_BIN)

    # give everyone a chance to run (but no one finishes)
    asyncio.get_event_loop().run_until_complete(asyncio.wait(tasks, timeout=0.1))

    assert len(peer.message_queues) == 53

    # now let all 50 finish. They should be collected.
    asyncio.get_event_loop().run_until_complete(asyncio.wait(tasks))

    ## you would think this number would be 3, but it's not.
    ## oh well. This is close enough.
    assert len(peer.message_queues) <= 4