Files
query-orchestration/internal/test/container.go
T
Michael McGuinness 7001ca854c Merged in feature/docinitialisation (pull request #41)
Queuing Changes and Cfg Testing

* staarting

* staarting

* startedpush

* note

* save

* mocking

* removederrs

* fixtests

* cleanuperrs

* newenvsetup

* preppingtests

* queue

* mmovetocfgpassunittests

* sortoutconfig

* passinginteg

* deps

* fixtests
2025-02-03 17:30:50 +00:00

95 lines
2.3 KiB
Go

package test
import (
"bufio"
"context"
"fmt"
"log/slog"
"queryorchestration/internal/serviceconfig"
"strconv"
"testing"
"github.com/docker/go-connections/nat"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
)
type Container struct {
Container testcontainers.Container
URI string
}
type containerConfig struct {
Name string
Cfg *serviceconfig.BaseConfig
Network *testcontainers.DockerNetwork
Env map[string]string
WaitForMsg string
ExposedPorts []nat.Port
}
func createContainer(t *testing.T, ctx context.Context, cfg *containerConfig) (testcontainers.Container, func()) {
env := map[string]string{
"DB_USER": cfg.Cfg.DBUser,
"DB_PASS": cfg.Cfg.DBSecret,
"DB_HOST": cfg.Cfg.DBHost,
"DB_NAME": cfg.Cfg.DBName,
"DB_PORT": strconv.Itoa(cfg.Cfg.DBPort),
"DB_NOSSL": "true",
"AWS_ACCESS_KEY_ID": cfg.Cfg.AWSKeyID,
"AWS_SECRET_ACCESS_KEY": cfg.Cfg.AWSRegion,
"AWS_REGION": cfg.Cfg.AWSSecretKey,
"AWS_ENDPOINT_URL_SQS": cfg.Cfg.AWSEndpointUrlSQS,
}
if cfg.Env != nil {
for k, v := range cfg.Env {
env[k] = v
}
}
req := testcontainers.ContainerRequest{
Image: "queryorchestration:latest",
Env: env,
Networks: []string{cfg.Network.Name},
WaitingFor: wait.ForLog(cfg.WaitForMsg),
Entrypoint: []string{fmt.Sprintf("./%s", cfg.Name)},
}
if len(cfg.ExposedPorts) > 0 {
ports := make([]string, len(cfg.ExposedPorts))
for index, port := range cfg.ExposedPorts {
ports[index] = port.Port()
}
req.ExposedPorts = ports
// req.WaitingFor = wait.ForAll(
// // wait.ForExposedPort(),
// // wait.ForListeningPort(cfg.ExposedPorts[0]),
// wait.ForLog(cfg.WaitForMsg),
// )
}
container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})
if err != nil {
logs, _ := container.Logs(ctx)
defer logs.Close()
scanner := bufio.NewScanner(logs)
for scanner.Scan() {
line := scanner.Text()
slog.Error(line)
}
t.Fatalf("Failed to start container: %v", err)
}
return container, func() {
err := container.Terminate(ctx)
if err != nil {
t.Error(err)
}
}
}