mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-11-08 10:29:30 +00:00
* 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>
115 lines
3.8 KiB
Python
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
|