mirror of
https://github.com/Mesteriis/hassio-addons-avm.git
synced 2026-01-09 23:11:02 +01:00
120 lines
4.5 KiB
Python
120 lines
4.5 KiB
Python
from backup.watcher import Watcher
|
|
from backup.config import Config, Setting, CreateOptions
|
|
from backup.ha import HaSource
|
|
from os.path import join
|
|
from .faketime import FakeTime
|
|
from asyncio import sleep
|
|
import pytest
|
|
import os
|
|
|
|
TEST_FILE_NAME = "test.tar"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_watcher_trigger_on_backup(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
await watcher.start()
|
|
assert not await watcher.check()
|
|
watcher.noticed_change_signal.clear()
|
|
await simulateBackup(config, TEST_FILE_NAME, ha, time)
|
|
await watcher.noticed_change_signal.wait()
|
|
time.advance(minutes=11)
|
|
assert await watcher.check()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_disable_watching(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
config.override(Setting.WATCH_BACKUP_DIRECTORY, False)
|
|
await watcher.start()
|
|
assert not await watcher.check()
|
|
await simulateBackup(config, TEST_FILE_NAME, ha, time)
|
|
await sleep(1)
|
|
time.advance(minutes=11)
|
|
assert not await watcher.check()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_watcher_doesnt_trigger_on_no_backup(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
await watcher.start()
|
|
assert not await watcher.check()
|
|
file = join(config.get(Setting.BACKUP_DIRECTORY_PATH), TEST_FILE_NAME)
|
|
watcher.noticed_change_signal.clear()
|
|
with open(file, "w"):
|
|
pass
|
|
await watcher.noticed_change_signal.wait()
|
|
time.advance(minutes=11)
|
|
assert not await watcher.check()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_watcher_below_wait_threshold(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
await watcher.start()
|
|
assert not await watcher.check()
|
|
for x in range(10):
|
|
watcher.noticed_change_signal.clear()
|
|
await simulateBackup(config, f"{TEST_FILE_NAME}.{x}", ha, time)
|
|
await watcher.noticed_change_signal.wait()
|
|
time.advance(seconds=9)
|
|
assert not await watcher.check()
|
|
time.advance(minutes=11)
|
|
assert await watcher.check()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_watcher_triggers_for_deletes(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
await simulateBackup(config, TEST_FILE_NAME, ha, time)
|
|
|
|
await watcher.start()
|
|
assert not await watcher.check()
|
|
watcher.noticed_change_signal.clear()
|
|
os.remove(join(config.get(Setting.BACKUP_DIRECTORY_PATH), TEST_FILE_NAME))
|
|
await watcher.noticed_change_signal.wait()
|
|
|
|
time.advance(seconds=30)
|
|
assert await watcher.check()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_moves_out_trigger(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
await simulateBackup(config, TEST_FILE_NAME, ha, time)
|
|
await watcher.start()
|
|
watcher.noticed_change_signal.clear()
|
|
os.mkdir(join(config.get(Setting.BACKUP_DIRECTORY_PATH), "subdir"))
|
|
os.rename(join(config.get(Setting.BACKUP_DIRECTORY_PATH), TEST_FILE_NAME), join(config.get(Setting.BACKUP_DIRECTORY_PATH), "subdir", TEST_FILE_NAME))
|
|
await watcher.noticed_change_signal.wait()
|
|
time.advance(minutes=11)
|
|
assert await watcher.check()
|
|
|
|
# Check if move ins are really necessary
|
|
# @pytest.mark.asyncio
|
|
# async def test_moves_in_trigger(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
# os.mkdir(join(config.get(Setting.BACKUP_DIRECTORY_PATH), "subdir"))
|
|
# await simulateBackup(config, "subdir/" + TEST_FILE_NAME, ha, time)
|
|
# await watcher.start()
|
|
# watcher.noticed_change_signal.clear()
|
|
# os.rename(join(config.get(Setting.BACKUP_DIRECTORY_PATH), "subdir", TEST_FILE_NAME), join(config.get(Setting.BACKUP_DIRECTORY_PATH), TEST_FILE_NAME))
|
|
# await watcher.noticed_change_signal.wait()
|
|
# time.advance(minutes=11)
|
|
# assert await watcher.check()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_subdirs_dont_trigger(server, watcher: Watcher, config: Config, time: FakeTime, ha: HaSource):
|
|
await simulateBackup(config, TEST_FILE_NAME, ha, time)
|
|
await watcher.start()
|
|
watcher.noticed_change_signal.clear()
|
|
os.mkdir(join(config.get(Setting.BACKUP_DIRECTORY_PATH), "subdir"))
|
|
with open(join(config.get(Setting.BACKUP_DIRECTORY_PATH), "subdir", "ignored.txt"), "w"):
|
|
pass
|
|
assert not await watcher.check()
|
|
time.advance(minutes=11)
|
|
assert not await watcher.check()
|
|
|
|
|
|
async def simulateBackup(config, file_name, ha, time):
|
|
file = join(config.get(Setting.BACKUP_DIRECTORY_PATH), file_name)
|
|
with open(file, "w"):
|
|
pass
|
|
await ha.create(CreateOptions(time.now(), file_name))
|
|
|
|
# Verify that subdirectories get ignored
|