package test import ( "context" "net/http" "net/url" "strconv" "strings" "testing" "time" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" "github.com/xlgmokha/x/pkg/env" ) func normalizeIssuer(t *testing.T, originalIssuer string) (string, int) { issuer := strings.Replace(originalIssuer, "127.0.0.1", testcontainers.HostInternal, 1) u, err := url.Parse(issuer) require.NoError(t, err) port, err := strconv.Atoi(u.Port()) require.NoError(t, err) return issuer, port } func NewContainer(t *testing.T, ctx context.Context, envVars map[string]string) *testcontainers.DockerContainer { require.Equal(t, http.StatusOK, HttpGet(t, ctx, envVars["OIDC_ISSUER"]+"/.well-known/openid-configuration").StatusCode) issuer, port := normalizeIssuer(t, envVars["OIDC_ISSUER"]) envVars["OIDC_ISSUER"] = issuer t.Logf("issuer: %v, port: %v\n", issuer, port) container, err := testcontainers.Run( ctx, env.Fetch("IMAGE_TAG", "sparkled:invalid"), testcontainers.WithEnv(envVars), testcontainers.WithExposedPorts("8080/tcp", "9901/tcp", "10000/tcp"), testcontainers.WithHostPortAccess(port), testcontainers.WithLogConsumers(&LogConsumer{t: t}), testcontainers.WithWaitStrategy(wait.ForLog("Listening on").WithStartupTimeout(10*time.Second)), ) require.NoError(t, err) return container }