70 lines
2.2 KiB
Go
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
|
|
}
|