forked from cayleygraph/cayley
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dock.go
69 lines (61 loc) · 1.19 KB
/
dock.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
package dock
import (
"github.com/fsouza/go-dockerclient"
"testing"
"time"
)
var (
Address = `unix:///var/run/docker.sock`
)
type Config struct {
docker.Config
docker.HostConfig
}
func Run(t testing.TB, conf Config) (addr string, closer func()) {
if testing.Short() {
t.SkipNow()
}
cli, err := docker.NewClient(Address)
if err != nil {
t.Fatal(err)
}
cont, err := cli.CreateContainer(docker.CreateContainerOptions{
Config: &conf.Config,
HostConfig: &conf.HostConfig,
})
if err != nil {
t.Skip(err)
}
closer = func() {
cli.RemoveContainer(docker.RemoveContainerOptions{
ID: cont.ID,
Force: true,
})
}
if err := cli.StartContainer(cont.ID, &conf.HostConfig); err != nil {
closer()
t.Skip(err)
}
info, err := cli.InspectContainer(cont.ID)
if err != nil {
closer()
t.Skip(err)
}
addr = info.NetworkSettings.IPAddress
return
}
func RunAndWait(t testing.TB, conf Config, check func(string) bool) (addr string, closer func()) {
addr, closer = Run(t, conf)
ok := false
for i := 0; i < 10 && !ok; i++ {
ok = check(addr)
if !ok {
time.Sleep(time.Second * 2)
}
}
if !ok {
closer()
t.Fatal("Container check fails.")
}
return addr, closer
}