Files
story/cmd/mock-provider/main_test.go
T

46 lines
1.4 KiB
Go

package main
import (
"context"
"io"
"log/slog"
"strings"
"testing"
"time"
)
func TestRunValidatesConfiguration(t *testing.T) {
logger := slog.New(slog.NewJSONHandler(io.Discard, nil))
t.Setenv("MOCK_PROVIDER_DUPLICATE_CALLBACKS", "invalid")
if err := run(context.Background(), logger); err == nil || !strings.Contains(err.Error(), "duplicate callback") {
t.Fatalf("duplicate validation error=%v", err)
}
t.Setenv("MOCK_PROVIDER_DUPLICATE_CALLBACKS", "2")
t.Setenv("MOCK_PROVIDER_START_DELAY", "invalid")
if err := run(context.Background(), logger); err == nil || !strings.Contains(err.Error(), "start delay") {
t.Fatalf("delay validation error=%v", err)
}
}
func TestRunStartsAndShutsDown(t *testing.T) {
logger := slog.New(slog.NewJSONHandler(io.Discard, nil))
t.Setenv("HTTP_ADDR", "127.0.0.1:0")
t.Setenv("MOCK_PROVIDER_START_DELAY", "1ms")
t.Setenv("MOCK_PROVIDER_DUPLICATE_CALLBACKS", "1")
ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
if err := run(ctx, logger); err != nil {
t.Fatalf("provider lifecycle: %v", err)
}
}
func TestEnvUsesValueAndFallback(t *testing.T) {
t.Setenv("MOCK_PROVIDER_TEST_VALUE", "configured")
if got := env("MOCK_PROVIDER_TEST_VALUE", "fallback"); got != "configured" {
t.Fatalf("value=%q", got)
}
if got := env("MOCK_PROVIDER_MISSING_VALUE", "fallback"); got != "fallback" {
t.Fatalf("fallback=%q", got)
}
}