Files
supervisor/tests/utils/test_utils_init.py
Stefan Agner d95ca401ec Fix git path missing or empty (#6116)
* Optimize directory_missing_or_empty function

Replace inefficient os.listdir() with os.scandir() and next() to check
if directory is empty. This avoids reading entire directory contents
into memory when we only need to know if any entry exists.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add unit tests for directory_missing_or_empty function

Add comprehensive test coverage for the optimized directory_missing_or_empty
function, testing empty directories, directories with content, non-existent
paths, and files (non-directories).

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Apply suggestions from code review

Co-authored-by: Mike Degatano <michael.degatano@gmail.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Mike Degatano <michael.degatano@gmail.com>
2025-08-20 17:53:30 +02:00

115 lines
3.8 KiB
Python

"""Unit tests for the utils function."""
import os
from pathlib import Path
import tempfile
from supervisor.utils import directory_missing_or_empty, get_latest_mtime
def test_get_latest_mtime_with_files():
"""Test the latest mtime with files in the directory."""
with tempfile.TemporaryDirectory() as tmpdirname:
tmpdir = Path(tmpdirname)
# Set an old mtime for the directory itself
dir_mtime_initial = 1000000000
# Create first file
file1 = tmpdir / "file1.txt"
file1.write_text("First file")
# After creating file1, directory mtime was modified.
os.utime(tmpdir, (dir_mtime_initial, dir_mtime_initial))
file1_mtime = 1000000100
os.utime(file1, (file1_mtime, file1_mtime))
# Reset directory mtime back to older so that file1 is correctly detected
os.utime(tmpdir, (dir_mtime_initial, dir_mtime_initial))
# Verify file1 is detected
latest_mtime1, latest_path1 = get_latest_mtime(tmpdir)
assert latest_path1 == file1
assert latest_mtime1 == file1_mtime
# Create second file
file2 = tmpdir / "file2.txt"
file2.write_text("Second file")
# Verify change is detected
# Often the directory itself is the latest modified file
# because a new file was created in it. But this is not
# guaranteed, and also not relevant for the test.
latest_mtime2, _ = get_latest_mtime(tmpdir)
assert latest_mtime2 > latest_mtime1
def test_get_latest_mtime_directory_when_empty():
"""Test the latest mtime when the directory cleared."""
with tempfile.TemporaryDirectory() as tmpdirname:
tmpdir = Path(tmpdirname)
# Set initial mtime for the directory
dir_mtime_initial = 1000000000
# Create a file
file1 = tmpdir / "file1.txt"
file1.write_text("Temporary file")
file1_mtime = 1000000100
# After creating file1, directory mtime was modified.
os.utime(tmpdir, (dir_mtime_initial, dir_mtime_initial))
os.utime(file1, (file1_mtime, file1_mtime))
# Verify the file is the latest
latest_mtime1, latest_path = get_latest_mtime(tmpdir)
assert latest_path == file1
assert latest_mtime1 == file1_mtime
# Now delete the file
file1.unlink()
# Now the directory itself should be the latest
latest_mtime2, latest_path = get_latest_mtime(tmpdir)
assert latest_path == tmpdir
assert latest_mtime2 > latest_mtime1
def test_get_latest_mtime_empty_directory():
"""Test the latest mtime when the directory is empty."""
with tempfile.TemporaryDirectory() as tmpdirname:
tmpdir = Path(tmpdirname)
# Directory is empty
latest_mtime, latest_path = get_latest_mtime(tmpdir)
assert latest_path == tmpdir
assert latest_mtime > 0
def test_directory_missing_or_empty():
"""Test directory_missing_or_empty function."""
with tempfile.TemporaryDirectory() as tmpdirname:
tmpdir = Path(tmpdirname)
# Test empty directory
assert directory_missing_or_empty(tmpdir) is True
# Test directory with file
test_file = tmpdir / "test.txt"
test_file.write_text("test content")
assert directory_missing_or_empty(tmpdir) is False
# Test directory with subdirectory
test_file.unlink()
subdir = tmpdir / "subdir"
subdir.mkdir()
assert directory_missing_or_empty(tmpdir) is False
# Test non-existent path
non_existent = tmpdir / "does_not_exist"
assert directory_missing_or_empty(non_existent) is True
# Test file (not directory)
subdir.rmdir()
test_file.write_text("test content")
assert directory_missing_or_empty(test_file) is True