From b1fdf00a75497d6c68747fdbbc0cc267ee0258ac Mon Sep 17 00:00:00 2001 From: Mario Macias Date: Wed, 18 Feb 2026 17:54:47 +0100 Subject: [PATCH 1/2] try to fix flaky disablekeepalives test --- bpf/gotracer/go_nethttp.c | 6 +++++- internal/test/integration/test_utils.go | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/bpf/gotracer/go_nethttp.c b/bpf/gotracer/go_nethttp.c index 1be3e83cf1..e65ae85308 100644 --- a/bpf/gotracer/go_nethttp.c +++ b/bpf/gotracer/go_nethttp.c @@ -309,7 +309,11 @@ int obi_uprobe_readRequestStart(struct pt_regs *ctx) { connection_info_t *existing = bpf_map_lookup_elem(&ongoing_server_connections, &g_key); - if (!existing) { + // Populate connection info if: no entry exists yet, OR the entry was created by connServe + // with zeroed ports (netFdRead may not have fired yet or may have failed to read laddr/raddr). + // readRequest fires after the first netFdRead in the serve loop, so this acts as a reliable + // fallback to populate ports from the conn struct when netFdRead could not. + if (!existing || (existing->d_port == 0 && existing->s_port == 0)) { void *c_ptr = GO_PARAM1(ctx); if (c_ptr) { void *conn_conn_ptr = diff --git a/internal/test/integration/test_utils.go b/internal/test/integration/test_utils.go index 0dc0d520b9..e6f85deee5 100644 --- a/internal/test/integration/test_utils.go +++ b/internal/test/integration/test_utils.go @@ -65,6 +65,15 @@ var tr = &http.Transport{ } var testHTTPClient = &http.Client{Transport: tr} +// healthCheckClient is a separate client used only for service readiness polling. +// It must never be modified by setHTTPClientDisableKeepAlives so that waitForTestComponents* +// functions always use persistent connections regardless of what the test configures. +var healthCheckClient = &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, +} + func setHTTPClientDisableKeepAlives(disableKeepAlives bool) { testHTTPClient.Transport.(*http.Transport).DisableKeepAlives = disableKeepAlives } @@ -188,7 +197,7 @@ func waitForTestComponentsSubWithTime(t *testing.T, url, subpath string, minutes // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+subpath, nil) require.NoError(ct, err) - r, err := testHTTPClient.Do(req) + r, err := healthCheckClient.Do(req) require.NoError(ct, err) require.Equal(ct, http.StatusOK, r.StatusCode) @@ -207,7 +216,7 @@ func waitForTestComponentsSubWithTimeAndCode(t *testing.T, url, subpath string, // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+subpath, nil) require.NoError(ct, err) - r, err := testHTTPClient.Do(req) + r, err := healthCheckClient.Do(req) require.NoError(ct, err) require.Equal(ct, status, r.StatusCode) @@ -226,7 +235,7 @@ func waitForTestComponentsRoute(t *testing.T, url, route string) { // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+route, nil) require.NoError(ct, err) - r, err := testHTTPClient.Do(req) + r, err := healthCheckClient.Do(req) require.NoError(ct, err) require.Equal(ct, http.StatusOK, r.StatusCode) @@ -249,7 +258,7 @@ func waitForSQLTestComponentsWithDB(t *testing.T, url, subpath, db string) { // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+subpath, nil) require.NoError(ct, err) - r, err := testHTTPClient.Do(req) + r, err := healthCheckClient.Do(req) require.NoError(ct, err) require.Equal(ct, http.StatusOK, r.StatusCode) From ab253305390f95daff5fded6a9ead59332d25148 Mon Sep 17 00:00:00 2001 From: Mario Macias Date: Wed, 18 Feb 2026 18:19:50 +0100 Subject: [PATCH 2/2] cleanup code --- bpf/gotracer/go_nethttp.c | 4 +--- internal/test/integration/test_utils.go | 17 ++++------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/bpf/gotracer/go_nethttp.c b/bpf/gotracer/go_nethttp.c index e65ae85308..ee781fa25b 100644 --- a/bpf/gotracer/go_nethttp.c +++ b/bpf/gotracer/go_nethttp.c @@ -310,9 +310,7 @@ int obi_uprobe_readRequestStart(struct pt_regs *ctx) { connection_info_t *existing = bpf_map_lookup_elem(&ongoing_server_connections, &g_key); // Populate connection info if: no entry exists yet, OR the entry was created by connServe - // with zeroed ports (netFdRead may not have fired yet or may have failed to read laddr/raddr). - // readRequest fires after the first netFdRead in the serve loop, so this acts as a reliable - // fallback to populate ports from the conn struct when netFdRead could not. + // with zeroed ports if (!existing || (existing->d_port == 0 && existing->s_port == 0)) { void *c_ptr = GO_PARAM1(ctx); if (c_ptr) { diff --git a/internal/test/integration/test_utils.go b/internal/test/integration/test_utils.go index e6f85deee5..0dc0d520b9 100644 --- a/internal/test/integration/test_utils.go +++ b/internal/test/integration/test_utils.go @@ -65,15 +65,6 @@ var tr = &http.Transport{ } var testHTTPClient = &http.Client{Transport: tr} -// healthCheckClient is a separate client used only for service readiness polling. -// It must never be modified by setHTTPClientDisableKeepAlives so that waitForTestComponents* -// functions always use persistent connections regardless of what the test configures. -var healthCheckClient = &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - }, -} - func setHTTPClientDisableKeepAlives(disableKeepAlives bool) { testHTTPClient.Transport.(*http.Transport).DisableKeepAlives = disableKeepAlives } @@ -197,7 +188,7 @@ func waitForTestComponentsSubWithTime(t *testing.T, url, subpath string, minutes // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+subpath, nil) require.NoError(ct, err) - r, err := healthCheckClient.Do(req) + r, err := testHTTPClient.Do(req) require.NoError(ct, err) require.Equal(ct, http.StatusOK, r.StatusCode) @@ -216,7 +207,7 @@ func waitForTestComponentsSubWithTimeAndCode(t *testing.T, url, subpath string, // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+subpath, nil) require.NoError(ct, err) - r, err := healthCheckClient.Do(req) + r, err := testHTTPClient.Do(req) require.NoError(ct, err) require.Equal(ct, status, r.StatusCode) @@ -235,7 +226,7 @@ func waitForTestComponentsRoute(t *testing.T, url, route string) { // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+route, nil) require.NoError(ct, err) - r, err := healthCheckClient.Do(req) + r, err := testHTTPClient.Do(req) require.NoError(ct, err) require.Equal(ct, http.StatusOK, r.StatusCode) @@ -258,7 +249,7 @@ func waitForSQLTestComponentsWithDB(t *testing.T, url, subpath, db string) { // first, verify that the test service endpoint is healthy req, err := http.NewRequest(http.MethodGet, url+subpath, nil) require.NoError(ct, err) - r, err := healthCheckClient.Do(req) + r, err := testHTTPClient.Do(req) require.NoError(ct, err) require.Equal(ct, http.StatusOK, r.StatusCode)