1d45f232c6
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>
64 lines
1.6 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|