Files
tzst/tests/conftest.py
T
xixu-me acd9ced29e Fixes critical path resolution bug and consolidates tests
Resolves a critical bug in non-atomic archive creation where relative
archive paths failed when the working directory changed during operation.
The fix converts archive paths to absolute before changing directories.

Consolidates duplicate CLI and security tests into comprehensive test
suites to eliminate redundancy and improve maintainability. Adds
extensive edge case coverage including platform-specific features,
Unicode handling, and performance scenarios.

Updates version to 1.0.1 and ensures proper exit code propagation
in the main entry point for better script integration.
2025-06-01 14:57:31 +08:00

160 lines
4.7 KiB
Python

"""Test configuration and fixtures."""
import os
import tempfile
from pathlib import Path
import pytest
@pytest.fixture
def temp_dir():
"""Create a temporary directory for tests."""
with tempfile.TemporaryDirectory() as tmpdir:
yield Path(tmpdir)
@pytest.fixture
def sample_files(temp_dir):
"""Create sample files for testing."""
files = []
# Create a simple text file
text_file = temp_dir / "test.txt"
text_file.write_text("Hello, World!\nThis is a test file.\n")
files.append(text_file)
# Create a binary file
binary_file = temp_dir / "test.bin"
binary_file.write_bytes(b"\x00\x01\x02\x03\x04\x05" * 100)
files.append(binary_file)
# Create a subdirectory with files
subdir = temp_dir / "subdir"
subdir.mkdir()
sub_file = subdir / "sub.txt"
sub_file.write_text("Subdirectory file content\n")
files.append(sub_file)
# Create another subdirectory
subdir2 = temp_dir / "subdir" / "nested"
subdir2.mkdir()
nested_file = subdir2 / "nested.txt"
nested_file.write_text("Nested file content\n")
files.append(nested_file)
return files
@pytest.fixture
def sample_archive_path(temp_dir):
"""Get path for a sample archive."""
return temp_dir / "test.tzst"
@pytest.fixture
def comprehensive_test_files(temp_dir):
"""Create comprehensive test files covering edge cases found during testing."""
files = []
# Empty file
empty_file = temp_dir / "empty_file.txt"
empty_file.touch()
files.append(empty_file)
# File with only whitespace
whitespace_file = temp_dir / "whitespace_only.txt"
whitespace_file.write_text(" \n\t\n \n")
files.append(whitespace_file)
# File with only newlines
newlines_file = temp_dir / "newlines_only.txt"
newlines_file.write_text("\n\n\n\n\n")
files.append(newlines_file)
# Binary file with null bytes
null_bytes_file = temp_dir / "null_bytes.bin"
null_bytes_file.write_bytes(b"\x00\x00\x00\x01\x00\x02\x00\x00\x03")
files.append(null_bytes_file)
# Large text file
large_file = temp_dir / "large_file.txt"
large_content = "This is a large file for testing compression.\n" * 10000
large_file.write_text(large_content)
files.append(large_file)
# Binary data file
binary_data_file = temp_dir / "binary_data.bin"
binary_content = bytes(range(256)) * 100 # 25.6KB of binary data
binary_data_file.write_bytes(binary_content)
files.append(binary_data_file)
# File with spaces and special characters in name
special_chars_file = temp_dir / "file with spaces.txt"
special_chars_file.write_text("File with special characters in name")
files.append(special_chars_file)
# Unicode content file (should work on all platforms)
unicode_content_file = temp_dir / "unicode_content.txt"
unicode_content_file.write_text("Hello 世界! 🌍", encoding="utf-8")
files.append(unicode_content_file)
# Create nested directory structure
nested_dir = temp_dir / "nested" / "very" / "deep" / "directory"
nested_dir.mkdir(parents=True, exist_ok=True)
nested_file = nested_dir / "deepest_file.txt"
nested_file.write_text("File in deeply nested structure")
files.append(nested_file)
return files
@pytest.fixture
def platform_specific_files(temp_dir):
"""Create platform-specific test files."""
files = []
if os.name == "posix": # Unix/Linux
# Create executable file
script_file = temp_dir / "test_script.sh"
script_file.write_text("#!/bin/bash\necho 'Hello World'\n")
try:
script_file.chmod(0o755)
files.append(script_file)
except OSError:
pass
# Create symlink if possible
target_file = temp_dir / "symlink_target.txt"
target_file.write_text("Symlink target content")
files.append(target_file)
symlink_file = temp_dir / "test_symlink.txt"
try:
symlink_file.symlink_to(target_file)
files.append(symlink_file)
except OSError:
pass
return files
@pytest.fixture
def compression_test_files(temp_dir):
"""Create files for testing different compression levels."""
files = []
# Highly compressible file (repetitive content)
compressible_file = temp_dir / "highly_compressible.txt"
compressible_content = "A" * 5000 + "B" * 5000 + "C" * 5000
compressible_file.write_text(compressible_content)
files.append(compressible_file)
# Poorly compressible file (pseudo-random data)
random_file = temp_dir / "poorly_compressible.bin"
random_data = bytes((i * 7 + 23) % 256 for i in range(15000))
random_file.write_bytes(random_data)
files.append(random_file)
return files