forked from rc/aircox
		
	- !88 pytest on existing tests - !89 reorganise settings (! see notes for deployment) Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: rc/aircox#92
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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()
 |