Files
fn_registry/functions/infra/health_check_http_test.go
T
egutierrez 1d45f232c6 feat: funciones infra — Docker, deploy, build y health check
Funciones impuras para gestión de contenedores: docker_build_image,
docker_compose_up/down, docker_volume_create/list/remove,
generate_dockerfile, write_dockerfile, go_build_binary, health_check_http,
deploy_app y stop_app. Todas con tests unitarios donde aplica.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 14:24:12 +02:00

64 lines
1.6 KiB
Go

package infra
import (
"net/http"
"net/http/httptest"
"testing"
"time"
)
func TestHealthCheckHTTP(t *testing.T) {
t.Run("retorna nil cuando el servidor responde 200", func(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}))
defer srv.Close()
err := HealthCheckHTTP(srv.URL, 5, 100)
if err != nil {
t.Errorf("se esperaba nil, got: %v", err)
}
})
t.Run("retorna error si el timeout se agota", func(t *testing.T) {
// Servidor que nunca responde 200
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusServiceUnavailable)
}))
defer srv.Close()
err := HealthCheckHTTP(srv.URL, 1, 200)
if err == nil {
t.Error("se esperaba error por timeout")
}
})
t.Run("respeta el intervalo entre intentos", func(t *testing.T) {
attempts := 0
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
attempts++
if attempts >= 3 {
w.WriteHeader(http.StatusOK)
} else {
w.WriteHeader(http.StatusServiceUnavailable)
}
}))
defer srv.Close()
start := time.Now()
err := HealthCheckHTTP(srv.URL, 5, 150)
elapsed := time.Since(start)
if err != nil {
t.Errorf("se esperaba nil despues de 3 intentos, got: %v", err)
}
// Con 2 intervalos de 150ms debe haber pasado al menos 250ms
if elapsed < 250*time.Millisecond {
t.Errorf("elapsed %v demasiado rapido, se esperaban al menos 250ms", elapsed)
}
if attempts < 3 {
t.Errorf("se esperaban al menos 3 intentos, got %d", attempts)
}
})
}