mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2024-11-14 16:47:17 +00:00
Implement bootiful unit tests for TFW network stack
This commit is contained in:
parent
6069ea5089
commit
9a4da0b36f
2
pytest.ini
Normal file
2
pytest.ini
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[pytest]
|
||||||
|
filterwarnings = ignore::DeprecationWarning:zmq
|
106
tfw/internals/networking/test_networking.py
Normal file
106
tfw/internals/networking/test_networking.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
# pylint: disable=redefined-outer-name
|
||||||
|
from os.path import join
|
||||||
|
from secrets import token_urlsafe
|
||||||
|
from random import randint
|
||||||
|
from tempfile import TemporaryDirectory
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from tornado.ioloop import IOLoop
|
||||||
|
|
||||||
|
from tfw.internals.networking import EventHandlerConnector, ServerConnector
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def _connectors():
|
||||||
|
with TemporaryDirectory() as tmpdir:
|
||||||
|
down_sock = join(tmpdir, 'down')
|
||||||
|
up_sock = join(tmpdir, 'up')
|
||||||
|
server_downlink = f'ipc://{down_sock}'
|
||||||
|
server_uplink = f'ipc://{up_sock}'
|
||||||
|
|
||||||
|
ec = EventHandlerConnector(server_downlink, server_uplink)
|
||||||
|
sc = ServerConnector(server_uplink, server_downlink)
|
||||||
|
yield ec, sc
|
||||||
|
sc.close()
|
||||||
|
ec.close()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def eh_connector(_connectors):
|
||||||
|
eh_connector, _ = _connectors
|
||||||
|
yield eh_connector
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def server_connector(_connectors):
|
||||||
|
_, server_connector = _connectors
|
||||||
|
yield server_connector
|
||||||
|
|
||||||
|
|
||||||
|
def run_ioloop_once():
|
||||||
|
# hack: we have to wait for the messages to get through
|
||||||
|
# the network stack of the OS while the IOLoop is waiting
|
||||||
|
# for them via select/epoll/kqueue
|
||||||
|
IOLoop.current().call_later(0.1, IOLoop.current().stop)
|
||||||
|
IOLoop.current().start()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def test_messages():
|
||||||
|
random_str = lambda: token_urlsafe(randint(4, 8))
|
||||||
|
yield [
|
||||||
|
{
|
||||||
|
'key': random_str(),
|
||||||
|
random_str(): randint(8192, 16384),
|
||||||
|
random_str(): random_str(),
|
||||||
|
random_str(): {
|
||||||
|
random_str(): random_str(),
|
||||||
|
random_str(): {random_str(): random_str()}
|
||||||
|
},
|
||||||
|
random_str(): [random_str(), random_str()]
|
||||||
|
}
|
||||||
|
for _ in range(randint(8, 16))
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_server_downlink(eh_connector, server_connector, test_messages):
|
||||||
|
messages = []
|
||||||
|
eh_connector.register_callback(messages.append)
|
||||||
|
|
||||||
|
for message in test_messages:
|
||||||
|
server_connector.send_message(message)
|
||||||
|
|
||||||
|
run_ioloop_once()
|
||||||
|
|
||||||
|
assert messages == test_messages
|
||||||
|
|
||||||
|
|
||||||
|
def test_server_uplink(eh_connector, server_connector, test_messages):
|
||||||
|
messages = []
|
||||||
|
server_connector.subscribe('')
|
||||||
|
server_connector.register_callback(messages.append)
|
||||||
|
|
||||||
|
for message in test_messages:
|
||||||
|
eh_connector.send_message(message)
|
||||||
|
|
||||||
|
run_ioloop_once()
|
||||||
|
|
||||||
|
assert messages == test_messages
|
||||||
|
|
||||||
|
|
||||||
|
def test_connector_downlink_subscribe(eh_connector, server_connector):
|
||||||
|
key1_messages = [{'key': '1', 'data': i} for i in range(randint(128, 256))]
|
||||||
|
key2_messages = [{'key': '2', 'data': i} for i in range(randint(128, 256))]
|
||||||
|
all_messages = key1_messages + key2_messages
|
||||||
|
|
||||||
|
messages = []
|
||||||
|
server_connector.subscribe('1')
|
||||||
|
server_connector.register_callback(messages.append)
|
||||||
|
|
||||||
|
for message in all_messages:
|
||||||
|
eh_connector.send_message(message)
|
||||||
|
|
||||||
|
run_ioloop_once()
|
||||||
|
|
||||||
|
assert messages == key1_messages
|
||||||
|
assert all((msg not in messages for msg in key2_messages))
|
Loading…
Reference in New Issue
Block a user