Move setup_tracker_and_peers to conftest.
This commit is contained in:
parent
5fd2b1e95d
commit
ea0d9c1ce7
3 changed files with 49 additions and 22 deletions
|
@ -3,6 +3,7 @@ import os
|
|||
import asyncio
|
||||
import hashlib
|
||||
import uvloop
|
||||
from p2pfs import Tracker, Peer
|
||||
|
||||
TEST_SMALL_FILE = 'test_small_file'
|
||||
TEST_SMALL_FILE_1 = 'test_small_file_1'
|
||||
|
@ -23,6 +24,18 @@ def fmd5(fname):
|
|||
return hash_md5.hexdigest()
|
||||
|
||||
|
||||
async def setup_tracker_and_peers(peer_num, tracker_port):
|
||||
tracker = Tracker()
|
||||
peers = tuple(Peer() for _ in range(peer_num))
|
||||
tracker_started = await tracker.start(('localhost', tracker_port))
|
||||
# spawn peers concurrently
|
||||
peers_started = await asyncio.gather(*[peer.start(('localhost', 0)) for peer in peers])
|
||||
assert tracker_started and all(peers_started)
|
||||
peers_connected = await asyncio.gather(*[peer.connect(('localhost', tracker_port)) for peer in peers])
|
||||
assert all(peers_connected)
|
||||
return tracker, peers
|
||||
|
||||
|
||||
@pytest.fixture(scope='session', autouse=True)
|
||||
def create_test_files(request):
|
||||
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||
|
|
|
@ -3,23 +3,11 @@ import asyncio
|
|||
import pytest
|
||||
from p2pfs import Peer, Tracker
|
||||
import time
|
||||
from tests.conftest import fmd5, TEST_SMALL_FILE, TEST_LARGE_FILE, \
|
||||
from tests.conftest import fmd5, setup_tracker_and_peers, TEST_SMALL_FILE, TEST_LARGE_FILE, \
|
||||
TEST_SMALL_FILE_SIZE, TEST_LARGE_FILE_SIZE, TEST_SMALL_FILE_1
|
||||
pytestmark = pytest.mark.asyncio
|
||||
|
||||
|
||||
async def setup_tracker_and_peers(peer_num, tracker_port):
|
||||
tracker = Tracker()
|
||||
peers = tuple(Peer() for _ in range(peer_num))
|
||||
tracker_started = await tracker.start(('localhost', tracker_port))
|
||||
# spawn peers concurrently
|
||||
peers_started = await asyncio.gather(*[peer.start(('localhost', 0)) for peer in peers])
|
||||
assert tracker_started and all(peers_started)
|
||||
peers_connected = await asyncio.gather(*[peer.connect(('localhost', tracker_port)) for peer in peers])
|
||||
assert all(peers_connected)
|
||||
return tracker, peers
|
||||
|
||||
|
||||
def cleanup_files(files):
|
||||
for file in files:
|
||||
try:
|
||||
|
@ -238,3 +226,32 @@ async def test_peer_download_disconnect(unused_tcp_port):
|
|||
cleanup_files(to_cleanup)
|
||||
await tracker.stop()
|
||||
await asyncio.gather(*[peer.stop() for peer in peers[1:]])
|
||||
|
||||
|
||||
async def test_peer_restart(unused_tcp_port):
|
||||
tracker, peers = await setup_tracker_and_peers(1, unused_tcp_port)
|
||||
is_success, _ = await peers[0].publish(TEST_SMALL_FILE)
|
||||
assert is_success
|
||||
assert TEST_SMALL_FILE in tracker.file_list()
|
||||
is_success, _ = await peers[0].disconnect()
|
||||
await asyncio.sleep(0.5)
|
||||
assert TEST_SMALL_FILE not in tracker.file_list()
|
||||
assert is_success
|
||||
is_success, _ = await peers[0].connect(('localhost', unused_tcp_port))
|
||||
assert is_success
|
||||
is_success, _ = await peers[0].publish(TEST_SMALL_FILE)
|
||||
assert TEST_SMALL_FILE in tracker.file_list()
|
||||
assert is_success
|
||||
|
||||
|
||||
async def test_tracker_restart(unused_tcp_port):
|
||||
tracker, peers = await setup_tracker_and_peers(2, unused_tcp_port)
|
||||
await tracker.stop()
|
||||
await asyncio.sleep(0.5)
|
||||
assert not peers[0].is_connected() and not peers[1].is_connected()
|
||||
is_success, _ = await peers[0].connect(('localhost', unused_tcp_port))
|
||||
assert is_success and peers[0].is_connected()
|
||||
is_success, _ = await peers[1].connect(('localhost', unused_tcp_port))
|
||||
assert is_success and peers[1].is_connected()
|
||||
|
||||
|
||||
|
|
|
@ -1,22 +1,19 @@
|
|||
import asyncio
|
||||
import os
|
||||
import pytest
|
||||
from tests.conftest import fmd5, TEST_SMALL_FILE
|
||||
from p2pfs import Peer, Tracker, PeerTerminal, TrackerTerminal
|
||||
from tests.conftest import fmd5, setup_tracker_and_peers, TEST_SMALL_FILE
|
||||
from p2pfs import PeerTerminal, TrackerTerminal
|
||||
|
||||
pytestmark = pytest.mark.asyncio
|
||||
|
||||
|
||||
async def test_terminals(unused_tcp_port, capsys):
|
||||
tracker = Tracker('localhost', unused_tcp_port)
|
||||
peers = tuple(Peer('localhost', 0, 'localhost', unused_tcp_port) for _ in range(2))
|
||||
tracker_started = await tracker.start()
|
||||
# spawn peers concurrently
|
||||
peers_started = await asyncio.gather(*[peer.start() for peer in peers])
|
||||
assert tracker_started and all(peers_started)
|
||||
tracker, peers = await setup_tracker_and_peers(2, unused_tcp_port)
|
||||
peer_terminals = tuple(PeerTerminal(peer) for peer in peers)
|
||||
tracker_terminal = TrackerTerminal(tracker)
|
||||
|
||||
await peer_terminals[1].do_connect('localhost {}'.format(unused_tcp_port))
|
||||
out, _ = capsys.readouterr()
|
||||
assert 'Already' in out
|
||||
await peer_terminals[0].do_help('')
|
||||
capsys.readouterr()
|
||||
await peer_terminals[0].do_publish(TEST_SMALL_FILE)
|
||||
|
|
Loading…
Reference in a new issue