/
integration_docker.go
81 lines (72 loc) · 1.54 KB
/
integration_docker.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package integrationtest
import (
"bytes"
"context"
"io"
"strings"
dockerClient "github.com/docker/docker/client"
dockerTypes "github.com/docker/docker/api/types"
)
func createDockerClient() *dockerClient.Client {
client, err := dockerClient.NewEnvClient()
if err != nil {
panic(err)
}
return client
}
// getContainerLogs retrieves the logs of a container as a string
func getContainerLogs(
docker *dockerClient.Client,
containerID string,
) string {
ctx, cancel := context.WithTimeout(context.Background(), contextTimeout)
defer cancel()
var containerLogs bytes.Buffer
logsReader, err := docker.ContainerLogs(
ctx,
containerID,
dockerTypes.ContainerLogsOptions{ShowStdout: true},
)
if err != nil {
panic(err)
} else if _, err = io.Copy(&containerLogs, logsReader); err != nil {
panic(err)
}
return strings.Trim(containerLogs.String(), "\n")
}
func pullImage(
docker *dockerClient.Client,
imageUrl string,
) {
_, err := docker.ImagePull(
context.Background(),
imageUrl,
dockerTypes.ImagePullOptions{},
)
if err != nil {
panic(err)
}
}
func startContainer(
docker *dockerClient.Client,
containerID string,
) {
if err := docker.ContainerStart(
context.Background(),
containerID,
dockerTypes.ContainerStartOptions{},
); err != nil {
panic(err)
}
}
func stopContainer(
docker *dockerClient.Client,
containerID string,
) {
ctx, cancel := context.WithTimeout(context.Background(), contextTimeout)
defer cancel()
err := docker.ContainerStop(ctx, containerID, &dockerOpsTimeout)
if err != nil {
panic(err)
}
}