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 }