veza/veza-backend-api/scripts/test_coverage_by_groups.sh
senke 9e16672953 [T0-006] test(backend): Amélioration couverture tests Go - Scripts et tests RBAC
- Scripts créés pour exécuter tests par groupes/packages (évite crashes RAM)
- Tests complets pour handlers RBAC (16 tests, tous passent)
- Interface RBACServiceInterface créée pour permettre mock dans tests
- Couverture actuelle: 29.8% (objectif: 80%)

Files:
- veza-backend-api/scripts/test_coverage_by_groups.sh (créé)
- veza-backend-api/scripts/test_coverage_one_by_one.sh (créé)
- veza-backend-api/internal/api/handlers/rbac_handlers.go (modifié)
- veza-backend-api/internal/api/handlers/rbac_handlers_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 4 actual (travail en cours)
2026-01-04 01:44:21 +01:00

117 lines
4.4 KiB
Bash
Executable file

#!/bin/bash
# Script pour exécuter les tests par groupes et calculer la couverture totale
set -e
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$BASE_DIR"
# Nombre de packages par groupe (réduit pour éviter les problèmes de RAM)
GROUP_SIZE=3
COVERAGE_DIR="coverage_groups"
TOTAL_COVERAGE="coverage_total.out"
# Créer le dossier pour les fichiers de couverture par groupe
mkdir -p "$COVERAGE_DIR"
rm -f "$COVERAGE_DIR"/*.out
echo "📦 Récupération de la liste des packages..."
PACKAGES=$(go list ./internal/...)
TOTAL=$(echo "$PACKAGES" | wc -l)
echo " Total: $TOTAL packages"
# Diviser en groupes
GROUP_NUM=1
CURRENT_GROUP=0
CURRENT_PACKAGES=""
echo ""
echo "🧪 Exécution des tests par groupes de $GROUP_SIZE packages..."
for pkg in $PACKAGES; do
CURRENT_PACKAGES="$CURRENT_PACKAGES $pkg"
CURRENT_GROUP=$((CURRENT_GROUP + 1))
if [ $CURRENT_GROUP -ge $GROUP_SIZE ]; then
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Groupe $GROUP_NUM ($CURRENT_GROUP packages)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
COVERAGE_FILE="$COVERAGE_DIR/group_${GROUP_NUM}.out"
# Exécuter les tests pour ce groupe (avec timeout et limite mémoire)
if timeout 60 go test -coverprofile="$COVERAGE_FILE" -short $CURRENT_PACKAGES 2>&1; then
echo "✅ Groupe $GROUP_NUM terminé"
if [ -f "$COVERAGE_FILE" ]; then
LINES=$(wc -l < "$COVERAGE_FILE")
echo " Couverture: $LINES lignes"
fi
else
echo "⚠️ Groupe $GROUP_NUM a des échecs (continuons...)"
fi
GROUP_NUM=$((GROUP_NUM + 1))
CURRENT_GROUP=0
CURRENT_PACKAGES=""
# Pause plus longue pour libérer la mémoire
sleep 2
# Nettoyer la mémoire Go si possible
go clean -cache -testcache 2>/dev/null || true
fi
done
# Traiter le dernier groupe s'il reste des packages
if [ $CURRENT_GROUP -gt 0 ]; then
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Groupe $GROUP_NUM ($CURRENT_GROUP packages)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
COVERAGE_FILE="$COVERAGE_DIR/group_${GROUP_NUM}.out"
if timeout 60 go test -coverprofile="$COVERAGE_FILE" -short $CURRENT_PACKAGES 2>&1; then
echo "✅ Groupe $GROUP_NUM terminé"
if [ -f "$COVERAGE_FILE" ]; then
LINES=$(wc -l < "$COVERAGE_FILE")
echo " Couverture: $LINES lignes"
fi
else
echo "⚠️ Groupe $GROUP_NUM a des échecs"
fi
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 Combinaison des fichiers de couverture..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Combiner tous les fichiers de couverture
echo "mode: set" > "$TOTAL_COVERAGE"
for file in "$COVERAGE_DIR"/group_*.out; do
if [ -f "$file" ]; then
# Ignorer la première ligne (mode: set) de chaque fichier
tail -n +2 "$file" >> "$TOTAL_COVERAGE" 2>/dev/null || true
fi
done
echo "✅ Couverture totale générée: $TOTAL_COVERAGE"
# Calculer le pourcentage de couverture
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📈 Statistiques de couverture"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ -f "$TOTAL_COVERAGE" ]; then
go tool cover -func="$TOTAL_COVERAGE" | tail -1
echo ""
echo "Pour voir le rapport HTML:"
echo " go tool cover -html=$TOTAL_COVERAGE"
else
echo "❌ Aucun fichier de couverture généré"
fi