package repository import ( "context" "fmt" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" ) const ( Host = "127.0.0.1" Port = "27017" Schema = "mongodb" ) func startMongoContainer() (string, string, func(), error) { ctx := context.Background() req := testcontainers.ContainerRequest{ Image: "mongo:latest", ExposedPorts: []string{"27017/tcp"}, WaitingFor: wait.ForListeningPort("27017/tcp"), } mongoC, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) if err != nil { return "", "", nil, err } port, err := mongoC.MappedPort(ctx, Port) if err != nil { return "", "", nil, err } host, err := mongoC.Host(ctx) if err != nil { return "", "", nil, err } uri := fmt.Sprintf("mongodb://%s:%s", host, port.Port()) tearDown := func() { mongoC.Terminate(ctx) } fmt.Printf("Connecting to %s\n", uri) return host, port.Port(), tearDown, nil }