2025-02-03 17:30:50 +00:00
|
|
|
package test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
2025-03-05 12:05:46 +00:00
|
|
|
"testing"
|
|
|
|
|
|
2025-02-03 17:30:50 +00:00
|
|
|
queryservice "queryorchestration/api/queryService"
|
|
|
|
|
"queryorchestration/internal/serviceconfig"
|
|
|
|
|
|
|
|
|
|
"github.com/docker/go-connections/nat"
|
2025-03-04 15:51:03 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2025-02-03 17:30:50 +00:00
|
|
|
"github.com/testcontainers/testcontainers-go"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Service = string
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
QueryService = queryservice.Name
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type ServiceConfig struct {
|
|
|
|
|
Name Service
|
2025-02-05 12:52:41 +00:00
|
|
|
Cfg serviceconfig.ConfigProvider
|
2025-02-03 17:30:50 +00:00
|
|
|
Network *testcontainers.DockerNetwork
|
|
|
|
|
Env map[string]string
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-14 10:56:24 +00:00
|
|
|
func CreateService(t testing.TB, ctx context.Context, config *ServiceConfig) (*Container, func()) {
|
2025-02-03 17:30:50 +00:00
|
|
|
port, err := nat.NewPort("tcp", "8080")
|
2025-03-04 15:51:03 +00:00
|
|
|
require.NoError(t, err)
|
2025-02-03 17:30:50 +00:00
|
|
|
|
|
|
|
|
container, cleanup := createContainer(t, ctx, &containerConfig{
|
2025-02-14 10:56:24 +00:00
|
|
|
Cfg: config.Cfg,
|
|
|
|
|
Name: config.Name,
|
|
|
|
|
Network: config.Network,
|
|
|
|
|
Env: config.Env,
|
|
|
|
|
WaitForMsg: "⇨ http server started on [::]:8080",
|
2025-02-03 17:30:50 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
host, err := container.Host(ctx)
|
2025-03-04 15:51:03 +00:00
|
|
|
require.NoError(t, err)
|
2025-02-03 17:30:50 +00:00
|
|
|
mappedPort, err := container.MappedPort(ctx, port)
|
2025-03-04 15:51:03 +00:00
|
|
|
require.NoError(t, err)
|
2025-02-03 17:30:50 +00:00
|
|
|
|
|
|
|
|
address := fmt.Sprintf("http://%s:%s", host, mappedPort.Port())
|
|
|
|
|
|
|
|
|
|
return &Container{
|
|
|
|
|
URI: address,
|
|
|
|
|
Container: container,
|
|
|
|
|
}, cleanup
|
|
|
|
|
}
|