diff --git a/pkg/acquisition/modules/appsec/appsec_test.go b/pkg/acquisition/modules/appsec/appsec_test.go index ffa0a92e956..e0bb9c9781d 100644 --- a/pkg/acquisition/modules/appsec/appsec_test.go +++ b/pkg/acquisition/modules/appsec/appsec_test.go @@ -181,29 +181,53 @@ func loadAppSecEngine(test appsecRuleTest, t *testing.T) { input := test.input_request input.ResponseChannel = make(chan appsec.AppsecTempResponse) - OutputEvents := make([]pipeline.Event, 0) - OutputResponses := make([]appsec.AppsecTempResponse, 0) - go func() { - for { - //log.Printf("reading from %p", input.ResponseChannel) - out := <-input.ResponseChannel - OutputResponses = append(OutputResponses, out) - //log.Errorf("response -> %s", spew.Sdump(out)) + + // collect both responses and events until no activity for idleDuration + idleDuration := 50 * time.Millisecond + idle := time.NewTimer(idleDuration) + defer idle.Stop() + + // when we receive something, drain and restart the idle timer + reset := func() { + if !idle.Stop() { + select { + case <-idle.C: + default: + } } - }() + idle.Reset(idleDuration) + } + + responses :=[]appsec.AppsecTempResponse{} + events := []pipeline.Event{} + + done := make(chan struct{}) + + // collect in a goroutine so a receiver is ready go func() { for { - out := <-OutChan - OutputEvents = append(OutputEvents, out) - //log.Errorf("outchan -> %s", spew.Sdump(out)) + select { + case r := <-input.ResponseChannel: + responses = append(responses, r) + reset() + case e := <-OutChan: + events = append(events, e) + reset() + case <-idle.C: + close(done) + return + } } }() runner.handleRequest(&input) - time.Sleep(50 * time.Millisecond) - http_status, appsecResponse := AppsecRuntime.GenerateResponse(OutputResponses[0], logger) - log.Infof("events : %s", spew.Sdump(OutputEvents)) - log.Infof("responses : %s", spew.Sdump(OutputResponses)) - test.output_asserts(OutputEvents, OutputResponses, appsecResponse, http_status) + // wait for the idle duration + <-done + + require.NotEmpty(t, responses) + httpStatus, appsecResponse := AppsecRuntime.GenerateResponse(responses[0], logger) + log.Infof("events : %s", spew.Sdump(events)) + log.Infof("responses : %s", spew.Sdump(responses)) + test.output_asserts(events, responses, appsecResponse, httpStatus) }