/
pubsub.go
49 lines (42 loc) · 1.18 KB
/
pubsub.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package pubsub
import (
"context"
"fmt"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
)
// pubsubContainer represents the pubsub container type used in the module
type pubsubContainer struct {
testcontainers.Container
URI string
}
// setupPubsub creates an instance of the pubsub container type
func setupPubsub(ctx context.Context) (*pubsubContainer, error) {
req := testcontainers.ContainerRequest{
Image: "gcr.io/google.com/cloudsdktool/cloud-sdk:367.0.0-emulators",
ExposedPorts: []string{"8085/tcp"},
WaitingFor: wait.ForLog("started"),
Cmd: []string{
"/bin/sh",
"-c",
"gcloud beta emulators pubsub start --host-port 0.0.0.0:8085",
},
}
container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})
if err != nil {
return nil, err
}
mappedPort, err := container.MappedPort(ctx, "8085")
if err != nil {
return nil, err
}
hostIP, err := container.Host(ctx)
if err != nil {
return nil, err
}
uri := fmt.Sprintf("%s:%s", hostIP, mappedPort.Port())
return &pubsubContainer{Container: container, URI: uri}, nil
}