mirror of
https://github.com/harivansh-afk/sep.git
synced 2026-04-16 01:03:53 +00:00
init
This commit is contained in:
commit
9d85ca1ebb
9 changed files with 2928 additions and 0 deletions
191
test.sh
Executable file
191
test.sh
Executable file
|
|
@ -0,0 +1,191 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "==================================="
|
||||
echo "Audio Separator API - Test Script"
|
||||
echo "==================================="
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
PASS=0
|
||||
FAIL=0
|
||||
|
||||
test_pass() {
|
||||
echo -e "${GREEN}[PASS]${NC} $1"
|
||||
((PASS++))
|
||||
}
|
||||
|
||||
test_fail() {
|
||||
echo -e "${RED}[FAIL]${NC} $1"
|
||||
((FAIL++))
|
||||
}
|
||||
|
||||
test_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Test 1: Check Python environment
|
||||
echo ""
|
||||
echo "Test 1: Python environment"
|
||||
if [ -f ".venv/bin/python" ]; then
|
||||
PYTHON_VERSION=$(.venv/bin/python --version 2>&1)
|
||||
test_pass "Python found: $PYTHON_VERSION"
|
||||
else
|
||||
test_fail "Python virtual environment not found. Run ./install.sh first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test 2: Check core dependencies
|
||||
echo ""
|
||||
echo "Test 2: Core dependencies"
|
||||
|
||||
.venv/bin/python << 'EOF'
|
||||
import sys
|
||||
|
||||
deps = [
|
||||
("fastapi", "FastAPI"),
|
||||
("uvicorn", "Uvicorn"),
|
||||
("torch", "PyTorch"),
|
||||
("audio_separator", "Audio Separator"),
|
||||
("pydub", "PyDub"),
|
||||
]
|
||||
|
||||
for module, name in deps:
|
||||
try:
|
||||
__import__(module)
|
||||
print(f" [OK] {name}")
|
||||
except ImportError as e:
|
||||
print(f" [FAIL] {name}: {e}")
|
||||
sys.exit(1)
|
||||
EOF
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
test_pass "All core dependencies available"
|
||||
else
|
||||
test_fail "Missing dependencies"
|
||||
fi
|
||||
|
||||
# Test 3: Check CUDA availability
|
||||
echo ""
|
||||
echo "Test 3: CUDA / GPU availability"
|
||||
|
||||
CUDA_RESULT=$(.venv/bin/python << 'EOF'
|
||||
import torch
|
||||
if torch.cuda.is_available():
|
||||
device_name = torch.cuda.get_device_name(0)
|
||||
memory_gb = torch.cuda.get_device_properties(0).total_memory / (1024**3)
|
||||
print(f"CUDA_AVAILABLE|{device_name}|{memory_gb:.1f}")
|
||||
else:
|
||||
print("CUDA_NOT_AVAILABLE")
|
||||
EOF
|
||||
)
|
||||
|
||||
if [[ "$CUDA_RESULT" == CUDA_AVAILABLE* ]]; then
|
||||
IFS='|' read -r _ GPU_NAME GPU_MEM <<< "$CUDA_RESULT"
|
||||
test_pass "CUDA available: $GPU_NAME (${GPU_MEM}GB VRAM)"
|
||||
else
|
||||
test_warn "CUDA not available - will use CPU (slower)"
|
||||
fi
|
||||
|
||||
# Test 4: Check model access
|
||||
echo ""
|
||||
echo "Test 4: Model loading"
|
||||
|
||||
MODEL_RESULT=$(.venv/bin/python << 'EOF'
|
||||
import os
|
||||
os.makedirs('/tmp/audio-separator/models', exist_ok=True)
|
||||
|
||||
try:
|
||||
from audio_separator.separator import Separator
|
||||
s = Separator(model_file_dir='/tmp/audio-separator/models')
|
||||
s.load_model()
|
||||
print("MODEL_OK")
|
||||
except Exception as e:
|
||||
print(f"MODEL_FAIL|{e}")
|
||||
EOF
|
||||
)
|
||||
|
||||
if [[ "$MODEL_RESULT" == "MODEL_OK" ]]; then
|
||||
test_pass "Model loads successfully"
|
||||
else
|
||||
test_fail "Model loading failed: ${MODEL_RESULT#MODEL_FAIL|}"
|
||||
fi
|
||||
|
||||
# Test 5: Check FFmpeg
|
||||
echo ""
|
||||
echo "Test 5: FFmpeg availability"
|
||||
|
||||
if command -v ffmpeg &> /dev/null; then
|
||||
FFMPEG_VERSION=$(ffmpeg -version 2>&1 | head -n1)
|
||||
test_pass "FFmpeg found: $FFMPEG_VERSION"
|
||||
else
|
||||
test_fail "FFmpeg not found - required for audio processing"
|
||||
fi
|
||||
|
||||
# Test 6: Test API endpoints (if server is running)
|
||||
echo ""
|
||||
echo "Test 6: API endpoints"
|
||||
|
||||
API_URL="http://localhost:8000"
|
||||
|
||||
if curl -s --connect-timeout 2 "$API_URL/health" > /dev/null 2>&1; then
|
||||
# Health endpoint
|
||||
HEALTH=$(curl -s "$API_URL/health")
|
||||
if echo "$HEALTH" | grep -q '"status":"healthy"'; then
|
||||
test_pass "Health endpoint responding"
|
||||
else
|
||||
test_fail "Health endpoint unhealthy"
|
||||
fi
|
||||
|
||||
# Models endpoint
|
||||
MODELS=$(curl -s "$API_URL/models")
|
||||
if echo "$MODELS" | grep -q '"models"'; then
|
||||
test_pass "Models endpoint responding"
|
||||
else
|
||||
test_fail "Models endpoint failed"
|
||||
fi
|
||||
|
||||
# Docs endpoint
|
||||
if curl -s --connect-timeout 2 "$API_URL/docs" | grep -q "swagger"; then
|
||||
test_pass "API docs available at $API_URL/docs"
|
||||
else
|
||||
test_warn "API docs may not be accessible"
|
||||
fi
|
||||
else
|
||||
test_warn "API server not running - skipping endpoint tests"
|
||||
echo " Start the server with: .venv/bin/uvicorn app:app --host 0.0.0.0 --port 8000"
|
||||
fi
|
||||
|
||||
# Test 7: Disk space check
|
||||
echo ""
|
||||
echo "Test 7: Disk space"
|
||||
|
||||
AVAILABLE_GB=$(df -BG /tmp | tail -1 | awk '{print $4}' | tr -d 'G')
|
||||
if [ "$AVAILABLE_GB" -gt 10 ]; then
|
||||
test_pass "Sufficient disk space: ${AVAILABLE_GB}GB available in /tmp"
|
||||
else
|
||||
test_warn "Low disk space: ${AVAILABLE_GB}GB available (recommend 10GB+)"
|
||||
fi
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
echo "==================================="
|
||||
echo "Test Summary"
|
||||
echo "==================================="
|
||||
echo -e "Passed: ${GREEN}$PASS${NC}"
|
||||
echo -e "Failed: ${RED}$FAIL${NC}"
|
||||
echo ""
|
||||
|
||||
if [ $FAIL -gt 0 ]; then
|
||||
echo -e "${RED}Some tests failed. Please fix issues before running the API.${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${GREEN}All critical tests passed!${NC}"
|
||||
exit 0
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue