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>
229 lines
6.8 KiB
Bash
Executable File
229 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# On-Demand Lazy Loading Test Suite
|
|
# Tests progressive on-demand wildcard loading with cache limits
|
|
|
|
set -e
|
|
|
|
PORT=8193
|
|
COMFYUI_DIR="/mnt/teratera/git/ComfyUI"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
IMPACT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
CONFIG_FILE="$IMPACT_DIR/impact-pack.ini"
|
|
LOG_FILE="/tmp/ondemand_test.log"
|
|
TEMP_SAMPLES_DIR="/tmp/ondemand_test_samples"
|
|
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo "=========================================="
|
|
echo "On-Demand Lazy Loading Test Suite"
|
|
echo "=========================================="
|
|
echo "Port: $PORT"
|
|
echo "Testing: Progressive on-demand wildcard loading"
|
|
echo ""
|
|
|
|
# Cleanup function
|
|
cleanup() {
|
|
echo ""
|
|
echo "Cleaning up..."
|
|
pkill -f "python.*main.py.*--port $PORT" 2>/dev/null || true
|
|
rm -f "$CONFIG_FILE"
|
|
rm -rf "$TEMP_SAMPLES_DIR"
|
|
echo "Cleanup complete"
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
# Create temporary sample files for on-demand testing
|
|
echo "Creating temporary sample files..."
|
|
mkdir -p "$TEMP_SAMPLES_DIR"
|
|
|
|
# Create large sample files to test cache limits
|
|
for i in {1..50}; do
|
|
cat > "$TEMP_SAMPLES_DIR/large_sample_${i}.txt" << EOF
|
|
# Large sample file $i for on-demand loading test
|
|
$(for j in {1..100}; do echo "option_${i}_${j}"; done)
|
|
EOF
|
|
done
|
|
|
|
# Create Korean sample
|
|
cp "$SCRIPT_DIR/wildcards/samples/아름다운색.txt" "$TEMP_SAMPLES_DIR/" 2>/dev/null || \
|
|
cat > "$TEMP_SAMPLES_DIR/아름다운색.txt" << 'EOF'
|
|
수놓은 별빛
|
|
벚꽃 핑크
|
|
강코랄
|
|
옌로우
|
|
챈메랄드
|
|
챔무
|
|
백설민주
|
|
나부키하늘
|
|
토미베이지
|
|
율렌지
|
|
블루지니
|
|
캔디핑크
|
|
EOF
|
|
|
|
# Create nesting samples
|
|
mkdir -p "$TEMP_SAMPLES_DIR/level1/level2/level3"
|
|
echo "__large_sample_10__" > "$TEMP_SAMPLES_DIR/level1/test_nesting_level1.txt"
|
|
echo "option_a" >> "$TEMP_SAMPLES_DIR/level1/test_nesting_level1.txt"
|
|
echo "__large_sample_20__" > "$TEMP_SAMPLES_DIR/level1/level2/test_nesting_level2.txt"
|
|
echo "option_b" >> "$TEMP_SAMPLES_DIR/level1/level2/test_nesting_level2.txt"
|
|
echo "final_option" > "$TEMP_SAMPLES_DIR/level1/level2/level3/test_nesting_level3.txt"
|
|
|
|
echo "✅ Created $(find $TEMP_SAMPLES_DIR -name '*.txt' | wc -l) temporary sample files"
|
|
echo ""
|
|
|
|
# Kill any existing server on this port
|
|
echo "Killing any existing server on port $PORT..."
|
|
pkill -f "python.*main.py.*--port $PORT" 2>/dev/null || true
|
|
sleep 2
|
|
|
|
# Test function for on-demand mode
|
|
test_ondemand() {
|
|
local TEST_NUM=$1
|
|
local DESCRIPTION=$2
|
|
local CACHE_LIMIT=$3
|
|
local PROMPT=$4
|
|
local SEED=$5
|
|
|
|
echo "${BLUE}=== Test $TEST_NUM: $DESCRIPTION ===${NC}"
|
|
echo "Cache Limit: ${YELLOW}${CACHE_LIMIT}MB${NC}"
|
|
echo "Prompt: ${YELLOW}$PROMPT${NC}"
|
|
echo "Seed: $SEED"
|
|
|
|
# Restart server with new cache limit
|
|
pkill -f "python.*main.py.*--port $PORT" 2>/dev/null || true
|
|
sleep 2
|
|
|
|
# Setup configuration with cache limit pointing to temporary samples
|
|
cat > "$CONFIG_FILE" << EOF
|
|
[default]
|
|
custom_wildcards = $TEMP_SAMPLES_DIR
|
|
wildcard_cache_limit_mb = $CACHE_LIMIT
|
|
dependency_version = 24
|
|
mmdet_skip = True
|
|
sam_editor_cpu = False
|
|
sam_editor_model = sam_vit_h_4b8939.pth
|
|
disable_gpu_opencv = True
|
|
EOF
|
|
|
|
# Start server
|
|
cd "$COMFYUI_DIR"
|
|
bash run.sh --listen 127.0.0.1 --port $PORT > "$LOG_FILE" 2>&1 &
|
|
SERVER_PID=$!
|
|
|
|
# Wait for server
|
|
for i in {1..60}; do
|
|
sleep 1
|
|
if curl -s http://127.0.0.1:$PORT/ > /dev/null 2>&1; then
|
|
break
|
|
fi
|
|
if [ $i -eq 60 ]; then
|
|
echo "${RED}❌ Server failed to start${NC}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Test wildcard expansion
|
|
RESULT=$(curl -s -X POST http://127.0.0.1:$PORT/impact/wildcards \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"text\": \"$PROMPT\", \"seed\": $SEED}" | \
|
|
python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))" 2>/dev/null || echo "ERROR")
|
|
|
|
echo "Result: ${GREEN}$RESULT${NC}"
|
|
|
|
# Get loaded wildcards count
|
|
LOADED_COUNT=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded 2>/dev/null | \
|
|
python3 -c "import sys, json; print(len(json.load(sys.stdin).get('data',[])))" 2>/dev/null || echo "0")
|
|
|
|
echo "Loaded wildcards: ${YELLOW}$LOADED_COUNT${NC}"
|
|
|
|
if [ "$RESULT" != "ERROR" ] && [ -n "$RESULT" ]; then
|
|
echo "Status: ${GREEN}✅ PASS - On-demand loading working${NC}"
|
|
else
|
|
echo "Status: ${RED}❌ FAIL - Server error${NC}"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
echo "=========================================="
|
|
echo "Test Suite Execution"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Test 1: Small cache limit (1MB) - should enable on-demand mode
|
|
test_ondemand "01" "Small cache limit (1MB) - on-demand enabled" \
|
|
"1" \
|
|
"__아름다운색__" \
|
|
100
|
|
|
|
# Test 2: Moderate cache limit (10MB) - on-demand mode
|
|
test_ondemand "02" "Moderate cache limit (10MB) - progressive loading" \
|
|
"10" \
|
|
"__large_sample_5__" \
|
|
200
|
|
|
|
# Test 3: Large cache limit (100MB) - eager loading
|
|
test_ondemand "03" "Large cache limit (100MB) - eager loading" \
|
|
"100" \
|
|
"__아름다운색__" \
|
|
300
|
|
|
|
# Test 4: Very small cache (0.5MB) - aggressive lazy loading
|
|
test_ondemand "04" "Very small cache (0.5MB) - aggressive lazy loading" \
|
|
"0.5" \
|
|
"{__아름다운색__|__large_sample_15__|__large_sample_25__}" \
|
|
400
|
|
|
|
# Test 5: Default cache (50MB) - balanced mode
|
|
test_ondemand "05" "Default cache (50MB) - balanced mode" \
|
|
"50" \
|
|
"2#__large_sample_30__" \
|
|
500
|
|
|
|
# Test 6: On-demand with deep nesting
|
|
test_ondemand "06" "On-demand with 3-level nesting (5MB cache)" \
|
|
"5" \
|
|
"__level1/test_nesting_level1__" \
|
|
600
|
|
|
|
# Test 7: On-demand with multiple wildcards
|
|
test_ondemand "07" "On-demand with multiple wildcards (2MB cache)" \
|
|
"2" \
|
|
"__아름다운색__ and __large_sample_1__ in {__large_sample_40__|__large_sample_45__}" \
|
|
700
|
|
|
|
# Test 8: Cache limit boundary test
|
|
test_ondemand "08" "Cache boundary - exactly at limit (25MB)" \
|
|
"25" \
|
|
"{2$$,$$__large_sample_10__|__large_sample_20__|__large_sample_30__}" \
|
|
800
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Summary"
|
|
echo "=========================================="
|
|
echo "${GREEN}✅ On-demand loading tests completed${NC}"
|
|
echo ""
|
|
echo "Test results:"
|
|
echo " 1. Small cache (1MB) - on-demand enabled ✓"
|
|
echo " 2. Moderate cache (10MB) - progressive loading ✓"
|
|
echo " 3. Large cache (100MB) - eager loading ✓"
|
|
echo " 4. Aggressive lazy loading (0.5MB) ✓"
|
|
echo " 5. Balanced mode (50MB default) ✓"
|
|
echo " 6. On-demand with deep nesting ✓"
|
|
echo " 7. On-demand with multiple wildcards ✓"
|
|
echo " 8. Cache boundary testing ✓"
|
|
echo ""
|
|
echo "On-demand mode verification:"
|
|
echo " - LazyWildcardLoader initialization ✓"
|
|
echo " - Progressive data loading ✓"
|
|
echo " - Memory-efficient operation ✓"
|
|
echo " - Cache limit enforcement ✓"
|
|
echo ""
|
|
echo "Log file: $LOG_FILE"
|