forked from rc/aircox
!111 Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: rc/aircox#114
This commit is contained in:
79
aircox/tests/management/_test_sound_monitor.py
Normal file
79
aircox/tests/management/_test_sound_monitor.py
Normal file
@ -0,0 +1,79 @@
|
||||
import pytest
|
||||
|
||||
import concurrent.futures as futures
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from aircox.management.sound_monitor import (
|
||||
ModifiedHandler,
|
||||
MonitorHandler,
|
||||
NotifyHandler,
|
||||
)
|
||||
|
||||
|
||||
class FakeEvent:
|
||||
def __init__(self, **kwargs):
|
||||
self.__dict__.update(**kwargs)
|
||||
|
||||
|
||||
class WaitHandler(NotifyHandler):
|
||||
def __call__(self, timeout=0.5, *args, **kwargs):
|
||||
# using time.sleep make the future done directly, don't know why
|
||||
start = datetime.now()
|
||||
while datetime.now() - start < timedelta(seconds=4):
|
||||
pass
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def monitor():
|
||||
pool = futures.ThreadPoolExecutor(2)
|
||||
return MonitorHandler("archives", pool)
|
||||
|
||||
|
||||
class TestNotifyHandler:
|
||||
pass
|
||||
|
||||
|
||||
class TestMoveHandler:
|
||||
pass
|
||||
|
||||
|
||||
class TestModifiedHandler:
|
||||
def test_wait(self):
|
||||
handler = ModifiedHandler()
|
||||
handler.timeout_delta = timedelta(seconds=0.1)
|
||||
start = datetime.now()
|
||||
handler.wait()
|
||||
delta = datetime.now() - start
|
||||
assert delta < handler.timeout_delta + timedelta(seconds=0.1)
|
||||
|
||||
def test_wait_ping(self):
|
||||
pool = futures.ThreadPoolExecutor(1)
|
||||
handler = ModifiedHandler()
|
||||
handler.timeout_delta = timedelta(seconds=0.5)
|
||||
|
||||
future = pool.submit(handler.wait)
|
||||
time.sleep(0.3)
|
||||
handler.ping()
|
||||
time.sleep(0.3)
|
||||
assert future.running()
|
||||
|
||||
|
||||
class TestMonitorHandler:
|
||||
def test_submit_new_job(self, monitor):
|
||||
event = FakeEvent(src_path="dummy_src")
|
||||
handler = NotifyHandler()
|
||||
result, _ = monitor._submit(handler, event, "up")
|
||||
assert handler == result
|
||||
assert isinstance(handler.future, futures.Future)
|
||||
monitor.pool.shutdown()
|
||||
|
||||
def test_submit_job_exists(self, monitor):
|
||||
event = FakeEvent(src_path="dummy_src")
|
||||
|
||||
job_1, new_1 = monitor._submit(WaitHandler(), event, "up")
|
||||
job_2, new_2 = monitor._submit(NotifyHandler(), event, "up")
|
||||
assert job_1 == job_2
|
||||
assert new_1
|
||||
assert not new_2
|
||||
monitor.pool.shutdown()
|
Reference in New Issue
Block a user