Files
poimen-workflows/internal/health/health_test.go
T

111 lines
3.2 KiB
Go
Raw Normal View History

package health
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
// TestNewChecker tests the creation of a new health checker
func TestNewChecker(t *testing.T) {
checker := NewChecker(nil)
assert.NotNil(t, checker)
assert.Equal(t, 30*time.Second, checker.checkInterval)
}
// TestCheckWithNilClient tests health check with nil client
func TestCheckWithNilClient(t *testing.T) {
checker := NewChecker(nil)
report := checker.Check(context.Background())
assert.NotNil(t, report)
assert.Equal(t, StatusUnhealthy, report.Status)
assert.Len(t, report.Components, 1)
assert.Equal(t, StatusUnhealthy, report.Components["temporal"].Status)
assert.Equal(t, "Temporal client not initialized", report.Components["temporal"].Error)
}
// TestIsHealthy tests the IsHealthy method
func TestIsHealthy(t *testing.T) {
checker := NewChecker(nil)
assert.False(t, checker.IsHealthy(context.Background()))
}
// TestGetReport tests the GetReport method
func TestGetReport(t *testing.T) {
checker := NewChecker(nil)
report := checker.GetReport(context.Background())
assert.NotNil(t, report)
assert.Equal(t, StatusUnhealthy, report.Status)
}
// TestHealthReportJSON tests JSON serialization
func TestHealthReportJSON(t *testing.T) {
checker := NewChecker(nil)
report := checker.Check(context.Background())
jsonData, err := report.ToJSON()
assert.NoError(t, err)
assert.NotEmpty(t, jsonData)
assert.Contains(t, string(jsonData), "unhealthy")
assert.Contains(t, string(jsonData), "temporal")
}
// TestHealthReportTimestamp tests that timestamp is set
func TestHealthReportTimestamp(t *testing.T) {
checker := NewChecker(nil)
before := time.Now()
report := checker.Check(context.Background())
after := time.Now()
assert.True(t, report.Timestamp.After(before) || report.Timestamp.Equal(before))
assert.True(t, report.Timestamp.Before(after) || report.Timestamp.Equal(after))
}
// TestStatusString tests Status string representation
func TestStatusString(t *testing.T) {
assert.Equal(t, "healthy", StatusHealthy.String())
assert.Equal(t, "unhealthy", StatusUnhealthy.String())
assert.Equal(t, "unknown", StatusUnknown.String())
}
// TestComponentHealthLatency tests that latency is recorded
func TestComponentHealthLatency(t *testing.T) {
checker := NewChecker(nil)
report := checker.Check(context.Background())
assert.NotNil(t, report.Components["temporal"])
assert.GreaterOrEqual(t, report.Components["temporal"].Latency, int64(0))
}
// TestHealthCheckCaching tests that recent checks are cached
func TestHealthCheckCaching(t *testing.T) {
checker := NewChecker(nil)
// First check
report1 := checker.Check(context.Background())
time1 := report1.Timestamp
// Second check immediately (should be cached)
time.Sleep(100 * time.Millisecond)
report2 := checker.Check(context.Background())
time2 := report2.Timestamp
// Timestamps should be the same or very close (cached)
assert.Equal(t, time1, time2, "second check should use cached result")
}
// TestComponentHealthDefaults tests default component health values
func TestComponentHealthDefaults(t *testing.T) {
comp := ComponentHealth{
Name: "test",
Status: StatusHealthy,
}
assert.Equal(t, "test", comp.Name)
assert.Equal(t, StatusHealthy, comp.Status)
assert.Empty(t, comp.Error)
}