@@ -36,14 +36,21 @@ func TestContainerEvents(t *testing.T) {
36
36
ctx , cancel := context .WithCancel (context .Background ())
37
37
t .Cleanup (cancel )
38
38
39
- t .Log ("Set up container events streaming client " )
40
- containerEventsStreamingClient , err := runtimeService .GetContainerEvents (ctx , & runtime.GetEventsRequest {})
39
+ t .Log ("Set up container events streaming clients " )
40
+ containerEventsStreamingClient1 , err := runtimeService .GetContainerEvents (ctx , & runtime.GetEventsRequest {})
41
41
assert .NoError (t , err )
42
- containerEventsChan := make (chan * runtime.ContainerEventResponse )
42
+ containerEventsStreamingClient2 , err := runtimeService .GetContainerEvents (ctx , & runtime.GetEventsRequest {})
43
+ assert .NoError (t , err )
44
+ containerEventsChan1 := make (chan * runtime.ContainerEventResponse )
45
+ containerEventsChan2 := make (chan * runtime.ContainerEventResponse )
43
46
44
- go listenToEventChannel (ctx , t , containerEventsChan , containerEventsStreamingClient )
47
+ go listenToEventChannel (ctx , t , containerEventsChan1 , containerEventsStreamingClient1 )
48
+ go listenToEventChannel (ctx , t , containerEventsChan2 , containerEventsStreamingClient2 )
45
49
// drain all events emitted by previous tests.
46
- drainContainerEventsChan (containerEventsChan )
50
+ drainContainerEventsChan (containerEventsChan1 )
51
+ drainContainerEventsChan (containerEventsChan2 )
52
+
53
+ containerEventsChannels := []chan * runtime.ContainerEventResponse {containerEventsChan1 , containerEventsChan2 }
47
54
48
55
t .Logf ("Step 1: RunPodSandbox and check for expected events" )
49
56
sandboxName := "container_events_sandbox"
@@ -56,19 +63,19 @@ func TestContainerEvents(t *testing.T) {
56
63
expectedPodSandboxStatus := & runtime.PodSandboxStatus {State : runtime .PodSandboxState_SANDBOX_NOTREADY }
57
64
t .Logf ("Step 6: StopPodSandbox and check events" )
58
65
assert .NoError (t , runtimeService .StopPodSandbox (sb ))
59
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_STOPPED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
66
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_STOPPED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
60
67
t .Logf ("Step 7: RemovePodSandbox and check events" )
61
68
assert .NoError (t , runtimeService .RemovePodSandbox (sb ))
62
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_DELETED_EVENT , nil , expectedContainerStates )
69
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_DELETED_EVENT , nil , expectedContainerStates )
63
70
})
64
71
65
72
// PodSandbox ready, container state list empty
66
73
expectedPodSandboxStatus := & runtime.PodSandboxStatus {State : runtime .PodSandboxState_SANDBOX_READY }
67
74
expectedContainerStates := []runtime.ContainerState {}
68
75
// PodSandbox created. Check for start event for podsandbox container. Should be zero containers in the podsandbox
69
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_CREATED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
76
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_CREATED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
70
77
// PodSandbox started. Check for start event for podsandbox container. Should be zero containers in the podsandbox
71
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_STARTED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
78
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_STARTED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
72
79
73
80
t .Logf ("Step 2: CreateContainer and check events" )
74
81
pauseImage := images .Get (images .Pause )
@@ -82,26 +89,26 @@ func TestContainerEvents(t *testing.T) {
82
89
cn , err := runtimeService .CreateContainer (sb , containerConfig , sbConfig )
83
90
require .NoError (t , err )
84
91
expectedContainerStates = []runtime.ContainerState {runtime .ContainerState_CONTAINER_CREATED }
85
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_CREATED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
92
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_CREATED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
86
93
87
94
t .Cleanup (func () {
88
95
t .Logf ("Step 5: RemoveContainer and check events" )
89
96
assert .NoError (t , runtimeService .RemoveContainer (cn ))
90
97
// No container status after the container is removed
91
98
expectedContainerStates := []runtime.ContainerState {}
92
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_DELETED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
99
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_DELETED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
93
100
})
94
101
95
102
t .Logf ("Step 3: StartContainer and check events" )
96
103
require .NoError (t , runtimeService .StartContainer (cn ))
97
104
expectedContainerStates = []runtime.ContainerState {runtime .ContainerState_CONTAINER_RUNNING }
98
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_STARTED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
105
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_STARTED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
99
106
100
107
t .Cleanup (func () {
101
108
t .Logf ("Step 4: StopContainer and check events" )
102
109
assert .NoError (t , runtimeService .StopContainer (cn , 10 ))
103
110
expectedContainerStates := []runtime.ContainerState {runtime .ContainerState_CONTAINER_EXITED }
104
- checkContainerEventResponse (t , containerEventsChan , runtime .ContainerEventType_CONTAINER_STOPPED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
111
+ checkContainerEventResponse (t , containerEventsChannels , runtime .ContainerEventType_CONTAINER_STOPPED_EVENT , expectedPodSandboxStatus , expectedContainerStates )
105
112
})
106
113
}
107
114
@@ -133,24 +140,26 @@ func drainContainerEventsChan(containerEventsChan chan *runtime.ContainerEventRe
133
140
}
134
141
}
135
142
136
- func checkContainerEventResponse (t * testing.T , containerEventsChan chan * runtime.ContainerEventResponse , expectedType runtime.ContainerEventType , expectedPodSandboxStatus * runtime.PodSandboxStatus , expectedContainerStates []runtime.ContainerState ) {
143
+ func checkContainerEventResponse (t * testing.T , containerEventsChans [] chan * runtime.ContainerEventResponse , expectedType runtime.ContainerEventType , expectedPodSandboxStatus * runtime.PodSandboxStatus , expectedContainerStates []runtime.ContainerState ) {
137
144
t .Helper ()
138
- var resp * runtime.ContainerEventResponse
139
- select {
140
- case resp = <- containerEventsChan :
141
- case <- time .After (readContainerEventChannelTimeout ):
142
- t .Error ("assertContainerEventResponse: timeout waiting for events from channel" )
143
- }
144
- t .Logf ("Container Event response received: %+v" , * resp )
145
- assert .Equal (t , expectedType , resp .ContainerEventType )
145
+ for _ , ch := range containerEventsChans {
146
+ var resp * runtime.ContainerEventResponse
147
+ select {
148
+ case resp = <- ch :
149
+ case <- time .After (readContainerEventChannelTimeout ):
150
+ t .Error ("assertContainerEventResponse: timeout waiting for events from channel" )
151
+ }
152
+ t .Logf ("Container Event response received: %+v" , * resp )
153
+ assert .Equal (t , expectedType , resp .ContainerEventType )
146
154
147
- // Checking only the State field of PodSandboxStatus
148
- if expectedPodSandboxStatus != nil {
149
- assert .Equal (t , expectedPodSandboxStatus .State , resp .PodSandboxStatus .State )
150
- }
155
+ // Checking only the State field of PodSandboxStatus
156
+ if expectedPodSandboxStatus != nil {
157
+ assert .Equal (t , expectedPodSandboxStatus .State , resp .PodSandboxStatus .State )
158
+ }
151
159
152
- // Checking only the State field of ContainersStatus
153
- for i , cs := range resp .ContainersStatuses {
154
- assert .Equal (t , expectedContainerStates [i ], cs .State )
160
+ // Checking only the State field of ContainersStatus
161
+ for i , cs := range resp .ContainersStatuses {
162
+ assert .Equal (t , expectedContainerStates [i ], cs .State )
163
+ }
155
164
}
156
165
}
0 commit comments