← Commit list

9cf4a400d2

Stefan Eissing
Stefan Eissing
2025-12-02
SUCCESS Duration: 139s

Subject

pytest: improve stragglers

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

docs/libcurl/libcurl-env-dbg.md+0 -5
@@ -164,8 +164,3 @@ Make a blocking, graceful shutdown of all remaining connections when
a multi handle is destroyed. This implicitly triggers for easy handles
that are run via easy_perform. The value of the environment variable
gives the shutdown timeout in milliseconds.
-
-## `CURL_H2_STREAM_WIN_MAX`
-
-Set to a positive 32-bit number to override the HTTP/2 stream window's
-default of 10MB. Used in testing to verify correct window update handling.
lib/http2.c+0 -23
@@ -111,9 +111,6 @@ struct cf_h2_ctx {
uint32_t goaway_error; /* goaway error code from server */
int32_t remote_max_sid; /* max id processed by server */
int32_t local_max_sid; /* max id processed by us */
-#ifdef DEBUGBUILD
- int32_t stream_win_max; /* max h2 stream window size */
-#endif
BIT(initialized);
BIT(via_h1_upgrade);
BIT(conn_closed);
@@ -139,18 +136,6 @@ static void cf_h2_ctx_init(struct cf_h2_ctx *ctx, bool via_h1_upgrade)
Curl_uint32_hash_init(&ctx->streams, 63, h2_stream_hash_free);
ctx->remote_max_sid = 2147483647;
ctx->via_h1_upgrade = via_h1_upgrade;
-#ifdef DEBUGBUILD
- {
- const char *p = getenv("CURL_H2_STREAM_WIN_MAX");
-
- ctx->stream_win_max = H2_STREAM_WINDOW_SIZE_MAX;
- if(p) {
- curl_off_t l;
- if(!curlx_str_number(&p, &l, INT_MAX))
- ctx->stream_win_max = (int32_t)l;
- }
- }
-#endif
ctx->initialized = TRUE;
}
@@ -330,15 +315,7 @@ static int32_t cf_h2_get_desired_local_win(struct Curl_cfilter *cf,
else if(avail < INT32_MAX)
return (int32_t)avail;
}
-#ifdef DEBUGBUILD
- {
- struct cf_h2_ctx *ctx = cf->ctx;
- CURL_TRC_CF(data, cf, "stream_win_max=%d", ctx->stream_win_max);
- return ctx->stream_win_max;
- }
-#else
return H2_STREAM_WINDOW_SIZE_MAX;
-#endif
}
static CURLcode cf_h2_update_local_win(struct Curl_cfilter *cf,
tests/http/test_02_download.py+2 -28
@@ -277,12 +277,10 @@ class TestDownload:
# download serial via lib client, pause/resume at different offsets
@pytest.mark.parametrize("pause_offset", [0, 10*1024, 100*1023, 640000])
- @pytest.mark.parametrize("proto", ['http/1.1', 'h3'])
+ @pytest.mark.parametrize("proto", Env.http_protos())
def test_02_21_lib_serial(self, env: Env, httpd, nghttpx, proto, pause_offset):
- if proto == 'h3' and not env.have_h3():
- pytest.skip("h3 not supported")
count = 2
- docname = 'data-10m'
+ docname = 'data-1m'
url = f'https://localhost:{env.https_port}/{docname}'
client = LocalClient(name='cli_hx_download', env=env)
if not client.exists():
@@ -294,30 +292,6 @@ class TestDownload:
srcfile = os.path.join(httpd.docs_dir, docname)
self.check_downloads(client, srcfile, count)
- # h2 download parallel via lib client, pause/resume at different offsets
- # debug-override stream window size to reproduce #16955
- @pytest.mark.parametrize("pause_offset", [0, 10*1024, 100*1023, 640000])
- @pytest.mark.parametrize("swin_max", [0, 10*1024])
- @pytest.mark.skipif(condition=not Env.have_h2_curl(), reason="curl without h2")
- def test_02_21_h2_lib_serial(self, env: Env, httpd, pause_offset, swin_max):
- proto = 'h2'
- count = 2
- docname = 'data-10m'
- url = f'https://localhost:{env.https_port}/{docname}'
- run_env = os.environ.copy()
- run_env['CURL_DEBUG'] = 'multi,http/2'
- if swin_max > 0:
- run_env['CURL_H2_STREAM_WIN_MAX'] = f'{swin_max}'
- client = LocalClient(name='cli_hx_download', env=env, run_env=run_env)
- if not client.exists():
- pytest.skip(f'example client not built: {client.name}')
- r = client.run(args=[
- '-n', f'{count}', '-P', f'{pause_offset}', '-V', proto, url
- ])
- r.check_exit_code(0)
- srcfile = os.path.join(httpd.docs_dir, docname)
- self.check_downloads(client, srcfile, count)
-
# download via lib client, several at a time, pause/resume
@pytest.mark.parametrize("pause_offset", [100*1023])
@pytest.mark.parametrize("proto", Env.http_protos())
tests/http/testenv/mod_curltest/mod_curltest.c+4 -0
@@ -570,6 +570,10 @@ cleanup:
APR_BRIGADE_INSERT_TAIL(bb, b);
ap_pass_brigade(r->output_filters, bb);
}
+ if(rv == APR_ECONNRESET) {
+ r->connection->aborted = 1;
+ return rv;
+ }
return AP_FILTER_ERROR;
}
tests/libtest/cli_hx_download.c+1 -1
@@ -449,7 +449,7 @@ static CURLcode test_cli_hx_download(const char *URL)
if(still_running) {
/* wait for activity, timeout or "nothing" */
- mc = curl_multi_poll(multi, NULL, 0, 1000, NULL);
+ mc = curl_multi_poll(multi, NULL, 0, 500, NULL);
}
if(mc)