package test import ( "context" "fmt" queryservice "queryorchestration/api/queryService" "queryorchestration/internal/serviceconfig" "testing" "github.com/docker/go-connections/nat" "github.com/testcontainers/testcontainers-go" ) type Service = string const ( QueryService = queryservice.Name ) type ServiceConfig struct { Name Service Cfg serviceconfig.ConfigProvider Network *testcontainers.DockerNetwork Env map[string]string } func CreateService(t *testing.T, ctx context.Context, config *ServiceConfig) (*Container, func()) { port, err := nat.NewPort("tcp", "8080") if err != nil { t.Fatalf("Failed to create port: %v", err) } container, cleanup := createContainer(t, ctx, &containerConfig{ Cfg: config.Cfg, Name: config.Name, Network: config.Network, Env: config.Env, ExposedPorts: []nat.Port{port}, WaitForMsg: "⇨ http server started on [::]:8080", }) host, err := container.Host(ctx) if err != nil { t.Fatalf("Failed to extract host: %v", err) } mappedPort, err := container.MappedPort(ctx, port) if err != nil { t.Fatalf("Failed to extract port: %v", err) } address := fmt.Sprintf("http://%s:%s", host, mappedPort.Port()) return &Container{ URI: address, Container: container, }, cleanup }