-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker_environment_test.go
104 lines (83 loc) · 2.1 KB
/
docker_environment_test.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package dockerit
import (
"github.com/stretchr/testify/assert"
"sync/atomic"
"syscall"
"testing"
"time"
)
func TestNewDockerEnvironmentFailsWhenComponentListIsEmpty(t *testing.T) {
a := assert.New(t)
_, err := NewDockerEnvironment()
a.NotNil(err)
a.EqualError(err, "Component list is empty")
}
func TestNewDockerEnvironmentStartFails(t *testing.T) {
a := assert.New(t)
env, err := NewDockerEnvironment(
DockerComponent{
Name: "it-busybox",
Image: "busybox",
ForcePull: true,
FollowLogs: false,
},
)
a.Nil(err)
a.EqualError(env.Start(), "No component was provided to start")
a.EqualError(env.StartParallel(), "No component was provided to start in parallel")
a.EqualError(env.Start("it-unknown"), "DockerComponent [it-unknown] is not configured")
a.EqualError(env.StartParallel("it-unknown"), "DockerComponent [it-unknown] is not configured")
}
func TestNewDockerEnvironmentLifeCycle(t *testing.T) {
a := assert.New(t)
env, err := NewDockerEnvironment(
DockerComponent{
Name: "it-busybox",
Image: "busybox",
ForcePull: true,
FollowLogs: true,
},
)
a.Nil(err)
err = env.Start("it-busybox")
a.Nil(err)
err = env.Stop("it-busybox")
a.Nil(err)
err = env.Start("it-busybox")
a.Nil(err)
err = env.Stop("it-busybox")
a.Nil(err)
err = env.Destroy("it-busybox")
a.Nil(err)
var counter uint32
beforeShutdown := func() {
atomic.AddUint32(&counter, 1)
}
env.Shutdown(beforeShutdown)
env.Shutdown(beforeShutdown)
// shutdown is invoked only once
a.Equal(uint32(1), atomic.LoadUint32(&counter))
}
func TestNewDockerEnvironmentWithShutdown(t *testing.T) {
a := assert.New(t)
env, err := NewDockerEnvironment(
DockerComponent{
Name: "it-busybox",
Image: "busybox",
ForcePull: true,
FollowLogs: true,
},
)
var counter uint32
doneChannel := env.WithShutdown(func() {
atomic.AddUint32(&counter, 1)
})
err = env.Start("it-busybox")
a.Nil(err)
syscall.Kill(syscall.Getpid(), syscall.SIGTERM)
select {
case <-doneChannel:
case <-time.After(time.Second * 3):
}
a.Equal(uint32(1), atomic.LoadUint32(&counter))
}