Move setup_tracker_and_peers to conftest.

This commit is contained in:
Yuxin Wang 2018-10-10 20:28:54 -04:00
parent 5fd2b1e95d
commit ea0d9c1ce7
3 changed files with 49 additions and 22 deletions

View file

@ -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())

View file

@ -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()

View file

@ -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)