
- Création du répertoire scripts/ avec tous les scripts d'installation et de test - Scripts d'installation automatique (install.sh, quick-start.sh) - Scripts de maintenance complète (maintenance.sh) - Scripts de test (test-installation.sh, test-api.sh, test-services.sh, test-integration.sh) - Amélioration du Dockerfile avec healthchecks et sécurité - Mise à jour du docker-compose.yml avec healthchecks et dépendances - Makefile étendu avec nouvelles commandes - Documentation complète mise à jour - Fichier de configuration d'exemple (env.example) - app.py corrigé et fonctionnel
201 lines
5.3 KiB
Bash
Executable File
201 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Script de test de l'API 4NK IA Backend
|
|
# Usage: ./scripts/test-api.sh
|
|
|
|
set -e
|
|
|
|
# Couleurs pour les messages
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
API_BASE_URL="http://localhost:8000"
|
|
TEST_FILE="test-document.pdf"
|
|
|
|
# Fonction pour afficher les messages
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Compteur de tests
|
|
TESTS_PASSED=0
|
|
TESTS_FAILED=0
|
|
|
|
# Fonction pour exécuter un test
|
|
run_test() {
|
|
local test_name="$1"
|
|
local test_command="$2"
|
|
|
|
log_info "Test: $test_name"
|
|
|
|
if eval "$test_command" > /dev/null 2>&1; then
|
|
log_success "✅ $test_name"
|
|
((TESTS_PASSED++))
|
|
else
|
|
log_error "❌ $test_name"
|
|
((TESTS_FAILED++))
|
|
fi
|
|
}
|
|
|
|
# Fonction pour tester la santé de l'API
|
|
test_health() {
|
|
log_info "=== Test de santé de l'API ==="
|
|
|
|
run_test "Endpoint /api/health accessible" "curl -f $API_BASE_URL/api/health"
|
|
run_test "Endpoint / accessible" "curl -f $API_BASE_URL/"
|
|
run_test "Documentation API accessible" "curl -f $API_BASE_URL/api-docs"
|
|
}
|
|
|
|
# Fonction pour tester l'upload de document
|
|
test_upload() {
|
|
log_info "=== Test d'upload de document ==="
|
|
|
|
# Créer un fichier de test si nécessaire
|
|
if [ ! -f "$TEST_FILE" ]; then
|
|
log_info "Création d'un fichier de test..."
|
|
echo "Ceci est un document de test pour l'API 4NK IA Backend." > "$TEST_FILE"
|
|
fi
|
|
|
|
# Test d'upload
|
|
local upload_response=$(curl -s -X POST "$API_BASE_URL/api/notary/upload" \
|
|
-F "file=@$TEST_FILE" \
|
|
-F "id_dossier=TEST-001" \
|
|
-F "etude_id=ETUDE-001" \
|
|
-F "utilisateur_id=USER-001")
|
|
|
|
if echo "$upload_response" | grep -q "document_id"; then
|
|
log_success "✅ Upload de document réussi"
|
|
((TESTS_PASSED++))
|
|
|
|
# Extraire l'ID du document
|
|
local document_id=$(echo "$upload_response" | grep -o '"document_id":"[^"]*"' | cut -d'"' -f4)
|
|
echo "$document_id" > /tmp/test_document_id
|
|
else
|
|
log_error "❌ Upload de document échoué"
|
|
((TESTS_FAILED++))
|
|
fi
|
|
}
|
|
|
|
# Fonction pour tester l'extraction de données
|
|
test_extraction() {
|
|
log_info "=== Test d'extraction de données ==="
|
|
|
|
if [ -f /tmp/test_document_id ]; then
|
|
local document_id=$(cat /tmp/test_document_id)
|
|
|
|
run_test "Extraction de données accessible" "curl -f $API_BASE_URL/api/documents/$document_id/extract"
|
|
run_test "Analyse de document accessible" "curl -f $API_BASE_URL/api/documents/$document_id/analyze"
|
|
run_test "Contexte de document accessible" "curl -f $API_BASE_URL/api/documents/$document_id/context"
|
|
run_test "Conseil de document accessible" "curl -f $API_BASE_URL/api/documents/$document_id/conseil"
|
|
else
|
|
log_warning "Aucun document de test disponible pour l'extraction"
|
|
fi
|
|
}
|
|
|
|
# Fonction pour tester la liste des documents
|
|
test_documents_list() {
|
|
log_info "=== Test de liste des documents ==="
|
|
|
|
run_test "Liste des documents accessible" "curl -f $API_BASE_URL/api/notary/documents"
|
|
}
|
|
|
|
# Fonction pour tester les performances
|
|
test_performance() {
|
|
log_info "=== Test de performance ==="
|
|
|
|
local start_time=$(date +%s)
|
|
curl -s "$API_BASE_URL/api/health" > /dev/null
|
|
local end_time=$(date +%s)
|
|
local response_time=$((end_time - start_time))
|
|
|
|
if [ $response_time -lt 5 ]; then
|
|
log_success "✅ Temps de réponse acceptable: ${response_time}s"
|
|
((TESTS_PASSED++))
|
|
else
|
|
log_warning "⚠️ Temps de réponse lent: ${response_time}s"
|
|
((TESTS_FAILED++))
|
|
fi
|
|
}
|
|
|
|
# Fonction pour tester la sécurité
|
|
test_security() {
|
|
log_info "=== Test de sécurité ==="
|
|
|
|
# Test des headers de sécurité
|
|
local headers=$(curl -s -I "$API_BASE_URL/api/health")
|
|
|
|
if echo "$headers" | grep -q "CORS"; then
|
|
log_success "✅ Headers CORS présents"
|
|
((TESTS_PASSED++))
|
|
else
|
|
log_warning "⚠️ Headers CORS manquants"
|
|
((TESTS_FAILED++))
|
|
fi
|
|
}
|
|
|
|
# Fonction pour nettoyer les fichiers de test
|
|
cleanup() {
|
|
log_info "Nettoyage des fichiers de test..."
|
|
rm -f "$TEST_FILE" /tmp/test_document_id
|
|
}
|
|
|
|
# Fonction pour afficher le résumé
|
|
show_summary() {
|
|
echo ""
|
|
log_info "=== Résumé des tests API ==="
|
|
echo ""
|
|
echo "Tests réussis: $TESTS_PASSED"
|
|
echo "Tests échoués: $TESTS_FAILED"
|
|
echo "Total: $((TESTS_PASSED + TESTS_FAILED))"
|
|
echo ""
|
|
|
|
if [ $TESTS_FAILED -eq 0 ]; then
|
|
log_success "🎉 Tous les tests API sont passés !"
|
|
else
|
|
log_error "❌ Certains tests API ont échoué."
|
|
fi
|
|
}
|
|
|
|
# Fonction principale
|
|
main() {
|
|
echo "🧪 Test de l'API 4NK IA Backend"
|
|
echo ""
|
|
|
|
# Vérifier que l'API est accessible
|
|
if ! curl -f "$API_BASE_URL/api/health" > /dev/null 2>&1; then
|
|
log_error "L'API n'est pas accessible sur $API_BASE_URL"
|
|
log_info "Veuillez démarrer les services avec: ./scripts/quick-start.sh"
|
|
exit 1
|
|
fi
|
|
|
|
test_health
|
|
test_upload
|
|
test_extraction
|
|
test_documents_list
|
|
test_performance
|
|
test_security
|
|
cleanup
|
|
show_summary
|
|
}
|
|
|
|
# Gestion des signaux pour le nettoyage
|
|
trap cleanup EXIT
|
|
|
|
# Exécution
|
|
main "$@"
|