veza/veza-backend-api/internal/metrics/db_pool_test.go
2025-12-12 21:34:34 -05:00

70 lines
2.2 KiB
Go

package metrics
import (
"database/sql"
"testing"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// TestUpdateDBPoolStats vérifie que les métriques DB pool sont mises à jour
// MOD-P2-004: Test pour valider que les métriques DB pool sont exposées
func TestUpdateDBPoolStats(t *testing.T) {
// Créer des stats de test (simule sql.DBStats)
stats := sql.DBStats{
OpenConnections: 5,
InUse: 2,
Idle: 3,
WaitCount: 10,
WaitDuration: 100 * time.Millisecond,
MaxIdleClosed: 5,
MaxIdleTimeClosed: 3,
MaxLifetimeClosed: 2,
}
// Mettre à jour les métriques
UpdateDBPoolStats(stats)
// Vérifier que les métriques ont été enregistrées
registry := prometheus.DefaultRegisterer.(*prometheus.Registry)
metricFamilies, err := registry.Gather()
require.NoError(t, err)
// Vérifier que les métriques existent
foundOpenConnections := false
foundInUse := false
foundIdle := false
for _, mf := range metricFamilies {
switch *mf.Name {
case "veza_db_pool_open_connections":
foundOpenConnections = true
assert.GreaterOrEqual(t, len(mf.Metric), 0)
case "veza_db_pool_in_use":
foundInUse = true
assert.GreaterOrEqual(t, len(mf.Metric), 0)
case "veza_db_pool_idle":
foundIdle = true
assert.GreaterOrEqual(t, len(mf.Metric), 0)
}
}
assert.True(t, foundOpenConnections, "veza_db_pool_open_connections metric should exist")
assert.True(t, foundInUse, "veza_db_pool_in_use metric should exist")
assert.True(t, foundIdle, "veza_db_pool_idle metric should exist")
}
// TestStartDBPoolStatsCollector vérifie que le collecteur démarre correctement
// MOD-P2-004: Test pour valider que le collecteur périodique fonctionne
// Note: Ce test vérifie juste que la fonction ne crash pas (ne peut pas tester le comportement périodique facilement)
func TestStartDBPoolStatsCollector(t *testing.T) {
// Test avec nil (ne doit pas crash)
StartDBPoolStatsCollector(nil, 100*time.Millisecond)
// Note: Pour tester avec une vraie DB, il faudrait un driver SQLite
// Pour l'instant, on vérifie juste que la fonction ne crash pas
// Le comportement réel sera testé en intégration
}