Files
query-orchestration/internal/test/queuecontainer.go
T

82 lines
1.9 KiB
Go
Raw Normal View History

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()
}
}