@@ -181,29 +181,52 @@ func loadAppSecEngine(test appsecRuleTest, t *testing.T) {
181181
182182 input := test .input_request
183183 input .ResponseChannel = make (chan appsec.AppsecTempResponse )
184- OutputEvents := make ([]types.Event , 0 )
185- OutputResponses := make ([]appsec.AppsecTempResponse , 0 )
186- go func () {
187- for {
188- //log.Printf("reading from %p", input.ResponseChannel)
189- out := <- input .ResponseChannel
190- OutputResponses = append (OutputResponses , out )
191- //log.Errorf("response -> %s", spew.Sdump(out))
184+
185+ // collect both responses and events until no activity for idleDuration
186+ idleDuration := 50 * time .Millisecond
187+ idle := time .NewTimer (idleDuration )
188+ defer idle .Stop ()
189+
190+ // when we receive something, drain and restart the idle timer
191+ reset := func () {
192+ if ! idle .Stop () {
193+ select {
194+ case <- idle .C :
195+ default :
196+ }
192197 }
193- }()
198+ idle .Reset (idleDuration )
199+ }
200+
201+ responses := []appsec.AppsecTempResponse {}
202+ events := []types.Event {}
203+
204+ done := make (chan struct {})
205+
206+ // collect in a goroutine so a receiver is ready
194207 go func () {
195208 for {
196- out := <- OutChan
197- OutputEvents = append (OutputEvents , out )
198- //log.Errorf("outchan -> %s", spew.Sdump(out))
209+ select {
210+ case r := <- input .ResponseChannel :
211+ responses = append (responses , r )
212+ reset ()
213+ case e := <- OutChan :
214+ events = append (events , e )
215+ reset ()
216+ case <- idle .C :
217+ close (done )
218+ return
219+ }
199220 }
200221 }()
201222
202223 runner .handleRequest (& input )
203- time .Sleep (50 * time .Millisecond )
204224
205- http_status , appsecResponse := AppsecRuntime .GenerateResponse (OutputResponses [0 ], logger )
206- log .Infof ("events : %s" , spew .Sdump (OutputEvents ))
207- log .Infof ("responses : %s" , spew .Sdump (OutputResponses ))
208- test .output_asserts (OutputEvents , OutputResponses , appsecResponse , http_status )
225+ // wait for the idle duration
226+ <- done
227+
228+ httpStatus , appsecResponse := AppsecRuntime .GenerateResponse (responses [0 ], logger )
229+ log .Infof ("events : %s" , spew .Sdump (events ))
230+ log .Infof ("responses : %s" , spew .Sdump (responses ))
231+ test .output_asserts (events , responses , appsecResponse , httpStatus )
209232}
0 commit comments