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

196 lines
5.7 KiB
Text

package handlers
import (
"encoding/json"
"github.com/google/uuid"
"net/http"
"net/http/httptest"
"testing"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSystemMetrics(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
body := w.Body.String()
assert.Contains(t, body, "memory")
assert.Contains(t, body, "goroutines")
assert.Contains(t, body, "cpu_count")
assert.Contains(t, body, "timestamp")
}
func TestSystemMetrics_JSONFormat(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
assert.Contains(t, w.Header().Get("Content-Type"), "application/json")
var response map[string]interface{}
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err, "Response should be valid JSON")
// Vérifier la structure
assert.Contains(t, response, "timestamp")
assert.Contains(t, response, "memory")
assert.Contains(t, response, "goroutines")
assert.Contains(t, response, "cpu_count")
}
func TestSystemMetrics_MemoryMetrics(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
var response map[string]interface{}
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err)
// Vérifier les métriques mémoire
memory, ok := response["memory"].(map[string]interface{})
require.True(t, ok, "Memory should be an object")
assert.Contains(t, memory, "alloc_mb")
assert.Contains(t, memory, "total_alloc_mb")
assert.Contains(t, memory, "sys_mb")
assert.Contains(t, memory, "num_gc")
// Vérifier que les valeurs sont des nombres
assert.NotNil(t, memory["alloc_mb"])
assert.NotNil(t, memory["total_alloc_mb"])
assert.NotNil(t, memory["sys_mb"])
assert.NotNil(t, memory["num_gc"])
}
func TestSystemMetrics_Goroutines(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
var response map[string]interface{}
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err)
// Vérifier que goroutines est présent et est un nombre
goroutines, ok := response["goroutines"]
require.True(t, ok, "Goroutines should be present")
goroutinesNum, ok := goroutines.(float64)
require.True(t, ok, "Goroutines should be a number")
assert.Greater(t, goroutinesNum, float64(0), "Should have at least one goroutine")
}
func TestSystemMetrics_CPUCount(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
var response map[string]interface{}
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err)
// Vérifier que cpu_count est présent et est un nombre
cpuCount, ok := response["cpu_count"]
require.True(t, ok, "CPU count should be present")
cpuCountNum, ok := cpuCount.(float64)
require.True(t, ok, "CPU count should be a number")
assert.Greater(t, cpuCountNum, float64(0), "Should have at least one CPU")
}
func TestSystemMetrics_Timestamp(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
var response map[string]interface{}
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err)
// Vérifier que timestamp est présent et est un nombre
timestamp, ok := response["timestamp"]
require.True(t, ok, "Timestamp should be present")
timestampNum, ok := timestamp.(float64)
require.True(t, ok, "Timestamp should be a number")
assert.Greater(t, timestampNum, float64(0), "Timestamp should be positive")
}
func TestSystemMetrics_MultipleRequests(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.GET("/system/metrics", SystemMetrics)
// Faire plusieurs requêtes et vérifier que les métriques changent
var timestamps []float64
for i := 0; i < 3; i++ {
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/system/metrics", nil)
router.ServeHTTP(w, req)
assert.Equal(t, http.StatusOK, w.Code)
var response map[string]interface{}
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err)
timestamp := response["timestamp"].(float64)
timestamps = append(timestamps, timestamp)
}
// Les timestamps devraient être différents (ou au moins l'un devrait être différent)
// Mais ils pourraient être identiques si les requêtes sont très rapides
// On vérifie juste qu'ils sont tous valides
for _, ts := range timestamps {
assert.Greater(t, ts, float64(0))
}
}
func TestBToMb(t *testing.T) {
// Tester la conversion bytes vers megabytes
assert.Equal(t, uint64(0), bToMb(0))
assert.Equal(t, uint64(0), bToMb(1024*1024-1))
assert.Equal(t, uint64(1), bToMb(1024*1024))
assert.Equal(t, uint64(2), bToMb(2*1024*1024))
assert.Equal(t, uint64(100), bToMb(100*1024*1024))
}