package test import ( "context" "net/http" "testing" xcontainer "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/network" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/log" "github.com/testcontainers/testcontainers-go/modules/postgres" "github.com/testcontainers/testcontainers-go/wait" "github.com/xlgmokha/x/pkg/env" ) 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) container, err := testcontainers.Run( ctx, env.Fetch("IMAGE_TAG", "sparkled:invalid"), testcontainers.WithEnv(envVars), testcontainers.WithLogConsumers(&Logger{TB: t}), testcontainers.WithLogger(log.TestLogger(t)), testcontainers.WithMounts(testcontainers.BindMount("Procfile.test", "/Procfile")), testcontainers.WithWaitStrategy( wait.ForHTTP("/").WithPort("10000"), ), testcontainers.WithHostConfigModifier(func(cfg *xcontainer.HostConfig) { cfg.NetworkMode = xcontainer.NetworkMode(network.NetworkHost) }), // testcontainers.WithExposedPorts("10000/tcp"), // testcontainers.WithHostPortAccess(port), ) require.NoError(t, err) return container } func NewPgContainer(ctx context.Context, t *testing.T) *postgres.PostgresContainer { container, err := postgres.Run(ctx, "postgres:17", postgres.WithDatabase("sparkle_test"), postgres.WithUsername("postgres"), postgres.WithPassword("secret"), testcontainers.WithLogConsumers(&Logger{TB: t}), testcontainers.WithLogger(log.TestLogger(t)), testcontainers.WithWaitStrategy( wait.ForListeningPort("5432/tcp"), ), ) require.NoError(t, err) return container }