73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
"""Tests for scheduler."""
|
|
import pytest
|
|
from ayn_antivirus.core.scheduler import Scheduler, _cron_to_schedule, _parse_cron_field
|
|
from ayn_antivirus.config import Config
|
|
|
|
|
|
def test_scheduler_init():
|
|
config = Config()
|
|
s = Scheduler(config)
|
|
assert s is not None
|
|
assert s.config is config
|
|
|
|
|
|
def test_cron_parse_simple():
|
|
"""Standard daily-at-midnight expression."""
|
|
result = _cron_to_schedule("0 0 * * *")
|
|
assert result["minutes"] == [0]
|
|
assert result["hours"] == [0]
|
|
|
|
|
|
def test_cron_parse_step():
|
|
"""Every-5-minutes expression."""
|
|
result = _cron_to_schedule("*/5 * * * *")
|
|
assert 0 in result["minutes"]
|
|
assert 5 in result["minutes"]
|
|
assert 55 in result["minutes"]
|
|
assert len(result["minutes"]) == 12
|
|
|
|
|
|
def test_cron_parse_range():
|
|
"""Specific range of hours."""
|
|
result = _cron_to_schedule("30 9-17 * * *")
|
|
assert result["minutes"] == [30]
|
|
assert result["hours"] == list(range(9, 18))
|
|
|
|
|
|
def test_cron_parse_invalid():
|
|
"""Invalid cron expression raises ValueError."""
|
|
with pytest.raises(ValueError, match="5-field"):
|
|
_cron_to_schedule("bad input")
|
|
|
|
|
|
def test_schedule_scan():
|
|
config = Config()
|
|
s = Scheduler(config)
|
|
# Scheduling should not crash
|
|
s.schedule_scan("0 0 * * *", "full")
|
|
s.schedule_scan("30 2 * * *", "quick")
|
|
# Jobs should have been registered
|
|
jobs = s._scheduler.get_jobs()
|
|
assert len(jobs) >= 2
|
|
|
|
|
|
def test_schedule_update():
|
|
config = Config()
|
|
s = Scheduler(config)
|
|
s.schedule_update(interval_hours=6)
|
|
jobs = s._scheduler.get_jobs()
|
|
assert len(jobs) >= 1
|
|
|
|
|
|
def test_parse_cron_field_literal():
|
|
assert _parse_cron_field("5", 0, 59) == [5]
|
|
|
|
|
|
def test_parse_cron_field_comma():
|
|
assert _parse_cron_field("1,3,5", 0, 59) == [1, 3, 5]
|
|
|
|
|
|
def test_parse_cron_field_wildcard():
|
|
result = _parse_cron_field("*", 0, 6)
|
|
assert result == [0, 1, 2, 3, 4, 5, 6]
|