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>
271 lines
9.3 KiB
Bash
Executable File
271 lines
9.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Progressive On-Demand Wildcard Loading Test
|
|
# Verifies that wildcards are loaded progressively as they are accessed
|
|
|
|
set -e
|
|
|
|
# Auto-detect paths
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
IMPACT_PACK_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
COMFYUI_DIR="$(cd "$IMPACT_PACK_DIR/../.." && pwd)"
|
|
CONFIG_FILE="$IMPACT_PACK_DIR/impact-pack.ini"
|
|
BACKUP_CONFIG="$IMPACT_PACK_DIR/impact-pack.ini.backup"
|
|
PORT=8195
|
|
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
echo "=========================================="
|
|
echo "Progressive On-Demand Loading Test"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "This test verifies that /wildcards/list/loaded"
|
|
echo "increases progressively as wildcards are accessed."
|
|
echo ""
|
|
|
|
# Backup original config
|
|
if [ -f "$CONFIG_FILE" ]; then
|
|
cp "$CONFIG_FILE" "$BACKUP_CONFIG"
|
|
echo "✓ Backed up original config"
|
|
fi
|
|
|
|
# Cleanup function
|
|
cleanup() {
|
|
echo ""
|
|
echo "Cleaning up..."
|
|
pkill -f "python.*main.py.*$PORT" 2>/dev/null || true
|
|
sleep 2
|
|
}
|
|
|
|
# Setup on-demand mode (low cache limit)
|
|
echo "${BLUE}Setting up on-demand mode configuration${NC}"
|
|
cat > "$CONFIG_FILE" << EOF
|
|
[default]
|
|
dependency_version = 24
|
|
mmdet_skip = True
|
|
sam_editor_cpu = False
|
|
sam_editor_model = sam_vit_h_4b8939.pth
|
|
custom_wildcards = $IMPACT_PACK_DIR/custom_wildcards
|
|
disable_gpu_opencv = True
|
|
wildcard_cache_limit_mb = 0.5
|
|
EOF
|
|
|
|
echo "✓ Configuration: on-demand mode (0.5MB limit)"
|
|
echo ""
|
|
|
|
# Start server
|
|
cleanup
|
|
cd "$COMFYUI_DIR"
|
|
echo "Starting ComfyUI server on port $PORT..."
|
|
bash run.sh --listen 127.0.0.1 --port $PORT > /tmp/progressive_test.log 2>&1 &
|
|
COMFYUI_PID=$!
|
|
|
|
echo "Waiting for server startup..."
|
|
sleep 15
|
|
|
|
# Check server
|
|
if ! curl -s http://127.0.0.1:$PORT/ > /dev/null; then
|
|
echo "${RED}✗ Server failed to start${NC}"
|
|
cat /tmp/progressive_test.log | grep -i "wildcard\|error" | tail -20
|
|
exit 1
|
|
fi
|
|
|
|
echo "${GREEN}✓ Server started${NC}"
|
|
echo ""
|
|
|
|
# Check loading mode from log
|
|
MODE_LOG=$(grep -i "wildcard.*mode" /tmp/progressive_test.log | tail -1)
|
|
echo "${YELLOW}$MODE_LOG${NC}"
|
|
echo ""
|
|
|
|
# Test Progressive Loading
|
|
echo "=========================================="
|
|
echo "Progressive Loading Verification"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Step 1: Initial state (no wildcards accessed)
|
|
echo "${CYAN}Step 1: Initial state (before any wildcard access)${NC}"
|
|
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
|
|
LOADED_COUNT=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))" 2>/dev/null || echo "0")
|
|
ON_DEMAND=$(echo "$RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('on_demand_mode', False))" 2>/dev/null || echo "false")
|
|
TOTAL_AVAILABLE=$(echo "$RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('total_available', 0))" 2>/dev/null || echo "0")
|
|
|
|
echo " On-demand mode: $ON_DEMAND"
|
|
echo " Total available wildcards: $TOTAL_AVAILABLE"
|
|
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT${NC}"
|
|
|
|
if [ "$ON_DEMAND" != "True" ]; then
|
|
echo "${RED}✗ FAIL: On-demand mode not active!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$LOADED_COUNT" -ne 0 ]; then
|
|
echo "${YELLOW}⚠ WARNING: Expected 0 loaded, got $LOADED_COUNT${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 2: Access first wildcard
|
|
echo "${CYAN}Step 2: Access first wildcard (__samples/flower__)${NC}"
|
|
RESULT1=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "__samples/flower__", "seed": 42}')
|
|
TEXT1=$(echo "$RESULT1" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
|
|
echo " Result: $TEXT1"
|
|
|
|
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
|
|
LOADED_COUNT_1=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
|
|
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_1${NC}"
|
|
|
|
if [ "$LOADED_COUNT_1" -lt 1 ]; then
|
|
echo "${RED}✗ FAIL: Expected at least 1 loaded wildcard${NC}"
|
|
exit 1
|
|
fi
|
|
echo "${GREEN}✓ PASS: Wildcard count increased${NC}"
|
|
echo ""
|
|
|
|
# Step 3: Access second wildcard (different from first)
|
|
echo "${CYAN}Step 3: Access second wildcard (__dragon__)${NC}"
|
|
RESULT2=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "__dragon__", "seed": 200}')
|
|
TEXT2=$(echo "$RESULT2" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
|
|
echo " Result: $TEXT2"
|
|
|
|
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
|
|
LOADED_COUNT_2=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
|
|
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_2${NC}"
|
|
|
|
if [ "$LOADED_COUNT_2" -le "$LOADED_COUNT_1" ]; then
|
|
echo "${RED}✗ FAIL: Expected loaded count to increase (was $LOADED_COUNT_1, now $LOADED_COUNT_2)${NC}"
|
|
exit 1
|
|
fi
|
|
echo "${GREEN}✓ PASS: Wildcard count increased progressively${NC}"
|
|
echo ""
|
|
|
|
# Step 4: Access third wildcard (YAML)
|
|
echo "${CYAN}Step 4: Access third wildcard (__colors__)${NC}"
|
|
RESULT3=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "__colors__", "seed": 333}')
|
|
TEXT3=$(echo "$RESULT3" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
|
|
echo " Result: $TEXT3"
|
|
|
|
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
|
|
LOADED_COUNT_3=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
|
|
LOADED_LIST=$(echo "$RESPONSE" | python3 -c "import sys, json; print(', '.join(json.load(sys.stdin)['data'][:10]))")
|
|
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_3${NC}"
|
|
echo " Sample loaded: $LOADED_LIST"
|
|
|
|
if [ "$LOADED_COUNT_3" -le "$LOADED_COUNT_2" ]; then
|
|
echo "${RED}✗ FAIL: Expected loaded count to increase (was $LOADED_COUNT_2, now $LOADED_COUNT_3)${NC}"
|
|
exit 1
|
|
fi
|
|
echo "${GREEN}✓ PASS: Wildcard count increased progressively${NC}"
|
|
echo ""
|
|
|
|
# Step 5: Re-access first wildcard (should not increase count)
|
|
echo "${CYAN}Step 5: Re-access first wildcard (cached)${NC}"
|
|
RESULT4=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "__samples/flower__", "seed": 42}')
|
|
|
|
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
|
|
LOADED_COUNT_4=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
|
|
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_4${NC}"
|
|
|
|
if [ "$LOADED_COUNT_4" -ne "$LOADED_COUNT_3" ]; then
|
|
echo "${YELLOW}⚠ WARNING: Count changed on cache access (was $LOADED_COUNT_3, now $LOADED_COUNT_4)${NC}"
|
|
else
|
|
echo "${GREEN}✓ PASS: Cached access did not change count${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 6: Deep transitive wildcard (should load multiple wildcards)
|
|
echo "${CYAN}Step 6: Deep transitive wildcard (__adnd__)${NC}"
|
|
RESULT5=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "__adnd__ creature", "seed": 222}')
|
|
TEXT5=$(echo "$RESULT5" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
|
|
echo " Result: $TEXT5"
|
|
|
|
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
|
|
LOADED_COUNT_5=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
|
|
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_5${NC}"
|
|
|
|
if [ "$LOADED_COUNT_5" -le "$LOADED_COUNT_4" ]; then
|
|
echo "${YELLOW}⚠ Transitive wildcards may already be loaded${NC}"
|
|
else
|
|
echo "${GREEN}✓ PASS: Transitive wildcards loaded progressively${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Summary
|
|
echo "=========================================="
|
|
echo "Progressive Loading Summary"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Total available wildcards: $TOTAL_AVAILABLE"
|
|
echo "Loading progression:"
|
|
echo " Initial: $LOADED_COUNT"
|
|
echo " After step 2: $LOADED_COUNT_1 (+$(($LOADED_COUNT_1 - $LOADED_COUNT)))"
|
|
echo " After step 3: $LOADED_COUNT_2 (+$(($LOADED_COUNT_2 - $LOADED_COUNT_1)))"
|
|
echo " After step 4: $LOADED_COUNT_3 (+$(($LOADED_COUNT_3 - $LOADED_COUNT_2)))"
|
|
echo " After step 5: $LOADED_COUNT_4 (cache, no change)"
|
|
echo " After step 6: $LOADED_COUNT_5 (+$(($LOADED_COUNT_5 - $LOADED_COUNT_4)))"
|
|
echo ""
|
|
|
|
# Validation
|
|
ALL_PASSED=true
|
|
|
|
if [ "$LOADED_COUNT_1" -le "$LOADED_COUNT" ]; then
|
|
echo "${RED}✗ FAIL: Step 2 did not increase count${NC}"
|
|
ALL_PASSED=false
|
|
fi
|
|
|
|
if [ "$LOADED_COUNT_2" -le "$LOADED_COUNT_1" ]; then
|
|
echo "${RED}✗ FAIL: Step 3 did not increase count${NC}"
|
|
ALL_PASSED=false
|
|
fi
|
|
|
|
if [ "$LOADED_COUNT_3" -le "$LOADED_COUNT_2" ]; then
|
|
echo "${RED}✗ FAIL: Step 4 did not increase count${NC}"
|
|
ALL_PASSED=false
|
|
fi
|
|
|
|
if [ "$ALL_PASSED" = true ]; then
|
|
echo "${GREEN}🎉 ALL TESTS PASSED${NC}"
|
|
echo "${GREEN}Progressive on-demand loading verified successfully!${NC}"
|
|
EXIT_CODE=0
|
|
else
|
|
echo "${RED}❌ TESTS FAILED${NC}"
|
|
echo "${RED}Progressive loading did not work as expected!${NC}"
|
|
EXIT_CODE=1
|
|
fi
|
|
echo ""
|
|
|
|
# Restore config
|
|
cleanup
|
|
if [ -f "$BACKUP_CONFIG" ]; then
|
|
mv "$BACKUP_CONFIG" "$CONFIG_FILE"
|
|
echo "✓ Restored original config"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Test Complete"
|
|
echo "=========================================="
|
|
echo "Log saved to: /tmp/progressive_test.log"
|
|
echo ""
|
|
|
|
exit $EXIT_CODE
|