//go:build integration // +build integration package integration import ( "context" "os" "testing" "time" "codeberg.org/codeberg/pages/cmd" "github.com/rs/zerolog/log" "github.com/urfave/cli/v2" ) func TestMain(m *testing.M) { log.Printf("=== TestMain: START Server ===\n") serverCtx, serverCancel := context.WithCancel(context.Background()) if err := startServer(serverCtx); err != nil { log.Fatal().Msgf("could not start server: %v", err) } defer func() { serverCancel() log.Printf("=== TestMain: Server STOPED ===\n") }() time.Sleep(10 * time.Second) os.Exit(m.Run()) } func startServer(ctx context.Context) error { args := []string{ "--verbose", "--acme-accept-terms", "true", } setEnvIfNotSet("ACME_API", "https://acme.mock.directory") setEnvIfNotSet("PAGES_DOMAIN", "localhost.mock.directory") setEnvIfNotSet("RAW_DOMAIN", "raw.localhost.mock.directory") setEnvIfNotSet("PORT", "4430") app := cli.NewApp() app.Name = "pages-server" app.Action = cmd.Serve app.Flags = cmd.ServeFlags go func() { if err := app.RunContext(ctx, args); err != nil { log.Fatal().Msgf("run server error: %v", err) } }() return nil } func setEnvIfNotSet(key, value string) { if _, set := os.LookupEnv(key); !set { os.Setenv(key, value) } }