package test import ( "context" "testing" "github.com/aws/aws-sdk-go-v2/aws" "github.com/testcontainers/testcontainers-go" ) type QueueContainerConfig struct { ServiceName string Queue *queueConfig DB *ExternalDatabase Network *testcontainers.DockerNetwork } func CreateQueueContainer(t *testing.T, ctx context.Context, config *QueueContainerConfig) func() { queueCredentials, err := config.Queue.Credentials.Retrieve(ctx) if err != nil { t.Fatal(err) } _, cleanup := createContainer(t, ctx, &containerConfig{ Network: config.Network, ServiceName: config.ServiceName, DB: config.DB, WaitForMsg: "Listening to queue", Env: map[string]string{ "QUEUE_URL": config.Queue.URL, "AWS_DEFAULT_REGION": config.Queue.Region, "AWS_REGION": config.Queue.Region, "AWS_ACCESS_KEY_ID": queueCredentials.AccessKeyID, "AWS_SECRET_ACCESS_KEY": queueCredentials.SecretAccessKey, "AWS_SESSION_TOKEN": queueCredentials.SessionToken, "AWS_ENDPOINT_URL_SQS": config.Queue.Endpoint, }, }) return cleanup } type queueConfig struct { URL string Region string Endpoint string Credentials aws.CredentialsProvider } func CreateQueueWithDependencies(t *testing.T, ctx context.Context, serviceName string) (*QueueConfig, func()) { network, ncleanup := CreateNetwork(t, ctx) dbconfig, dbcleanup := CreateDB(t, ctx, &CreateDatabaseConfig{ Network: network, }) qCfg, qcleanup := CreateQueue(t, ctx, &CreateQueueConfig{ Network: network, }) cfg := &queueConfig{ URL: qCfg.URL, Region: qCfg.External.Region, Endpoint: qCfg.External.Endpoint, Credentials: qCfg.External.Credentials, } ccleanup := CreateQueueContainer(t, ctx, &QueueContainerConfig{ ServiceName: serviceName, Queue: cfg, DB: dbconfig.External, Network: network, }) return qCfg, func() { ncleanup() dbcleanup() qcleanup() ccleanup() } }