//go:build integration // +build integration package test import ( "context" "net/http" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/xlgmokha/x/pkg/env" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/web" ) func environmentVariables(srv *web.OIDCServer, databaseURL string) map[string]string { return map[string]string{ "APP_ENV": "test", "AUTHZD_HOST": "", "DATABASE_URL": databaseURL, "DEBUG": env.Fetch("DEBUG", ""), "HMAC_SESSION_SECRET": "secret", "LOG_LEVEL": "warn", "OAUTH_CLIENT_ID": srv.MockOIDC.ClientID, "OAUTH_CLIENT_SECRET": srv.MockOIDC.ClientSecret, "OIDC_ISSUER": srv.Issuer(), "RUNWAY_PG_USER_POSTGRES_PASSWORD_SPARKLE": "secret", "ZED_ENDPOINT": ":50051", "ZED_TOKEN": "secret", } } func TestContainer(t *testing.T) { srv := web.NewOIDCServer(t) defer srv.Close() ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) defer cancel() pgContainer := NewPgContainer(ctx, t) defer pgContainer.Terminate(ctx) databaseURL, err := pgContainer.ConnectionString(ctx, "sslmode=disable") require.NoError(t, err) container := NewContainer(t, ctx, environmentVariables(srv, databaseURL)) defer testcontainers.TerminateContainer(container) require.True(t, container.IsRunning()) envoyEndpoint, err := container.PortEndpoint(ctx, "10000", "http") require.NoError(t, err) for _, publicPath := range []string{ envoyEndpoint + "/", envoyEndpoint + "/application.js", envoyEndpoint + "/favicon.ico", envoyEndpoint + "/favicon.png", envoyEndpoint + "/health", envoyEndpoint + "/index.html", envoyEndpoint + "/logo.png", srv.DiscoveryEndpoint(), } { t.Run(publicPath, func(t *testing.T) { assert.Equal(t, http.StatusOK, HttpGet(t, ctx, publicPath).StatusCode) }) } }