-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdockerAPI_test.go
135 lines (125 loc) · 3.26 KB
/
dockerAPI_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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package main
import (
"context"
"errors"
"reflect"
"testing"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/events"
)
type DockerClientMock struct {
containerList []types.Container
containerListSendError bool
}
func (d *DockerClientMock) ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error) {
if d.containerListSendError {
return nil, errors.New("A mock error")
}
return d.containerList, nil
}
func (d *DockerClientMock) Info(ctx context.Context) (types.Info, error) {
return types.Info{}, nil
}
func (d *DockerClientMock) Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error) {
return make(<-chan events.Message), make(<-chan error)
}
func Test_readMessages(t *testing.T) {
tests := []struct {
name string
sendMessage events.Message
wantContainer bool
want []types.Container
setContainer []types.Container
dockerClientSendError bool
}{
{
name: "Send message were type is not container so nothing will be returnd",
sendMessage: events.Message{
Type: "namespace",
},
setContainer: []types.Container{},
want: []types.Container{},
wantContainer: false,
dockerClientSendError: false,
},
{
name: "Send message were type is container so will be return a Container",
dockerClientSendError: false,
sendMessage: events.Message{
Type: "container",
},
setContainer: []types.Container{
types.Container{
ID: "Mock",
},
},
want: []types.Container{
types.Container{
ID: "Mock",
},
},
wantContainer: true,
},
{
name: "Send message were type is container but label is no log so will be return one of the two container",
dockerClientSendError: false,
sendMessage: events.Message{
Type: "container",
},
setContainer: []types.Container{
types.Container{
ID: "Not returned",
Labels: map[string]string{
"funk.log": "false",
},
},
types.Container{
ID: "returned",
Labels: map[string]string{
"funk.log": "true",
},
},
},
want: []types.Container{
types.Container{
ID: "returned",
Labels: map[string]string{
"funk.log": "true",
},
},
},
wantContainer: true,
},
{
name: "Send message were type is container but dockerclient returns error so will got nil as trackingContainer",
dockerClientSendError: true,
sendMessage: events.Message{
Type: "container",
},
setContainer: nil,
want: nil,
wantContainer: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cli := DockerClientMock{
containerList: tt.setContainer,
}
msg := make(chan events.Message, 1)
msg <- tt.sendMessage
tracking := make(chan []types.Container)
go readMessages(context.Background(), &cli, msg, tracking)
if tt.wantContainer == false {
if len(tracking) != 0 {
t.Errorf("Want no feedback but got one %v", tracking)
}
} else {
res := <-tracking
if !reflect.DeepEqual(res, tt.want) {
t.Errorf("have a differnt result want %v got %v", tt.want, res)
}
}
})
}
}