Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Includes 30 custom nodes committed directly, 7 Civitai-exclusive loras stored via Git LFS, and a setup script that installs all dependencies and downloads HuggingFace-hosted models on vast.ai. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
201 lines
6.0 KiB
Python
Executable File
201 lines
6.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Test script for wildcard lazy loading functionality
|
|
"""
|
|
import sys
|
|
import os
|
|
import tempfile
|
|
|
|
# Add parent directory to path
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
|
|
|
|
from modules.impact import wildcards
|
|
|
|
def test_lazy_loader():
|
|
"""Test LazyWildcardLoader class"""
|
|
print("=" * 60)
|
|
print("TEST 1: LazyWildcardLoader functionality")
|
|
print("=" * 60)
|
|
|
|
# Create a temporary test file
|
|
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f:
|
|
f.write("option1\n")
|
|
f.write("option2\n")
|
|
f.write("# comment line\n")
|
|
f.write("option3\n")
|
|
temp_file = f.name
|
|
|
|
try:
|
|
# Test lazy loading
|
|
loader = wildcards.LazyWildcardLoader(temp_file, 'txt')
|
|
print(f"✓ Created LazyWildcardLoader: {loader}")
|
|
|
|
# Check that data is not loaded yet
|
|
assert not loader._loaded, "Data should not be loaded initially"
|
|
print("✓ Data not loaded initially (lazy)")
|
|
|
|
# Access data
|
|
data = loader.get_data()
|
|
print(f"✓ Loaded data: {data}")
|
|
assert len(data) == 3, f"Expected 3 items, got {len(data)}"
|
|
assert 'option1' in data, "option1 should be in data"
|
|
|
|
# Check that data is now loaded
|
|
assert loader._loaded, "Data should be loaded after access"
|
|
print("✓ Data loaded after first access")
|
|
|
|
# Test list-like operations
|
|
print(f"✓ len(loader) = {len(loader)}")
|
|
assert len(loader) == 3
|
|
|
|
print(f"✓ loader[0] = {loader[0]}")
|
|
assert loader[0] == 'option1'
|
|
|
|
print(f"✓ 'option2' in loader = {'option2' in loader}")
|
|
assert 'option2' in loader
|
|
|
|
print(f"✓ list(loader) = {list(loader)}")
|
|
|
|
print("\n✅ LazyWildcardLoader tests PASSED\n")
|
|
|
|
finally:
|
|
os.unlink(temp_file)
|
|
|
|
|
|
def test_cache_limit_detection():
|
|
"""Test automatic cache mode detection"""
|
|
print("=" * 60)
|
|
print("TEST 2: Cache limit detection")
|
|
print("=" * 60)
|
|
|
|
# Get current cache limit
|
|
limit = wildcards.get_cache_limit()
|
|
print(f"✓ Cache limit: {limit / (1024*1024):.2f} MB")
|
|
|
|
# Calculate wildcard directory size
|
|
wildcards_dir = wildcards.wildcards_path
|
|
total_size = wildcards.calculate_directory_size(wildcards_dir)
|
|
print(f"✓ Wildcards directory size: {total_size / (1024*1024):.2f} MB")
|
|
print(f"✓ Wildcards path: {wildcards_dir}")
|
|
|
|
# Determine expected mode
|
|
if total_size >= limit:
|
|
expected_mode = "on-demand"
|
|
else:
|
|
expected_mode = "full cache"
|
|
|
|
print(f"✓ Expected mode: {expected_mode}")
|
|
print("\n✅ Cache detection tests PASSED\n")
|
|
|
|
|
|
def test_wildcard_loading():
|
|
"""Test actual wildcard loading"""
|
|
print("=" * 60)
|
|
print("TEST 3: Wildcard loading with current mode")
|
|
print("=" * 60)
|
|
|
|
# Clear existing wildcards
|
|
wildcards.wildcard_dict = {}
|
|
wildcards._on_demand_mode = False
|
|
|
|
# Load wildcards
|
|
print("Loading wildcards...")
|
|
wildcards.wildcard_load()
|
|
|
|
# Check mode
|
|
is_on_demand = wildcards.is_on_demand_mode()
|
|
print(f"✓ On-demand mode active: {is_on_demand}")
|
|
|
|
# Check loaded wildcards
|
|
wc_list = wildcards.get_wildcard_list()
|
|
print(f"✓ Loaded {len(wc_list)} wildcards")
|
|
|
|
if len(wc_list) > 0:
|
|
print(f"✓ Sample wildcards: {wc_list[:5]}")
|
|
|
|
# Test accessing a wildcard
|
|
if len(wildcards.wildcard_dict) > 0:
|
|
key = list(wildcards.wildcard_dict.keys())[0]
|
|
value = wildcards.wildcard_dict[key]
|
|
print(f"✓ Sample wildcard '{key}' type: {type(value).__name__}")
|
|
|
|
if isinstance(value, wildcards.LazyWildcardLoader):
|
|
print(f" - LazyWildcardLoader: {value}")
|
|
print(f" - Loaded: {value._loaded}")
|
|
# Access the data
|
|
data = value.get_data()
|
|
print(f" - Data loaded, items: {len(data)}")
|
|
else:
|
|
print(f" - Direct list, items: {len(value)}")
|
|
|
|
print("\n✅ Wildcard loading tests PASSED\n")
|
|
|
|
|
|
def test_on_demand_simulation():
|
|
"""Simulate on-demand mode with temporary wildcards"""
|
|
print("=" * 60)
|
|
print("TEST 4: On-demand mode simulation")
|
|
print("=" * 60)
|
|
|
|
# Create temporary wildcard directory
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
# Create test files
|
|
test_file1 = os.path.join(tmpdir, "test1.txt")
|
|
test_file2 = os.path.join(tmpdir, "test2.txt")
|
|
|
|
with open(test_file1, 'w') as f:
|
|
f.write("option1a\noption1b\noption1c\n")
|
|
|
|
with open(test_file2, 'w') as f:
|
|
f.write("option2a\noption2b\n")
|
|
|
|
# Clear and load with on-demand mode
|
|
wildcards.wildcard_dict = {}
|
|
wildcards._on_demand_mode = False
|
|
|
|
print(f"✓ Loading from temp directory: {tmpdir}")
|
|
wildcards.read_wildcard_dict(tmpdir, on_demand=True)
|
|
|
|
print(f"✓ Loaded {len(wildcards.wildcard_dict)} wildcards")
|
|
|
|
for key, value in wildcards.wildcard_dict.items():
|
|
print(f"✓ Wildcard '{key}':")
|
|
print(f" - Type: {type(value).__name__}")
|
|
if isinstance(value, wildcards.LazyWildcardLoader):
|
|
print(f" - Initially loaded: {value._loaded}")
|
|
data = value.get_data()
|
|
print(f" - After access: loaded={value._loaded}, items={len(data)}")
|
|
print(f" - Sample data: {data[:2]}")
|
|
|
|
print("\n✅ On-demand simulation tests PASSED\n")
|
|
|
|
|
|
def main():
|
|
"""Run all tests"""
|
|
print("\n" + "=" * 60)
|
|
print("WILDCARD LAZY LOADING TEST SUITE")
|
|
print("=" * 60 + "\n")
|
|
|
|
try:
|
|
test_lazy_loader()
|
|
test_cache_limit_detection()
|
|
test_wildcard_loading()
|
|
test_on_demand_simulation()
|
|
|
|
print("=" * 60)
|
|
print("✅ ALL TESTS PASSED")
|
|
print("=" * 60)
|
|
return 0
|
|
|
|
except Exception as e:
|
|
print("\n" + "=" * 60)
|
|
print(f"❌ TEST FAILED: {e}")
|
|
print("=" * 60)
|
|
import traceback
|
|
traceback.print_exc()
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|