mirror of
https://github.com/Mesteriis/hassio-addons-avm.git
synced 2026-01-11 07:51:02 +01:00
update repository references and improve script handling
This commit is contained in:
119
hassio-google-drive-backup/tests/test_watcher.py
Normal file
119
hassio-google-drive-backup/tests/test_watcher.py
Normal file
@@ -0,0 +1,119 @@
|
||||
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
|
||||
Reference in New Issue
Block a user