veza/veza-backend-api/internal/handlers/metrics_test.go.disabled

94 lines
2.5 KiB
Text

package handlers
import (
"errors"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
func TestPrometheusMetricsEndpoint(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/metrics", PrometheusMetrics())
// Enregistrer quelques erreurs pour avoir des métriques à exposer
metrics.RecordErrorPrometheus(1000, 401)
metrics.RecordErrorPrometheus(2000, 400)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
body := w.Body.String()
// Vérifier que le format Prometheus est valide
assert.Contains(t, body, "# HELP")
assert.Contains(t, body, "# TYPE")
// Vérifier que nos métriques sont présentes
assert.True(t, strings.Contains(body, "veza_errors_total") ||
strings.Contains(body, "go_") ||
strings.Contains(body, "process_"),
"Should contain Prometheus metrics")
}
func TestPrometheusMetricsEndpoint_Format(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/metrics", PrometheusMetrics())
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/metrics", nil)
router.ServeHTTP(w, req)
require.Equal(t, http.StatusOK, w.Code)
body := w.Body.String()
// Vérifier que c'est du texte Prometheus (pas du JSON)
assert.NotContains(t, body, `{"`)
assert.NotContains(t, body, `"error"`)
// Vérifier la présence de métriques système Prometheus
// (go_* et process_* sont toujours présents)
assert.True(t, strings.Contains(body, "go_") || strings.Contains(body, "process_"))
}
func TestPrometheusMetricsEndpoint_MultipleRequests(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/metrics", PrometheusMetrics())
// Faire plusieurs requêtes
for i := 0; i < 3; i++ {
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
}
}
func TestPrometheusMetricsEndpoint_ContentType(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/metrics", PrometheusMetrics())
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
// Prometheus utilise text/plain par défaut
contentType := w.Header().Get("Content-Type")
assert.Contains(t, contentType, "text/plain", "Prometheus metrics should be text/plain")
}