94 lines
2.5 KiB
Text
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")
|
|
}
|