more checks in archiver & scanner tests
This commit is contained in:
@@ -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."""
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user