more checks in archiver & scanner tests
Continuous Integration / backend-tests (push) Successful in 33s
Continuous Integration / frontend-check (push) Successful in 16s
Continuous Integration / e2e-tests (push) Successful in 5m11s

This commit is contained in:
2026-05-05 17:13:43 -04:00
parent c76ccd0dfa
commit f44895d40f
2 changed files with 41 additions and 15 deletions
+23
View File
@@ -150,8 +150,31 @@ def test_run_backup_mocked(db_session, mocker, tmp_path):
# Verify result # Verify result
db_session.expire_all() db_session.expire_all()
# Media usage updated
assert media.bytes_used > 0 assert media.bytes_used > 0
# FileVersion recorded for the archived file
version = (
db_session.query(models.FileVersion)
.filter_by(filesystem_state_id=f1.id)
.first()
)
assert version is not None
assert version.media_id == media.id
assert version.offset_start == 0
assert version.offset_end == f1.size
# Backup job completed successfully
refreshed_job = db_session.get(models.Job, job.id)
assert refreshed_job.status == "COMPLETED"
assert refreshed_job.progress == 100.0
# Provider was asked to write the archive
mock_provider.write_archive.assert_called_once()
call_args = mock_provider.write_archive.call_args
assert call_args[0][0] == "DISK_001" # media identifier
def test_archiver_saturated_media_logic(db_session, mocker, tmp_path): def test_archiver_saturated_media_logic(db_session, mocker, tmp_path):
"""Verifies that media is marked full and priority ceded based on hardware feedback.""" """Verifies that media is marked full and priority ceded based on hardware feedback."""
+18 -15
View File
@@ -176,13 +176,13 @@ def test_hash_file_batch_fast_empty():
def test_hash_file_batch_fast_nonexistent(): def test_hash_file_batch_fast_nonexistent():
"""Tests that non-existent files are gracefully handled.""" """Tests that non-existent files are silently skipped."""
if _FAST_HASH_BINARY is None: if _FAST_HASH_BINARY is None:
pytest.skip("No native hash binary available") pytest.skip("No native hash binary available")
results = _hash_file_batch_fast(["/nonexistent/path"], _FAST_HASH_BINARY) results = _hash_file_batch_fast(["/nonexistent/path"], _FAST_HASH_BINARY)
# Non-existent files may or may not appear in results depending on binary behavior # Non-existent files should not produce hash entries
assert isinstance(results, dict) assert results == {}
def test_missing_file_marked_deleted_at_end_of_scan(db_session, mocker): def test_missing_file_marked_deleted_at_end_of_scan(db_session, mocker):
@@ -275,8 +275,11 @@ def test_missing_file_during_hashing_marked_deleted(db_session, mocker):
assert f.is_deleted is True assert f.is_deleted is True
def test_missing_file_skipped_in_hashing_query(db_session): def test_deleted_files_excluded_from_hashing(db_session):
"""Tests that already-deleted files are excluded from hashing targets.""" """Tests that run_hashing skips already-deleted files."""
scanner = ScannerService()
scanner.is_running = False # Causes run_hashing to exit when no targets found
deleted_file = models.FilesystemState( deleted_file = models.FilesystemState(
file_path="/data/deleted.bin", file_path="/data/deleted.bin",
size=10, size=10,
@@ -288,13 +291,13 @@ def test_missing_file_skipped_in_hashing_query(db_session):
db_session.add(deleted_file) db_session.add(deleted_file)
db_session.commit() db_session.commit()
pending = ( scanner.run_hashing()
db_session.query(models.FilesystemState)
.filter( # Deleted file should not have been processed (hash still None)
models.FilesystemState.sha256_hash.is_(None), db_session.refresh(deleted_file)
models.FilesystemState.is_ignored.is_(False), assert deleted_file.sha256_hash is None
models.FilesystemState.is_deleted.is_(False),
) # A HASH job should have been created and completed (no work to do)
.all() job = db_session.query(models.Job).filter_by(job_type="HASH").first()
) assert job is not None
assert len(pending) == 0 assert job.status == "COMPLETED"