diff --git a/apm-lambda-extension/extension/http_server_test.go b/apm-lambda-extension/extension/http_server_test.go index 61942fce..a6c6f834 100644 --- a/apm-lambda-extension/extension/http_server_test.go +++ b/apm-lambda-extension/extension/http_server_test.go @@ -258,3 +258,54 @@ func Test_handleIntakeV2EventsNoQueryParam(t *testing.T) { <-dataChannel assert.Equal(t, 202, resp.StatusCode) } + +func Test_handleIntakeV2EventsQueryParamEmptyData(t *testing.T) { + body := []byte(``) + + AgentDoneSignal = make(chan struct{}) + + // Create apm server and handler + apmServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + })) + defer apmServer.Close() + + // Create extension config and start the server + dataChannel := make(chan AgentData, 100) + config := extensionConfig{ + apmServerUrl: apmServer.URL, + dataReceiverServerPort: ":1234", + dataReceiverTimeoutSeconds: 15, + } + + StartHttpServer(dataChannel, &config) + defer agentDataServer.Close() + + hosts, _ := net.LookupHost("localhost") + url := "http://" + hosts[0] + ":1234/intake/v2/events?flushed=true" + + // Create a request to send to the extension + req, err := http.NewRequest("POST", url, bytes.NewReader(body)) + if err != nil { + t.Logf("Could not create request") + } + + // Send the request to the extension + client := &http.Client{} + go func() { + _, err := client.Do(req) + if err != nil { + t.Logf("Error fetching %s, [%v]", agentDataServer.Addr, err) + t.Fail() + } + }() + + timer := time.NewTimer(1 * time.Second) + defer timer.Stop() + + select { + case <-AgentDoneSignal: + case <-timer.C: + t.Log("Timed out waiting for server to send FuncDone signal") + t.Fail() + } +} diff --git a/apm-lambda-extension/extension/route_handlers.go b/apm-lambda-extension/extension/route_handlers.go index 0df6cd8d..8d1915e5 100644 --- a/apm-lambda-extension/extension/route_handlers.go +++ b/apm-lambda-extension/extension/route_handlers.go @@ -93,12 +93,14 @@ func handleIntakeV2Events(agentDataChan chan AgentData) func(w http.ResponseWrit return } - agentData := AgentData{ - Data: rawBytes, - ContentEncoding: r.Header.Get("Content-Encoding"), + if len(rawBytes) > 0 { + agentData := AgentData{ + Data: rawBytes, + ContentEncoding: r.Header.Get("Content-Encoding"), + } + log.Println("Adding agent data to buffer to be sent to apm server") + agentDataChan <- agentData } - log.Println("Adding agent data to buffer to be sent to apm server") - agentDataChan <- agentData if len(r.URL.Query()["flushed"]) > 0 && r.URL.Query()["flushed"][0] == "true" { AgentDoneSignal <- struct{}{}