diff --git a/scripts/mk-unity.pl b/scripts/mk-unity.pl index ae93e0e7c4..21a5e944ef 100755 --- a/scripts/mk-unity.pl +++ b/scripts/mk-unity.pl @@ -76,7 +76,7 @@ if($any_test) { my $tlist = ""; foreach my $src (@src) { - if($src =~ /([a-z0-9]+)\.c$/) { + if($src =~ /([a-z0-9_]+)\.c$/) { my $name = $1; if($embed) { my $fn = $src; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0c3474cc38..7928b206eb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -73,7 +73,7 @@ endfunction() function(curl_add_pytests _targetname _test_flags) set(_depends "") if(NOT _targetname STREQUAL "pytest-ci") - set(_depends "test-http-clients") + set(_depends "http-clients") endif() string(REPLACE " " ";" _test_flags_list "${_test_flags}") add_custom_target(${_targetname} diff --git a/tests/http/clients/.gitignore b/tests/http/clients/.gitignore index 97c9219d19..da4c5ea43e 100644 --- a/tests/http/clients/.gitignore +++ b/tests/http/clients/.gitignore @@ -2,12 +2,5 @@ # # SPDX-License-Identifier: curl -h2-pausing -h2-serverpush -h2-upgrade-extreme -hx-download -hx-upload -tls-session-reuse -upload-pausing -ws-data -ws-pingpong +clients +clients.c diff --git a/tests/http/clients/CMakeLists.txt b/tests/http/clients/CMakeLists.txt index 7e4590ccff..c30f0d441a 100644 --- a/tests/http/clients/CMakeLists.txt +++ b/tests/http/clients/CMakeLists.txt @@ -21,27 +21,28 @@ # SPDX-License-Identifier: curl # ########################################################################### - -add_custom_target(test-http-clients) - -# Get check_PROGRAMS variable +# Get BUNDLE, BUNDLE_SRC, FIRSTFILES, TESTFILES variables curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") -foreach(_target IN LISTS check_PROGRAMS) - set(_target_name "curlt-client-${_target}") - add_executable(${_target_name} EXCLUDE_FROM_ALL "${_target}.c") - add_dependencies(testdeps ${_target_name}) - add_dependencies(test-http-clients ${_target_name}) - target_include_directories(${_target_name} PRIVATE - "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" - "${PROJECT_SOURCE_DIR}/lib" # for "curl_setup.h" - ) - target_link_libraries(${_target_name} ${LIB_SELECTED} ${CURL_LIBS}) - target_compile_definitions(${_target_name} PRIVATE "CURL_NO_OLDIES" "$<$:_CRT_SECURE_NO_DEPRECATE>") - if(LIB_SELECTED STREQUAL LIB_STATIC AND WIN32) - set_property(TARGET ${_target_name} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB") - endif() - set_target_properties(${_target_name} PROPERTIES OUTPUT_NAME "${_target}" ROJECT_LABEL "Test client ${_target}" - UNITY_BUILD OFFP) -endforeach() +add_custom_command( + OUTPUT "${BUNDLE_SRC}" + COMMAND ${PERL_EXECUTABLE} "${PROJECT_SOURCE_DIR}/scripts/mk-unity.pl" --test ${TESTFILES} + ${CURL_MK_UNITY_OPTION} --srcdir "${CMAKE_CURRENT_SOURCE_DIR}" > "${BUNDLE_SRC}" + DEPENDS + "${PROJECT_SOURCE_DIR}/scripts/mk-unity.pl" "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.inc" ${FIRSTFILES} ${TESTFILES} + VERBATIM) + +add_executable(http-clients EXCLUDE_FROM_ALL "${BUNDLE_SRC}") +add_dependencies(testdeps http-clients) +target_include_directories(http-clients PRIVATE + "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" + "${CMAKE_CURRENT_SOURCE_DIR}" # for "first.h" +) +target_link_libraries(http-clients ${LIB_SELECTED} ${CURL_LIBS}) +set_property(TARGET http-clients APPEND PROPERTY COMPILE_DEFINITIONS "CURL_NO_OLDIES" + "$<$:_CRT_SECURE_NO_DEPRECATE>") +if(LIB_SELECTED STREQUAL LIB_STATIC AND WIN32) + set_property(TARGET http-clients APPEND PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB") +endif() +set_target_properties(http-clients PROPERTIES OUTPUT_NAME "${BUNDLE}" PROJECT_LABEL "Test ${BUNDLE}" UNITY_BUILD OFF) diff --git a/tests/http/clients/Makefile.am b/tests/http/clients/Makefile.am index 86a834e275..45307140be 100644 --- a/tests/http/clients/Makefile.am +++ b/tests/http/clients/Makefile.am @@ -21,27 +21,32 @@ # SPDX-License-Identifier: curl # ########################################################################### - AUTOMAKE_OPTIONS = foreign nostdinc -EXTRA_DIST = CMakeLists.txt - # Specify our include paths here, and do it relative to $(top_srcdir) and # $(top_builddir), to ensure that these paths which belong to the library # being currently built and tested are searched before the library which # might possibly already be installed in the system. # # $(top_srcdir)/include is for libcurl's external include files +# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file -AM_CPPFLAGS = -I$(top_srcdir)/include \ - -I$(top_builddir)/lib \ - -I$(top_srcdir)/lib +AM_CPPFLAGS = -I$(top_srcdir)/include \ + -I$(top_builddir)/lib \ + -I$(srcdir) + +# Get BUNDLE, BUNDLE_SRC, FIRSTFILES, TESTFILES variables +include Makefile.inc + +EXTRA_DIST = CMakeLists.txt $(FIRSTFILES) $(TESTFILES) + +CFLAGS += @CURL_CFLAG_EXTRAS@ + +# Prevent LIBS from being used for all link targets +LIBS = $(BLANK_AT_MAKETIME) LIBDIR = $(top_builddir)/lib -# Avoid libcurl obsolete stuff -AM_CPPFLAGS += -DCURL_NO_OLDIES - if USE_CPPFLAG_CURL_STATICLIB AM_CPPFLAGS += -DCURL_STATICLIB endif @@ -49,28 +54,32 @@ if DOING_NATIVE_WINDOWS AM_CPPFLAGS += -DWIN32_LEAN_AND_MEAN endif -# Prevent LIBS from being used for all link targets -LIBS = $(BLANK_AT_MAKETIME) +AM_CPPFLAGS += -DCURL_NO_OLDIES -# Dependencies -LDADD = $(LIBDIR)/libcurl.la @LIBCURL_PC_LIBS_PRIVATE@ +$(BUNDLE_SRC): $(top_srcdir)/scripts/mk-unity.pl Makefile.inc $(FIRSTFILES) $(TESTFILES) + @PERL@ $(top_srcdir)/scripts/mk-unity.pl --test $(TESTFILES) > $(BUNDLE_SRC) -# This might hold -Werror -CFLAGS += @CURL_CFLAG_EXTRAS@ - -# Get check_PROGRAMS variable -include Makefile.inc - -all: $(check_PROGRAMS) +noinst_PROGRAMS = $(BUNDLE) +nodist_clients_SOURCES = $(BUNDLE_SRC) +clients_SOURCES = +clients_LDADD = $(LIBDIR)/libcurl.la @LIBCURL_PC_LIBS_PRIVATE@ +clients_CFLAGS = $(AM_CFLAGS) +CLEANFILES = $(BUNDLE_SRC) CHECKSRC = $(CS_$(V)) CS_0 = @echo " RUN " $@; CS_1 = CS_ = $(CS_0) +# ignore generated C files since they play by slightly different rules! checksrc: - $(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) $(srcdir)/*.c) + $(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) \ + -W$(srcdir)/$(BUNDLE_SRC) \ + $(srcdir)/*.[ch]) if NOT_CURL_CI all-local: checksrc endif + +clean-local: + rm -f $(BUNDLE) diff --git a/tests/http/clients/Makefile.inc b/tests/http/clients/Makefile.inc index f11d42944c..748c481943 100644 --- a/tests/http/clients/Makefile.inc +++ b/tests/http/clients/Makefile.inc @@ -23,13 +23,20 @@ ########################################################################### # Shared between CMakeLists.txt and Makefile.am -check_PROGRAMS = \ - h2-pausing \ - h2-serverpush \ - h2-upgrade-extreme \ - hx-download \ - hx-upload \ - tls-session-reuse \ - upload-pausing \ - ws-data \ - ws-pingpong +BUNDLE = clients +BUNDLE_SRC = clients.c + +# Files referenced from the bundle source +FIRSTFILES = first.c first.h + +# All test clients +TESTFILES = \ + h2_pausing.c \ + h2_serverpush.c \ + h2_upgrade_extreme.c \ + hx_download.c \ + hx_upload.c \ + tls_session_reuse.c \ + upload_pausing.c \ + ws_data.c \ + ws_pingpong.c diff --git a/tests/http/clients/first.c b/tests/http/clients/first.c new file mode 100644 index 0000000000..c6432652f9 --- /dev/null +++ b/tests/http/clients/first.c @@ -0,0 +1,51 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +int main(int argc, char **argv) +{ + entry_func_t entry_func; + char *entry_name; + size_t tmp; + + if(argc < 2) { + fprintf(stderr, "Pass clientname as first argument\n"); + return 1; + } + + entry_name = argv[1]; + entry_func = NULL; + for(tmp = 0; tmp < CURL_ARRAYSIZE(s_entries); ++tmp) { + if(strcmp(entry_name, s_entries[tmp].name) == 0) { + entry_func = s_entries[tmp].ptr; + break; + } + } + + if(!entry_func) { + fprintf(stderr, "Test '%s' not found.\n", entry_name); + return 99; + } + + return entry_func(argc - 1, argv + 1); +} diff --git a/tests/http/clients/first.h b/tests/http/clients/first.h new file mode 100644 index 0000000000..1c74221c86 --- /dev/null +++ b/tests/http/clients/first.h @@ -0,0 +1,286 @@ +#ifndef HEADER_CLIENT_FIRST_H +#define HEADER_CLIENT_FIRST_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef HAVE_CONFIG_H +#include "curl_config.h" /* for CURL_DISABLE_WEBSOCKETS */ +#endif + +typedef int (*entry_func_t)(int, char **); + +struct entry_s { + const char *name; + entry_func_t ptr; +}; + +#include + +#include /* for fprintf() */ +#include /* for calloc(), free(), strtol() */ +#include /* for strchr(), strcmp() */ + +#ifdef _WIN32 +#include /* for Sleep() */ +#define strdup _strdup +#else +#include /* for usleep() */ +#include /* for usleep() */ +#endif + +#ifdef __TANDEM +#include /* for usleep() logic */ +#endif + +#if defined(_MSC_VER) && (_MSC_VER <= 1700) +#pragma warning(disable:4127) /* "conditional expression is constant" */ +#endif + +#define CURL_ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0])) + +#define ERR() \ + do { \ + fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \ + return 2; \ + } while(0) + +static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) +{ + /* + * This is the trace look that is similar to what libcurl makes on its + * own. + */ + static const char * const s_infotype[] = { + "* ", "< ", "> ", "{ ", "} ", "{ ", "} " + }; + if(idsbuf && *idsbuf) + fprintf(log, "%s%s", idsbuf, s_infotype[type]); + else + fputs(s_infotype[type], log); +} + +#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " +#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ + CURL_FORMAT_CURL_OFF_T "] " +/* +** callback for CURLOPT_DEBUGFUNCTION +*/ +static int debug_cb(CURL *handle, curl_infotype type, + char *data, size_t size, void *userdata) +{ + FILE *output = stderr; + static int newl = 0; + static int traced_data = 0; + char idsbuf[60]; + curl_off_t xfer_id, conn_id; + + (void)handle; /* not used */ + (void)userdata; + + if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { + if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && + conn_id >= 0) { + curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, + conn_id); + } + else { + curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); + } + } + else + idsbuf[0] = 0; + + switch(type) { + case CURLINFO_HEADER_OUT: + if(size > 0) { + size_t st = 0; + size_t i; + for(i = 0; i < size - 1; i++) { + if(data[i] == '\n') { /* LF */ + if(!newl) { + log_line_start(output, idsbuf, type); + } + (void)fwrite(data + st, i - st + 1, 1, output); + st = i + 1; + newl = 0; + } + } + if(!newl) + log_line_start(output, idsbuf, type); + (void)fwrite(data + st, i - st + 1, 1, output); + } + newl = (size && (data[size - 1] != '\n')) ? 1 : 0; + traced_data = 0; + break; + case CURLINFO_TEXT: + case CURLINFO_HEADER_IN: + if(!newl) + log_line_start(output, idsbuf, type); + (void)fwrite(data, size, 1, output); + newl = (size && (data[size - 1] != '\n')) ? 1 : 0; + traced_data = 0; + break; + case CURLINFO_DATA_OUT: + case CURLINFO_DATA_IN: + case CURLINFO_SSL_DATA_IN: + case CURLINFO_SSL_DATA_OUT: + if(!traced_data) { + if(!newl) + log_line_start(output, idsbuf, type); + fprintf(output, "[%ld bytes data]\n", (long)size); + newl = 0; + traced_data = 1; + } + break; + default: /* nada */ + newl = 0; + traced_data = 1; + break; + } + + return 0; +} + +static void dump(const char *text, unsigned char *ptr, size_t size, char nohex) +{ + size_t i; + size_t c; + + unsigned int width = 0x10; + + if(nohex) + /* without the hex output, we can fit more on screen */ + width = 0x40; + + fprintf(stderr, "%s, %lu bytes (0x%lx)\n", + text, (unsigned long)size, (unsigned long)size); + + for(i = 0; i < size; i += width) { + + fprintf(stderr, "%4.4lx: ", (unsigned long)i); + + if(!nohex) { + /* hex not disabled, show it */ + for(c = 0; c < width; c++) + if(i + c < size) + fprintf(stderr, "%02x ", ptr[i + c]); + else + fputs(" ", stderr); + } + + for(c = 0; (c < width) && (i + c < size); c++) { + /* check for 0D0A; if found, skip past and start a new line of output */ + if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D && + ptr[i + c + 1] == 0x0A) { + i += (c + 2 - width); + break; + } + fprintf(stderr, "%c", + (ptr[i + c] >= 0x20) && (ptr[i + c] < 0x80) ? ptr[i + c] : '.'); + /* check again for 0D0A, to avoid an extra \n if it's at width */ + if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D && + ptr[i + c + 2] == 0x0A) { + i += (c + 3 - width); + break; + } + } + fputc('\n', stderr); /* newline */ + } +} + +#ifndef CURL_DISABLE_WEBSOCKETS +/* just close the connection */ +static void websocket_close(CURL *curl) +{ + size_t sent; + CURLcode result = + curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE); + fprintf(stderr, + "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent); +} +#endif /* CURL_DISABLE_WEBSOCKETS */ + +static int coptind; +static char *coptarg; + +static int cgetopt(int argc, char * const argv[], const char *optstring) +{ + static int optpos = 1; + int coptopt; + char *arg; + + if(coptind == 0) { /* Reset? */ + coptind = !!argc; + optpos = 1; + } + + arg = argv[coptind]; + if(arg && strcmp(arg, "--") == 0) { + coptind++; + return -1; + } + else if(!arg || arg[0] != '-') { + return -1; + } + else { + const char *opt = strchr(optstring, arg[optpos]); + coptopt = arg[optpos]; + if(!opt) { + if(!arg[++optpos]) { + coptind++; + optpos = 1; + } + return '?'; + } + else if(opt[1] == ':') { + if(arg[optpos + 1]) { + coptarg = arg + optpos + 1; + coptind++; + optpos = 1; + return coptopt; + } + else if(argv[coptind + 1]) { + coptarg = argv[coptind + 1]; + coptind += 2; + optpos = 1; + return coptopt; + } + else { + if(!arg[++optpos]) { + coptind++; + optpos = 1; + } + return *optstring == ':' ? ':' : '?'; + } + } + else { + if(!arg[++optpos]) { + coptind++; + optpos = 1; + } + return coptopt; + } + } +} + +#endif /* HEADER_CLIENT_FIRST_H */ diff --git a/tests/http/clients/h2-pausing.c b/tests/http/clients/h2_pausing.c similarity index 60% rename from tests/http/clients/h2-pausing.c rename to tests/http/clients/h2_pausing.c index 9c6b88c37a..4efc0e88fa 100644 --- a/tests/http/clients/h2-pausing.c +++ b/tests/http/clients/h2_pausing.c @@ -21,126 +21,11 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * HTTP/2 download pausing - * - */ /* This is based on the PoC client of issue #11982 */ -#include - #include -#include -#include -#include -#ifndef _MSC_VER -/* somewhat Unix-specific */ -#include /* getopt() */ -#endif - -#ifndef _MSC_VER -#define HANDLECOUNT 2 - -static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) -{ - /* - * This is the trace look that is similar to what libcurl makes on its - * own. - */ - static const char * const s_infotype[] = { - "* ", "< ", "> ", "{ ", "} ", "{ ", "} " - }; - if(idsbuf && *idsbuf) - fprintf(log, "%s%s", idsbuf, s_infotype[type]); - else - fputs(s_infotype[type], log); -} - -#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " -#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ - CURL_FORMAT_CURL_OFF_T "] " -/* -** callback for CURLOPT_DEBUGFUNCTION -*/ -static int debug_cb(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userdata) -{ - FILE *output = stderr; - static int newl = 0; - static int traced_data = 0; - char idsbuf[60]; - curl_off_t xfer_id, conn_id; - - (void)handle; /* not used */ - (void)userdata; - - if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { - if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && - conn_id >= 0) { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, - conn_id); - } - else { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); - } - } - else - idsbuf[0] = 0; - - switch(type) { - case CURLINFO_HEADER_OUT: - if(size > 0) { - size_t st = 0; - size_t i; - for(i = 0; i < size - 1; i++) { - if(data[i] == '\n') { /* LF */ - if(!newl) { - log_line_start(output, idsbuf, type); - } - (void)fwrite(data + st, i - st + 1, 1, output); - st = i + 1; - newl = 0; - } - } - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data + st, i - st + 1, 1, output); - } - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_TEXT: - case CURLINFO_HEADER_IN: - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data, size, 1, output); - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_DATA_OUT: - case CURLINFO_DATA_IN: - case CURLINFO_SSL_DATA_IN: - case CURLINFO_SSL_DATA_OUT: - if(!traced_data) { - if(!newl) - log_line_start(output, idsbuf, type); - fprintf(output, "[%ld bytes data]\n", (long)size); - newl = 0; - traced_data = 1; - } - break; - default: /* nada */ - newl = 0; - traced_data = 1; - break; - } - - return 0; -} - -static void usage(const char *msg) +static void usage_h2_pausing(const char *msg) { if(msg) fprintf(stderr, "%s\n", msg); @@ -153,7 +38,7 @@ static void usage(const char *msg) struct handle { - int idx; + size_t idx; int paused; int resumed; int errored; @@ -171,40 +56,32 @@ static size_t cb(char *data, size_t size, size_t nmemb, void *clientp) if(curl_easy_getinfo(handle->h, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &totalsize) == CURLE_OK) fprintf(stderr, "INFO: [%d] write, Content-Length %"CURL_FORMAT_CURL_OFF_T - "\n", handle->idx, totalsize); + "\n", (int)handle->idx, totalsize); if(!handle->resumed) { ++handle->paused; fprintf(stderr, "INFO: [%d] write, PAUSING %d time on %lu bytes\n", - handle->idx, handle->paused, (long)realsize); + (int)handle->idx, handle->paused, (long)realsize); assert(handle->paused == 1); return CURL_WRITEFUNC_PAUSE; } if(handle->fail_write) { ++handle->errored; fprintf(stderr, "INFO: [%d] FAIL write of %lu bytes, %d time\n", - handle->idx, (long)realsize, handle->errored); + (int)handle->idx, (long)realsize, handle->errored); return CURL_WRITEFUNC_ERROR; } fprintf(stderr, "INFO: [%d] write, accepting %lu bytes\n", - handle->idx, (long)realsize); + (int)handle->idx, (long)realsize); return realsize; } -#define ERR() \ - do { \ - fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \ - return 2; \ - } while(0) - -#endif /* !_MSC_VER */ - -int main(int argc, char *argv[]) +static int test_h2_pausing(int argc, char *argv[]) { -#ifndef _MSC_VER - struct handle handles[HANDLECOUNT]; + struct handle handles[2]; CURLM *multi_handle; - int i, still_running = 1, msgs_left, numfds; + int still_running = 1, msgs_left, numfds; + size_t i; CURLMsg *msg; int rounds = 0; int rc = 0; @@ -217,31 +94,31 @@ int main(int argc, char *argv[]) int http_version = CURL_HTTP_VERSION_2_0; int ch; - while((ch = getopt(argc, argv, "hV:")) != -1) { + while((ch = cgetopt(argc, argv, "hV:")) != -1) { switch(ch) { case 'h': - usage(NULL); + usage_h2_pausing(NULL); return 2; case 'V': { - if(!strcmp("http/1.1", optarg)) + if(!strcmp("http/1.1", coptarg)) http_version = CURL_HTTP_VERSION_1_1; - else if(!strcmp("h2", optarg)) + else if(!strcmp("h2", coptarg)) http_version = CURL_HTTP_VERSION_2_0; - else if(!strcmp("h3", optarg)) + else if(!strcmp("h3", coptarg)) http_version = CURL_HTTP_VERSION_3ONLY; else { - usage("invalid http version"); + usage_h2_pausing("invalid http version"); return 1; } break; } default: - usage("invalid option"); - return 1; + usage_h2_pausing("invalid option"); + return 1; } } - argc -= optind; - argv += optind; + argc -= coptind; + argv += coptind; if(argc != 1) { fprintf(stderr, "ERROR: need URL as argument\n"); @@ -274,7 +151,7 @@ int main(int argc, char *argv[]) host, port); resolve = curl_slist_append(resolve, resolve_buf); - for(i = 0; i < HANDLECOUNT; i++) { + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { handles[i].idx = i; handles[i].paused = 0; handles[i].resumed = 0; @@ -302,7 +179,7 @@ int main(int argc, char *argv[]) if(!multi_handle) ERR(); - for(i = 0; i < HANDLECOUNT; i++) { + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { if(curl_multi_add_handle(multi_handle, handles[i].h) != CURLM_OK) ERR(); } @@ -315,23 +192,23 @@ int main(int argc, char *argv[]) if(!still_running) { int as_expected = 1; fprintf(stderr, "INFO: no more handles running\n"); - for(i = 0; i < HANDLECOUNT; i++) { + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { if(!handles[i].paused) { - fprintf(stderr, "ERROR: [%d] NOT PAUSED\n", i); + fprintf(stderr, "ERROR: [%d] NOT PAUSED\n", (int)i); as_expected = 0; } else if(handles[i].paused != 1) { fprintf(stderr, "ERROR: [%d] PAUSED %d times!\n", - i, handles[i].paused); + (int)i, handles[i].paused); as_expected = 0; } else if(!handles[i].resumed) { - fprintf(stderr, "ERROR: [%d] NOT resumed!\n", i); + fprintf(stderr, "ERROR: [%d] NOT resumed!\n", (int)i); as_expected = 0; } else if(handles[i].errored != 1) { fprintf(stderr, "ERROR: [%d] NOT errored once, %d instead!\n", - i, handles[i].errored); + (int)i, handles[i].errored); as_expected = 0; } } @@ -349,11 +226,11 @@ int main(int argc, char *argv[]) /* !checksrc! disable EQUALSNULL 1 */ while((msg = curl_multi_info_read(multi_handle, &msgs_left)) != NULL) { if(msg->msg == CURLMSG_DONE) { - for(i = 0; i < HANDLECOUNT; i++) { + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { if(msg->easy_handle == handles[i].h) { if(handles[i].paused != 1 || !handles[i].resumed) { fprintf(stderr, "ERROR: [%d] done, pauses=%d, resumed=%d, " - "result %d - wtf?\n", i, handles[i].paused, + "result %d - wtf?\n", (int)i, handles[i].paused, handles[i].resumed, msg->data.result); rc = 1; goto out; @@ -365,12 +242,12 @@ int main(int argc, char *argv[]) /* Successfully paused? */ if(!all_paused) { - for(i = 0; i < HANDLECOUNT; i++) { + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { if(!handles[i].paused) { break; } } - all_paused = (i == HANDLECOUNT); + all_paused = (i == CURL_ARRAYSIZE(handles)); if(all_paused) { fprintf(stderr, "INFO: all transfers paused\n"); /* give transfer some rounds to mess things up */ @@ -379,8 +256,8 @@ int main(int argc, char *argv[]) } if(resume_round > 0 && rounds == resume_round) { /* time to resume */ - for(i = 0; i < HANDLECOUNT; i++) { - fprintf(stderr, "INFO: [%d] resumed\n", i); + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { + fprintf(stderr, "INFO: [%d] resumed\n", (int)i); handles[i].resumed = 1; curl_easy_pause(handles[i].h, CURLPAUSE_CONT); } @@ -388,12 +265,11 @@ int main(int argc, char *argv[]) } out: - for(i = 0; i < HANDLECOUNT; i++) { + for(i = 0; i < CURL_ARRAYSIZE(handles); i++) { curl_multi_remove_handle(multi_handle, handles[i].h); curl_easy_cleanup(handles[i].h); } - curl_slist_free_all(resolve); curl_free(host); curl_free(port); @@ -402,10 +278,4 @@ out: curl_global_cleanup(); return rc; -#else - (void)argc; - (void)argv; - fprintf(stderr, "Not supported with this compiler.\n"); - return 1; -#endif /* !_MSC_VER */ } diff --git a/tests/http/clients/h2-serverpush.c b/tests/http/clients/h2_serverpush.c similarity index 73% rename from tests/http/clients/h2-serverpush.c rename to tests/http/clients/h2_serverpush.c index 1710f355c2..da28d9b5a2 100644 --- a/tests/http/clients/h2-serverpush.c +++ b/tests/http/clients/h2_serverpush.c @@ -21,74 +21,9 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * HTTP/2 server push - * - */ -/* curl stuff */ -#include -#include -#include -#include - -#ifndef CURLPIPE_MULTIPLEX -#error "too old libcurl, cannot do HTTP/2 server push!" -#endif - -static -void dump(const char *text, unsigned char *ptr, size_t size, - char nohex) -{ - size_t i; - size_t c; - - unsigned int width = 0x10; - - if(nohex) - /* without the hex output, we can fit more on screen */ - width = 0x40; - - fprintf(stderr, "%s, %lu bytes (0x%lx)\n", - text, (unsigned long)size, (unsigned long)size); - - for(i = 0; i < size; i += width) { - - fprintf(stderr, "%4.4lx: ", (unsigned long)i); - - if(!nohex) { - /* hex not disabled, show it */ - for(c = 0; c < width; c++) - if(i + c < size) - fprintf(stderr, "%02x ", ptr[i + c]); - else - fputs(" ", stderr); - } - - for(c = 0; (c < width) && (i + c < size); c++) { - /* check for 0D0A; if found, skip past and start a new line of output */ - if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D && - ptr[i + c + 1] == 0x0A) { - i += (c + 2 - width); - break; - } - fprintf(stderr, "%c", - (ptr[i + c] >= 0x20) && (ptr[i + c] < 0x80) ? ptr[i + c] : '.'); - /* check again for 0D0A, to avoid an extra \n if it's at width */ - if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D && - ptr[i + c + 2] == 0x0A) { - i += (c + 3 - width); - break; - } - } - fputc('\n', stderr); /* newline */ - } -} - -static -int my_trace(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userp) +static int my_trace(CURL *handle, curl_infotype type, + char *data, size_t size, void *userp) { const char *text; (void)handle; /* prevent compiler warning */ @@ -123,11 +58,9 @@ int my_trace(CURL *handle, curl_infotype type, return 0; } -#define OUTPUTFILE "download_0.data" - -static int setup(CURL *hnd, const char *url) +static int setup_h2_serverpush(CURL *hnd, const char *url) { - FILE *out = fopen(OUTPUTFILE, "wb"); + FILE *out = fopen("download_0.data", "wb"); if(!out) /* failed */ return 1; @@ -143,10 +76,9 @@ static int setup(CURL *hnd, const char *url) curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); -#if (CURLPIPE_MULTIPLEX > 0) /* wait for pipe connection to confirm */ curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); -#endif + return 0; /* all is good */ } @@ -200,11 +132,10 @@ out: return rv; } - /* * Download a file over HTTP/2, take care of server push. */ -int main(int argc, char *argv[]) +static int test_h2_serverpush(int argc, char *argv[]) { CURL *easy; CURLM *multi_handle; @@ -224,7 +155,7 @@ int main(int argc, char *argv[]) curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers); easy = curl_easy_init(); - if(setup(easy, url)) { + if(setup_h2_serverpush(easy, url)) { fprintf(stderr, "failed\n"); return 1; } diff --git a/tests/http/clients/h2-upgrade-extreme.c b/tests/http/clients/h2_upgrade_extreme.c similarity index 63% rename from tests/http/clients/h2-upgrade-extreme.c rename to tests/http/clients/h2_upgrade_extreme.c index 751d674152..142aec2a61 100644 --- a/tests/http/clients/h2-upgrade-extreme.c +++ b/tests/http/clients/h2_upgrade_extreme.c @@ -21,121 +21,15 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * HTTP/2 Upgrade test - * - */ -#include -#include -#include - -static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) -{ - /* - * This is the trace look that is similar to what libcurl makes on its - * own. - */ - static const char * const s_infotype[] = { - "* ", "< ", "> ", "{ ", "} ", "{ ", "} " - }; - if(idsbuf && *idsbuf) - fprintf(log, "%s%s", idsbuf, s_infotype[type]); - else - fputs(s_infotype[type], log); -} - -#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " -#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ - CURL_FORMAT_CURL_OFF_T "] " -/* -** callback for CURLOPT_DEBUGFUNCTION -*/ -static int debug_cb(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userdata) -{ - FILE *output = stderr; - static int newl = 0; - static int traced_data = 0; - char idsbuf[60]; - curl_off_t xfer_id, conn_id; - - (void)handle; /* not used */ - (void)userdata; - - if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { - if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && - conn_id >= 0) { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, - conn_id); - } - else { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); - } - } - else - idsbuf[0] = 0; - - switch(type) { - case CURLINFO_HEADER_OUT: - if(size > 0) { - size_t st = 0; - size_t i; - for(i = 0; i < size - 1; i++) { - if(data[i] == '\n') { /* LF */ - if(!newl) { - log_line_start(output, idsbuf, type); - } - (void)fwrite(data + st, i - st + 1, 1, output); - st = i + 1; - newl = 0; - } - } - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data + st, i - st + 1, 1, output); - } - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_TEXT: - case CURLINFO_HEADER_IN: - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data, size, 1, output); - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_DATA_OUT: - case CURLINFO_DATA_IN: - case CURLINFO_SSL_DATA_IN: - case CURLINFO_SSL_DATA_OUT: - if(!traced_data) { - if(!newl) - log_line_start(output, idsbuf, type); - fprintf(output, "[%ld bytes data]\n", (long)size); - newl = 0; - traced_data = 1; - } - break; - default: /* nada */ - newl = 0; - traced_data = 1; - break; - } - - return 0; -} - -static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *opaque) +static size_t write_h2ue_cb(char *ptr, size_t size, size_t nmemb, void *opaque) { (void)ptr; (void)opaque; return size * nmemb; } -int main(int argc, char *argv[]) +static int test_h2_upgrade_extreme(int argc, char *argv[]) { const char *url; CURLM *multi = NULL; @@ -174,7 +68,7 @@ int main(int argc, char *argv[]) curl_easy_setopt(easy, CURLOPT_AUTOREFERER, 1L); curl_easy_setopt(easy, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(easy, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); - curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb); + curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_h2ue_cb); curl_easy_setopt(easy, CURLOPT_WRITEDATA, NULL); curl_easy_setopt(easy, CURLOPT_HTTPGET, 1L); curl_msnprintf(range, sizeof(range), @@ -246,7 +140,7 @@ int main(int argc, char *argv[]) } while(running_handles > 0 || start_count); fprintf(stderr, "exiting\n"); - exitcode = EXIT_SUCCESS; + exitcode = 0; cleanup: diff --git a/tests/http/clients/hx-download.c b/tests/http/clients/hx_download.c similarity index 63% rename from tests/http/clients/hx-download.c rename to tests/http/clients/hx_download.c index 5990b9ed33..f919c273e4 100644 --- a/tests/http/clients/hx-download.c +++ b/tests/http/clients/hx_download.c @@ -21,132 +21,10 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * HTTP/2 server push - * - */ -/* curl stuff */ -#include -#include -#include -#include +static int verbose_d = 1; -#ifndef _MSC_VER -/* somewhat Unix-specific */ -#include /* getopt() */ -#endif - -#ifdef _WIN32 -#define strdup _strdup -#endif - -#ifndef CURLPIPE_MULTIPLEX -#error "too old libcurl, cannot do HTTP/2 server push!" -#endif - -#ifndef _MSC_VER -static int verbose = 1; - -static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) -{ - /* - * This is the trace look that is similar to what libcurl makes on its - * own. - */ - static const char * const s_infotype[] = { - "* ", "< ", "> ", "{ ", "} ", "{ ", "} " - }; - if(idsbuf && *idsbuf) - fprintf(log, "%s%s", idsbuf, s_infotype[type]); - else - fputs(s_infotype[type], log); -} - -#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " -#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ - CURL_FORMAT_CURL_OFF_T "] " -/* -** callback for CURLOPT_DEBUGFUNCTION -*/ -static int debug_cb(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userdata) -{ - FILE *output = stderr; - static int newl = 0; - static int traced_data = 0; - char idsbuf[60]; - curl_off_t xfer_id, conn_id; - - (void)handle; /* not used */ - (void)userdata; - - if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { - if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && - conn_id >= 0) { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, - conn_id); - } - else { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); - } - } - else - idsbuf[0] = 0; - - switch(type) { - case CURLINFO_HEADER_OUT: - if(size > 0) { - size_t st = 0; - size_t i; - for(i = 0; i < size - 1; i++) { - if(data[i] == '\n') { /* LF */ - if(!newl) { - log_line_start(output, idsbuf, type); - } - (void)fwrite(data + st, i - st + 1, 1, output); - st = i + 1; - newl = 0; - } - } - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data + st, i - st + 1, 1, output); - } - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_TEXT: - case CURLINFO_HEADER_IN: - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data, size, 1, output); - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_DATA_OUT: - case CURLINFO_DATA_IN: - case CURLINFO_SSL_DATA_IN: - case CURLINFO_SSL_DATA_OUT: - if(!traced_data) { - if(!newl) - log_line_start(output, idsbuf, type); - fprintf(output, "[%ld bytes data]\n", (long)size); - newl = 0; - traced_data = 1; - } - break; - default: /* nada */ - newl = 0; - traced_data = 1; - break; - } - - return 0; -} - -struct transfer { +struct transfer_d { int idx; CURL *easy; char filename[128]; @@ -162,24 +40,24 @@ struct transfer { CURLcode result; }; -static size_t transfer_count = 1; -static struct transfer *transfers; -static int forbid_reuse = 0; +static size_t transfer_count_d = 1; +static struct transfer_d *transfer_d; +static int forbid_reuse_d = 0; -static struct transfer *get_transfer_for_easy(CURL *easy) +static struct transfer_d *get_transfer_for_easy_d(CURL *easy) { size_t i; - for(i = 0; i < transfer_count; ++i) { - if(easy == transfers[i].easy) - return &transfers[i]; + for(i = 0; i < transfer_count_d; ++i) { + if(easy == transfer_d[i].easy) + return &transfer_d[i]; } return NULL; } -static size_t my_write_cb(char *buf, size_t nitems, size_t buflen, - void *userdata) +static size_t my_write_d_cb(char *buf, size_t nitems, size_t buflen, + void *userdata) { - struct transfer *t = userdata; + struct transfer_d *t = userdata; size_t blen = (nitems * buflen); size_t nwritten; @@ -216,11 +94,11 @@ static size_t my_write_cb(char *buf, size_t nitems, size_t buflen, return (size_t)nwritten; } -static int my_progress_cb(void *userdata, - curl_off_t dltotal, curl_off_t dlnow, - curl_off_t ultotal, curl_off_t ulnow) +static int my_progress_d_cb(void *userdata, + curl_off_t dltotal, curl_off_t dlnow, + curl_off_t ultotal, curl_off_t ulnow) { - struct transfer *t = userdata; + struct transfer_d *t = userdata; (void)ultotal; (void)ulnow; (void)dltotal; @@ -232,9 +110,10 @@ static int my_progress_cb(void *userdata, return 0; } -static int setup(CURL *hnd, const char *url, struct transfer *t, - long http_version, struct curl_slist *host, - CURLSH *share, int use_earlydata, int fresh_connect) +static int setup_hx_download(CURL *hnd, const char *url, struct transfer_d *t, + long http_version, struct curl_slist *host, + CURLSH *share, int use_earlydata, + int fresh_connect) { curl_easy_setopt(hnd, CURLOPT_SHARE, share); curl_easy_setopt(hnd, CURLOPT_URL, url); @@ -243,14 +122,14 @@ static int setup(CURL *hnd, const char *url, struct transfer *t, curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(hnd, CURLOPT_ACCEPT_ENCODING, ""); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, (long)(128 * 1024)); - curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, my_write_cb); + curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, my_write_d_cb); curl_easy_setopt(hnd, CURLOPT_WRITEDATA, t); curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 0L); - curl_easy_setopt(hnd, CURLOPT_XFERINFOFUNCTION, my_progress_cb); + curl_easy_setopt(hnd, CURLOPT_XFERINFOFUNCTION, my_progress_d_cb); curl_easy_setopt(hnd, CURLOPT_XFERINFODATA, t); if(use_earlydata) curl_easy_setopt(hnd, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_EARLYDATA); - if(forbid_reuse) + if(forbid_reuse_d) curl_easy_setopt(hnd, CURLOPT_FORBID_REUSE, 1L); if(host) curl_easy_setopt(hnd, CURLOPT_RESOLVE, host); @@ -258,19 +137,18 @@ static int setup(CURL *hnd, const char *url, struct transfer *t, curl_easy_setopt(hnd, CURLOPT_FRESH_CONNECT, 1L); /* please be verbose */ - if(verbose) { + if(verbose_d) { curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, debug_cb); } -#if (CURLPIPE_MULTIPLEX > 0) /* wait for pipe connection to confirm */ curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); -#endif + return 0; /* all is good */ } -static void usage(const char *msg) +static void usage_hx_download(const char *msg) { if(msg) fprintf(stderr, "%s\n", msg); @@ -292,14 +170,12 @@ static void usage(const char *msg) " -V http_version (http/1.1, h2, h3) http version to use\n" ); } -#endif /* !_MSC_VER */ /* * Download a file over HTTP/2, take care of server push. */ -int main(int argc, char *argv[]) +static int test_hx_download(int argc, char *argv[]) { -#ifndef _MSC_VER CURLM *multi_handle; struct CURLMsg *m; CURLSH *share; @@ -310,7 +186,7 @@ int main(int argc, char *argv[]) size_t abort_offset = 0; size_t fail_offset = 0; int abort_paused = 0, use_earlydata = 0; - struct transfer *t; + struct transfer_d *t; int http_version = CURL_HTTP_VERSION_2_0; int ch; struct curl_slist *host = NULL; @@ -320,10 +196,10 @@ int main(int argc, char *argv[]) int fresh_connect = 0; int result = 0; - while((ch = getopt(argc, argv, "aefhm:n:xA:F:M:P:r:T:V:")) != -1) { + while((ch = cgetopt(argc, argv, "aefhm:n:xA:F:M:P:r:T:V:")) != -1) { switch(ch) { case 'h': - usage(NULL); + usage_hx_download(NULL); result = 2; goto cleanup; case 'a': @@ -333,64 +209,64 @@ int main(int argc, char *argv[]) use_earlydata = 1; break; case 'f': - forbid_reuse = 1; + forbid_reuse_d = 1; break; case 'm': - max_parallel = (size_t)strtol(optarg, NULL, 10); + max_parallel = (size_t)strtol(coptarg, NULL, 10); break; case 'n': - transfer_count = (size_t)strtol(optarg, NULL, 10); + transfer_count_d = (size_t)strtol(coptarg, NULL, 10); break; case 'x': fresh_connect = 1; break; case 'A': - abort_offset = (size_t)strtol(optarg, NULL, 10); + abort_offset = (size_t)strtol(coptarg, NULL, 10); break; case 'F': - fail_offset = (size_t)strtol(optarg, NULL, 10); + fail_offset = (size_t)strtol(coptarg, NULL, 10); break; case 'M': - max_host_conns = (size_t)strtol(optarg, NULL, 10); + max_host_conns = (size_t)strtol(coptarg, NULL, 10); break; case 'P': - pause_offset = (size_t)strtol(optarg, NULL, 10); + pause_offset = (size_t)strtol(coptarg, NULL, 10); break; case 'r': free(resolve); - resolve = strdup(optarg); + resolve = strdup(coptarg); break; case 'T': - max_total_conns = (size_t)strtol(optarg, NULL, 10); + max_total_conns = (size_t)strtol(coptarg, NULL, 10); break; case 'V': { - if(!strcmp("http/1.1", optarg)) + if(!strcmp("http/1.1", coptarg)) http_version = CURL_HTTP_VERSION_1_1; - else if(!strcmp("h2", optarg)) + else if(!strcmp("h2", coptarg)) http_version = CURL_HTTP_VERSION_2_0; - else if(!strcmp("h3", optarg)) + else if(!strcmp("h3", coptarg)) http_version = CURL_HTTP_VERSION_3ONLY; else { - usage("invalid http version"); + usage_hx_download("invalid http version"); result = 1; goto cleanup; } break; } default: - usage("invalid option"); + usage_hx_download("invalid option"); result = 1; goto cleanup; } } - argc -= optind; - argv += optind; + argc -= coptind; + argv += coptind; curl_global_init(CURL_GLOBAL_DEFAULT); curl_global_trace("ids,time,http/2,http/3"); if(argc != 1) { - usage("not enough arguments"); + usage_hx_download("not enough arguments"); result = 2; goto cleanup; } @@ -412,8 +288,8 @@ int main(int argc, char *argv[]) curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_PSL); curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_HSTS); - transfers = calloc(transfer_count, sizeof(*transfers)); - if(!transfers) { + transfer_d = calloc(transfer_count_d, sizeof(*transfer_d)); + if(!transfer_d) { fprintf(stderr, "error allocating transfer structs\n"); result = 1; goto cleanup; @@ -427,21 +303,21 @@ int main(int argc, char *argv[]) (long)max_host_conns); active_transfers = 0; - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_d; ++i) { + t = &transfer_d[i]; t->idx = (int)i; t->abort_at = (curl_off_t)abort_offset; t->fail_at = (curl_off_t)fail_offset; t->pause_at = (curl_off_t)pause_offset; } - n = (max_parallel < transfer_count) ? max_parallel : transfer_count; + n = (max_parallel < transfer_count_d) ? max_parallel : transfer_count_d; for(i = 0; i < n; ++i) { - t = &transfers[i]; + t = &transfer_d[i]; t->easy = curl_easy_init(); if(!t->easy || - setup(t->easy, url, t, http_version, host, share, use_earlydata, - fresh_connect)) { + setup_hx_download(t->easy, url, t, http_version, host, share, + use_earlydata, fresh_connect)) { fprintf(stderr, "[t-%d] FAILED setup\n", (int)i); result = 1; goto cleanup; @@ -471,7 +347,7 @@ int main(int argc, char *argv[]) CURL *e = m->easy_handle; --active_transfers; curl_multi_remove_handle(multi_handle, e); - t = get_transfer_for_easy(e); + t = get_transfer_for_easy_d(e); if(t) { t->done = 1; t->result = m->data.result; @@ -492,8 +368,8 @@ int main(int argc, char *argv[]) /* nothing happening, maintenance */ if(abort_paused) { /* abort paused transfers */ - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_d; ++i) { + t = &transfer_d[i]; if(!t->done && t->paused && t->easy) { curl_multi_remove_handle(multi_handle, t->easy); t->done = 1; @@ -504,8 +380,8 @@ int main(int argc, char *argv[]) } else { /* resume one paused transfer */ - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_d; ++i) { + t = &transfer_d[i]; if(!t->done && t->paused) { t->resumed = 1; t->paused = 0; @@ -517,13 +393,13 @@ int main(int argc, char *argv[]) } while(active_transfers < max_parallel) { - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_d; ++i) { + t = &transfer_d[i]; if(!t->started) { t->easy = curl_easy_init(); if(!t->easy || - setup(t->easy, url, t, http_version, host, share, - use_earlydata, fresh_connect)) { + setup_hx_download(t->easy, url, t, http_version, host, share, + use_earlydata, fresh_connect)) { fprintf(stderr, "[t-%d] FAILED setup\n", (int)i); result = 1; goto cleanup; @@ -536,7 +412,7 @@ int main(int argc, char *argv[]) } } /* all started */ - if(i == transfer_count) + if(i == transfer_count_d) break; } } while(m); @@ -545,8 +421,8 @@ int main(int argc, char *argv[]) curl_multi_cleanup(multi_handle); - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_d; ++i) { + t = &transfer_d[i]; if(t->out) { fclose(t->out); t->out = NULL; @@ -558,7 +434,7 @@ int main(int argc, char *argv[]) if(t->result) result = t->result; } - free(transfers); + free(transfer_d); curl_share_cleanup(share); curl_slist_free_all(host); @@ -566,10 +442,4 @@ cleanup: free(resolve); return result; -#else - (void)argc; - (void)argv; - fprintf(stderr, "Not supported with this compiler.\n"); - return 1; -#endif /* !_MSC_VER */ } diff --git a/tests/http/clients/hx-upload.c b/tests/http/clients/hx_upload.c similarity index 65% rename from tests/http/clients/hx-upload.c rename to tests/http/clients/hx_upload.c index 40b6211af7..48c1ce0136 100644 --- a/tests/http/clients/hx-upload.c +++ b/tests/http/clients/hx_upload.c @@ -21,128 +21,10 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * HTTP upload tests and tweaks - * - */ -/* curl stuff */ -#include -#include -#include -#include +static int verbose_u = 1; -#ifndef _MSC_VER -/* somewhat Unix-specific */ -#include /* getopt() */ -#endif - -#ifndef CURLPIPE_MULTIPLEX -#error "too old libcurl" -#endif - -#ifndef _MSC_VER -static int verbose = 1; - -static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) -{ - /* - * This is the trace look that is similar to what libcurl makes on its - * own. - */ - static const char * const s_infotype[] = { - "* ", "< ", "> ", "{ ", "} ", "{ ", "} " - }; - if(idsbuf && *idsbuf) - fprintf(log, "%s%s", idsbuf, s_infotype[type]); - else - fputs(s_infotype[type], log); -} - -#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " -#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ - CURL_FORMAT_CURL_OFF_T "] " -/* -** callback for CURLOPT_DEBUGFUNCTION -*/ -static int debug_cb(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userdata) -{ - FILE *output = stderr; - static int newl = 0; - static int traced_data = 0; - char idsbuf[60]; - curl_off_t xfer_id, conn_id; - - (void)handle; /* not used */ - (void)userdata; - - if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { - if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && - conn_id >= 0) { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, - conn_id); - } - else { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); - } - } - else - idsbuf[0] = 0; - - switch(type) { - case CURLINFO_HEADER_OUT: - if(size > 0) { - size_t st = 0; - size_t i; - for(i = 0; i < size - 1; i++) { - if(data[i] == '\n') { /* LF */ - if(!newl) { - log_line_start(output, idsbuf, type); - } - (void)fwrite(data + st, i - st + 1, 1, output); - st = i + 1; - newl = 0; - } - } - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data + st, i - st + 1, 1, output); - } - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_TEXT: - case CURLINFO_HEADER_IN: - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data, size, 1, output); - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_DATA_OUT: - case CURLINFO_DATA_IN: - case CURLINFO_SSL_DATA_IN: - case CURLINFO_SSL_DATA_OUT: - if(!traced_data) { - if(!newl) - log_line_start(output, idsbuf, type); - fprintf(output, "[%ld bytes data]\n", (long)size); - newl = 0; - traced_data = 1; - } - break; - default: /* nada */ - newl = 0; - traced_data = 1; - break; - } - - return 0; -} - -struct transfer { +struct transfer_u { int idx; CURL *easy; const char *method; @@ -160,24 +42,24 @@ struct transfer { int done; }; -static size_t transfer_count = 1; -static struct transfer *transfers; -static int forbid_reuse = 0; +static size_t transfer_count_u = 1; +static struct transfer_u *transfer_u; +static int forbid_reuse_u = 0; -static struct transfer *get_transfer_for_easy(CURL *easy) +static struct transfer_u *get_transfer_for_easy_u(CURL *easy) { size_t i; - for(i = 0; i < transfer_count; ++i) { - if(easy == transfers[i].easy) - return &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + if(easy == transfer_u[i].easy) + return &transfer_u[i]; } return NULL; } -static size_t my_write_cb(char *buf, size_t nitems, size_t buflen, - void *userdata) +static size_t my_write_u_cb(char *buf, size_t nitems, size_t buflen, + void *userdata) { - struct transfer *t = userdata; + struct transfer_u *t = userdata; size_t blen = (nitems * buflen); size_t nwritten; @@ -203,7 +85,7 @@ static size_t my_write_cb(char *buf, size_t nitems, size_t buflen, static size_t my_read_cb(char *buf, size_t nitems, size_t buflen, void *userdata) { - struct transfer *t = userdata; + struct transfer_u *t = userdata; size_t blen = (nitems * buflen); size_t nread; @@ -235,11 +117,11 @@ static size_t my_read_cb(char *buf, size_t nitems, size_t buflen, return (size_t)nread; } -static int my_progress_cb(void *userdata, - curl_off_t dltotal, curl_off_t dlnow, - curl_off_t ultotal, curl_off_t ulnow) +static int my_progress_u_cb(void *userdata, + curl_off_t dltotal, curl_off_t dlnow, + curl_off_t ultotal, curl_off_t ulnow) { - struct transfer *t = userdata; + struct transfer_u *t = userdata; (void)ultotal; (void)dlnow; (void)dltotal; @@ -251,9 +133,10 @@ static int my_progress_cb(void *userdata, return 0; } -static int setup(CURL *hnd, const char *url, struct transfer *t, - long http_version, struct curl_slist *host, - CURLSH *share, int use_earlydata, int announce_length) +static int setup_hx_upload(CURL *hnd, const char *url, struct transfer_u *t, + long http_version, struct curl_slist *host, + CURLSH *share, int use_earlydata, + int announce_length) { curl_easy_setopt(hnd, CURLOPT_SHARE, share); curl_easy_setopt(hnd, CURLOPT_URL, url); @@ -262,7 +145,7 @@ static int setup(CURL *hnd, const char *url, struct transfer *t, curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, (long)(128 * 1024)); curl_easy_setopt(hnd, CURLOPT_FOLLOWLOCATION, CURLFOLLOW_OBEYCODE); - curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, my_write_cb); + curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, my_write_u_cb); curl_easy_setopt(hnd, CURLOPT_WRITEDATA, t); if(use_earlydata) curl_easy_setopt(hnd, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_EARLYDATA); @@ -281,27 +164,26 @@ static int setup(CURL *hnd, const char *url, struct transfer *t, curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, t->send_total); curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 0L); - curl_easy_setopt(hnd, CURLOPT_XFERINFOFUNCTION, my_progress_cb); + curl_easy_setopt(hnd, CURLOPT_XFERINFOFUNCTION, my_progress_u_cb); curl_easy_setopt(hnd, CURLOPT_XFERINFODATA, t); - if(forbid_reuse) + if(forbid_reuse_u) curl_easy_setopt(hnd, CURLOPT_FORBID_REUSE, 1L); if(host) curl_easy_setopt(hnd, CURLOPT_RESOLVE, host); /* please be verbose */ - if(verbose) { + if(verbose_u) { curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, debug_cb); } -#if (CURLPIPE_MULTIPLEX > 0) /* wait for pipe connection to confirm */ curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); -#endif + return 0; /* all is good */ } -static void usage(const char *msg) +static void usage_hx_upload(const char *msg) { if(msg) fprintf(stderr, "%s\n", msg); @@ -320,14 +202,12 @@ static void usage(const char *msg) " -V http_version (http/1.1, h2, h3) http version to use\n" ); } -#endif /* !_MSC_VER */ /* * Download a file over HTTP/2, take care of server push. */ -int main(int argc, char *argv[]) +static int test_hx_upload(int argc, char *argv[]) { -#ifndef _MSC_VER CURLM *multi_handle; CURLSH *share; const char *url; @@ -342,16 +222,16 @@ int main(int argc, char *argv[]) int reuse_easy = 0; int use_earlydata = 0; int announce_length = 0; - struct transfer *t; + struct transfer_u *t; int http_version = CURL_HTTP_VERSION_2_0; struct curl_slist *host = NULL; const char *resolve = NULL; int ch; - while((ch = getopt(argc, argv, "aefhlm:n:A:F:M:P:r:RS:V:")) != -1) { + while((ch = cgetopt(argc, argv, "aefhlm:n:A:F:M:P:r:RS:V:")) != -1) { switch(ch) { case 'h': - usage(NULL); + usage_hx_upload(NULL); return 2; case 'a': abort_paused = 1; @@ -360,61 +240,61 @@ int main(int argc, char *argv[]) use_earlydata = 1; break; case 'f': - forbid_reuse = 1; + forbid_reuse_u = 1; break; case 'l': announce_length = 1; break; case 'm': - max_parallel = (size_t)strtol(optarg, NULL, 10); + max_parallel = (size_t)strtol(coptarg, NULL, 10); break; case 'n': - transfer_count = (size_t)strtol(optarg, NULL, 10); + transfer_count_u = (size_t)strtol(coptarg, NULL, 10); break; case 'A': - abort_offset = (size_t)strtol(optarg, NULL, 10); + abort_offset = (size_t)strtol(coptarg, NULL, 10); break; case 'F': - fail_offset = (size_t)strtol(optarg, NULL, 10); + fail_offset = (size_t)strtol(coptarg, NULL, 10); break; case 'M': - method = optarg; + method = coptarg; break; case 'P': - pause_offset = (size_t)strtol(optarg, NULL, 10); + pause_offset = (size_t)strtol(coptarg, NULL, 10); break; case 'r': - resolve = optarg; + resolve = coptarg; break; case 'R': reuse_easy = 1; break; case 'S': - send_total = (size_t)strtol(optarg, NULL, 10); + send_total = (size_t)strtol(coptarg, NULL, 10); break; case 'V': { - if(!strcmp("http/1.1", optarg)) + if(!strcmp("http/1.1", coptarg)) http_version = CURL_HTTP_VERSION_1_1; - else if(!strcmp("h2", optarg)) + else if(!strcmp("h2", coptarg)) http_version = CURL_HTTP_VERSION_2_0; - else if(!strcmp("h3", optarg)) + else if(!strcmp("h3", coptarg)) http_version = CURL_HTTP_VERSION_3ONLY; else { - usage("invalid http version"); + usage_hx_upload("invalid http version"); return 1; } break; } default: - usage("invalid option"); - return 1; + usage_hx_upload("invalid option"); + return 1; } } - argc -= optind; - argv += optind; + argc -= coptind; + argv += coptind; if(max_parallel > 1 && reuse_easy) { - usage("cannot mix -R and -P"); + usage_hx_upload("cannot mix -R and -P"); return 2; } @@ -422,7 +302,7 @@ int main(int argc, char *argv[]) curl_global_trace("ids,time,http/2,http/3"); if(argc != 1) { - usage("not enough arguments"); + usage_hx_upload("not enough arguments"); return 2; } url = argv[0]; @@ -442,15 +322,15 @@ int main(int argc, char *argv[]) curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_PSL); curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_HSTS); - transfers = calloc(transfer_count, sizeof(*transfers)); - if(!transfers) { + transfer_u = calloc(transfer_count_u, sizeof(*transfer_u)); + if(!transfer_u) { fprintf(stderr, "error allocating transfer structs\n"); return 1; } active_transfers = 0; - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + t = &transfer_u[i]; t->idx = (int)i; t->method = method; t->send_total = (curl_off_t)send_total; @@ -466,11 +346,11 @@ int main(int argc, char *argv[]) fprintf(stderr, "failed to init easy handle\n"); return 1; } - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + t = &transfer_u[i]; t->easy = easy; - if(setup(t->easy, url, t, http_version, host, share, use_earlydata, - announce_length)) { + if(setup_hx_upload(t->easy, url, t, http_version, host, share, + use_earlydata, announce_length)) { fprintf(stderr, "[t-%d] FAILED setup\n", (int)i); return 1; } @@ -487,12 +367,12 @@ int main(int argc, char *argv[]) multi_handle = curl_multi_init(); curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); - n = (max_parallel < transfer_count) ? max_parallel : transfer_count; + n = (max_parallel < transfer_count_u) ? max_parallel : transfer_count_u; for(i = 0; i < n; ++i) { - t = &transfers[i]; + t = &transfer_u[i]; t->easy = curl_easy_init(); - if(!t->easy || setup(t->easy, url, t, http_version, host, share, - use_earlydata, announce_length)) { + if(!t->easy || setup_hx_upload(t->easy, url, t, http_version, host, + share, use_earlydata, announce_length)) { fprintf(stderr, "[t-%d] FAILED setup\n", (int)i); return 1; } @@ -522,7 +402,7 @@ int main(int argc, char *argv[]) CURL *e = m->easy_handle; --active_transfers; curl_multi_remove_handle(multi_handle, e); - t = get_transfer_for_easy(e); + t = get_transfer_for_easy_u(e); if(t) { long res_status; curl_easy_getinfo(e, CURLINFO_RESPONSE_CODE, &res_status); @@ -545,8 +425,8 @@ int main(int argc, char *argv[]) /* nothing happening, maintenance */ if(abort_paused) { /* abort paused transfers */ - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + t = &transfer_u[i]; if(!t->done && t->paused && t->easy) { curl_multi_remove_handle(multi_handle, t->easy); t->done = 1; @@ -557,8 +437,8 @@ int main(int argc, char *argv[]) } else { /* resume one paused transfer */ - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + t = &transfer_u[i]; if(!t->done && t->paused) { t->resumed = 1; t->paused = 0; @@ -570,12 +450,13 @@ int main(int argc, char *argv[]) } while(active_transfers < max_parallel) { - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + t = &transfer_u[i]; if(!t->started) { t->easy = curl_easy_init(); - if(!t->easy || setup(t->easy, url, t, http_version, host, - share, use_earlydata, announce_length)) { + if(!t->easy || setup_hx_upload(t->easy, url, t, http_version, + host, share, use_earlydata, + announce_length)) { fprintf(stderr, "[t-%d] FAILED setup\n", (int)i); return 1; } @@ -587,7 +468,7 @@ int main(int argc, char *argv[]) } } /* all started */ - if(i == transfer_count) + if(i == transfer_count_u) break; } } while(m); @@ -597,8 +478,8 @@ int main(int argc, char *argv[]) curl_multi_cleanup(multi_handle); } - for(i = 0; i < transfer_count; ++i) { - t = &transfers[i]; + for(i = 0; i < transfer_count_u; ++i) { + t = &transfer_u[i]; if(t->out) { fclose(t->out); t->out = NULL; @@ -608,14 +489,8 @@ int main(int argc, char *argv[]) t->easy = NULL; } } - free(transfers); + free(transfer_u); curl_share_cleanup(share); return 0; -#else - (void)argc; - (void)argv; - fprintf(stderr, "Not supported with this compiler.\n"); - return 1; -#endif /* !_MSC_VER */ } diff --git a/tests/http/clients/tls-session-reuse.c b/tests/http/clients/tls_session_reuse.c similarity index 69% rename from tests/http/clients/tls-session-reuse.c rename to tests/http/clients/tls_session_reuse.c index ba7c66cab6..88c3aa11a2 100644 --- a/tests/http/clients/tls-session-reuse.c +++ b/tests/http/clients/tls_session_reuse.c @@ -21,115 +21,8 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * TLS session reuse - * - */ -#include -#include -#include -#include - -static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) -{ - /* - * This is the trace look that is similar to what libcurl makes on its - * own. - */ - static const char * const s_infotype[] = { - "* ", "< ", "> ", "{ ", "} ", "{ ", "} " - }; - if(idsbuf && *idsbuf) - fprintf(log, "%s%s", idsbuf, s_infotype[type]); - else - fputs(s_infotype[type], log); -} - -#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " -#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ - CURL_FORMAT_CURL_OFF_T "] " -/* -** callback for CURLOPT_DEBUGFUNCTION -*/ -static int debug_cb(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userdata) -{ - FILE *output = stderr; - static int newl = 0; - static int traced_data = 0; - char idsbuf[60]; - curl_off_t xfer_id, conn_id; - - (void)handle; /* not used */ - (void)userdata; - - if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { - if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && - conn_id >= 0) { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, - conn_id); - } - else { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); - } - } - else - idsbuf[0] = 0; - - switch(type) { - case CURLINFO_HEADER_OUT: - if(size > 0) { - size_t st = 0; - size_t i; - for(i = 0; i < size - 1; i++) { - if(data[i] == '\n') { /* LF */ - if(!newl) { - log_line_start(output, idsbuf, type); - } - (void)fwrite(data + st, i - st + 1, 1, output); - st = i + 1; - newl = 0; - } - } - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data + st, i - st + 1, 1, output); - } - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_TEXT: - case CURLINFO_HEADER_IN: - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data, size, 1, output); - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_DATA_OUT: - case CURLINFO_DATA_IN: - case CURLINFO_SSL_DATA_IN: - case CURLINFO_SSL_DATA_OUT: - if(!traced_data) { - if(!newl) - log_line_start(output, idsbuf, type); - fprintf(output, "[%ld bytes data]\n", (long)size); - newl = 0; - traced_data = 1; - } - break; - default: /* nada */ - newl = 0; - traced_data = 1; - break; - } - - return 0; -} - -static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *opaque) +static size_t write_tse_cb(char *ptr, size_t size, size_t nmemb, void *opaque) { (void)ptr; (void)opaque; @@ -156,7 +49,7 @@ static int add_transfer(CURLM *multi, CURLSH *share, curl_easy_setopt(easy, CURLOPT_AUTOREFERER, 1L); curl_easy_setopt(easy, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(easy, CURLOPT_HTTP_VERSION, http_version); - curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb); + curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_tse_cb); curl_easy_setopt(easy, CURLOPT_WRITEDATA, NULL); curl_easy_setopt(easy, CURLOPT_HTTPGET, 1L); curl_easy_setopt(easy, CURLOPT_SSL_VERIFYPEER, 0L); @@ -174,7 +67,7 @@ static int add_transfer(CURLM *multi, CURLSH *share, return 0; } -int main(int argc, char *argv[]) +static int test_tls_session_reuse(int argc, char *argv[]) { const char *url; CURLM *multi = NULL; @@ -309,7 +202,7 @@ int main(int argc, char *argv[]) } while(ongoing || add_more); fprintf(stderr, "exiting\n"); - exitcode = EXIT_SUCCESS; + exitcode = 0; cleanup: diff --git a/tests/http/clients/upload-pausing.c b/tests/http/clients/upload_pausing.c similarity index 57% rename from tests/http/clients/upload-pausing.c rename to tests/http/clients/upload_pausing.c index 968c9a8e69..d311096a4d 100644 --- a/tests/http/clients/upload-pausing.c +++ b/tests/http/clients/upload_pausing.c @@ -21,128 +21,15 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * upload pausing - * - */ /* This is based on the PoC client of issue #11769 */ -#include - -#include -#include -#include - -#ifndef _MSC_VER -/* somewhat Unix-specific */ -#include /* getopt() */ -#endif - -#ifndef _MSC_VER -static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type) -{ - /* - * This is the trace look that is similar to what libcurl makes on its - * own. - */ - static const char * const s_infotype[] = { - "* ", "< ", "> ", "{ ", "} ", "{ ", "} " - }; - if(idsbuf && *idsbuf) - fprintf(log, "%s%s", idsbuf, s_infotype[type]); - else - fputs(s_infotype[type], log); -} - -#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] " -#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \ - CURL_FORMAT_CURL_OFF_T "] " -/* -** callback for CURLOPT_DEBUGFUNCTION -*/ -static int debug_cb(CURL *handle, curl_infotype type, - char *data, size_t size, - void *userdata) -{ - FILE *output = stderr; - static int newl = 0; - static int traced_data = 0; - char idsbuf[60]; - curl_off_t xfer_id, conn_id; - - (void)handle; /* not used */ - (void)userdata; - - if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) { - if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) && - conn_id >= 0) { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2, xfer_id, - conn_id); - } - else { - curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id); - } - } - else - idsbuf[0] = 0; - - switch(type) { - case CURLINFO_HEADER_OUT: - if(size > 0) { - size_t st = 0; - size_t i; - for(i = 0; i < size - 1; i++) { - if(data[i] == '\n') { /* LF */ - if(!newl) { - log_line_start(output, idsbuf, type); - } - (void)fwrite(data + st, i - st + 1, 1, output); - st = i + 1; - newl = 0; - } - } - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data + st, i - st + 1, 1, output); - } - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_TEXT: - case CURLINFO_HEADER_IN: - if(!newl) - log_line_start(output, idsbuf, type); - (void)fwrite(data, size, 1, output); - newl = (size && (data[size - 1] != '\n')) ? 1 : 0; - traced_data = 0; - break; - case CURLINFO_DATA_OUT: - case CURLINFO_DATA_IN: - case CURLINFO_SSL_DATA_IN: - case CURLINFO_SSL_DATA_OUT: - if(!traced_data) { - if(!newl) - log_line_start(output, idsbuf, type); - fprintf(output, "[%ld bytes data]\n", (long)size); - newl = 0; - traced_data = 1; - } - break; - default: /* nada */ - newl = 0; - traced_data = 1; - break; - } - - return 0; -} - -#define PAUSE_READ_AFTER 1 static size_t total_read = 0; static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { + static const size_t PAUSE_READ_AFTER = 1; + (void)size; (void)nmemb; (void)userdata; @@ -180,7 +67,7 @@ static int progress_callback(void *clientp, return 0; } -static void usage(const char *msg) +static void usage_upload_pausing(const char *msg) { if(msg) fprintf(stderr, "%s\n", msg); @@ -191,17 +78,8 @@ static void usage(const char *msg) ); } -#define ERR() \ - do { \ - fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \ - return 2; \ - } while(0) - -#endif /* !_MSC_VER */ - -int main(int argc, char *argv[]) +static int test_upload_pausing(int argc, char *argv[]) { -#ifndef _MSC_VER CURL *curl; CURLcode rc = CURLE_OK; CURLU *cu; @@ -211,31 +89,31 @@ int main(int argc, char *argv[]) long http_version = CURL_HTTP_VERSION_1_1; int ch; - while((ch = getopt(argc, argv, "V:")) != -1) { + while((ch = cgetopt(argc, argv, "V:")) != -1) { switch(ch) { case 'V': { - if(!strcmp("http/1.1", optarg)) + if(!strcmp("http/1.1", coptarg)) http_version = CURL_HTTP_VERSION_1_1; - else if(!strcmp("h2", optarg)) + else if(!strcmp("h2", coptarg)) http_version = CURL_HTTP_VERSION_2_0; - else if(!strcmp("h3", optarg)) + else if(!strcmp("h3", coptarg)) http_version = CURL_HTTP_VERSION_3ONLY; else { - usage("invalid http version"); + usage_upload_pausing("invalid http version"); return 1; } break; } default: - usage("invalid option"); - return 1; + usage_upload_pausing("invalid option"); + return 1; } } - argc -= optind; - argv += optind; + argc -= coptind; + argv += coptind; if(argc != 1) { - usage("not enough arguments"); + usage_upload_pausing("not enough arguments"); return 2; } url = argv[0]; @@ -313,10 +191,4 @@ int main(int argc, char *argv[]) curl_global_cleanup(); return (int)rc; -#else - (void)argc; - (void)argv; - fprintf(stderr, "Not supported with this compiler.\n"); - return 1; -#endif /* !_MSC_VER */ } diff --git a/tests/http/clients/ws-data.c b/tests/http/clients/ws_data.c similarity index 72% rename from tests/http/clients/ws-data.c rename to tests/http/clients/ws_data.c index c55eb9f958..bdbade2adc 100644 --- a/tests/http/clients/ws-data.c +++ b/tests/http/clients/ws_data.c @@ -21,79 +21,7 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * WebSockets data echos - * - */ -/* curl stuff */ -#include - -#include -#include -#include - -#if !defined(CURL_DISABLE_WEBSOCKETS) && !defined(_MSC_VER) - -#ifndef _MSC_VER -/* somewhat Unix-specific */ -#include /* getopt() */ -#endif - -#ifdef _WIN32 -#include -#else -#include -#endif - - -static -void dump(const char *text, unsigned char *ptr, size_t size, - char nohex) -{ - size_t i; - size_t c; - - unsigned int width = 0x10; - - if(nohex) - /* without the hex output, we can fit more on screen */ - width = 0x40; - - fprintf(stderr, "%s, %lu bytes (0x%lx)\n", - text, (unsigned long)size, (unsigned long)size); - - for(i = 0; i < size; i += width) { - - fprintf(stderr, "%4.4lx: ", (unsigned long)i); - - if(!nohex) { - /* hex not disabled, show it */ - for(c = 0; c < width; c++) - if(i + c < size) - fprintf(stderr, "%02x ", ptr[i + c]); - else - fputs(" ", stderr); - } - - for(c = 0; (c < width) && (i + c < size); c++) { - /* check for 0D0A; if found, skip past and start a new line of output */ - if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D && - ptr[i + c + 1] == 0x0A) { - i += (c + 2 - width); - break; - } - fprintf(stderr, "%c", - (ptr[i + c] >= 0x20) && (ptr[i + c] < 0x80) ? ptr[i + c] : '.'); - /* check again for 0D0A, to avoid an extra \n if it's at width */ - if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D && - ptr[i + c + 2] == 0x0A) { - i += (c + 3 - width); - break; - } - } - fputc('\n', stderr); /* newline */ - } -} +#ifndef CURL_DISABLE_WEBSOCKETS static CURLcode check_recv(const struct curl_ws_frame *frame, size_t r_offset, size_t nread, size_t exp_len) @@ -131,20 +59,6 @@ static CURLcode check_recv(const struct curl_ws_frame *frame, return CURLE_OK; } -#if defined(__TANDEM) -# include -#endif - -/* just close the connection */ -static void websocket_close(CURL *curl) -{ - size_t sent; - CURLcode result = - curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE); - fprintf(stderr, - "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent); -} - static CURLcode data_echo(CURL *curl, size_t count, size_t plen_min, size_t plen_max) { @@ -219,18 +133,18 @@ static CURLcode data_echo(CURL *curl, size_t count, if(rblock && sblock) { fprintf(stderr, "EAGAIN, sleep, try again\n"); - #ifdef _WIN32 +#ifdef _WIN32 Sleep(100); - #elif defined(__TANDEM) +#elif defined(__TANDEM) /* NonStop only defines usleep when building for a threading model */ - # if defined(_PUT_MODEL_) || defined(_KLT_MODEL_) +# if defined(_PUT_MODEL_) || defined(_KLT_MODEL_) usleep(100*1000); - # else +# else PROCESS_DELAY_(100*1000); - # endif - #else +# endif +#else usleep(100*1000); - #endif +#endif } } @@ -251,7 +165,7 @@ out: return r; } -static void usage(const char *msg) +static void usage_ws_data(const char *msg) { if(msg) fprintf(stderr, "%s\n", msg); @@ -264,38 +178,38 @@ static void usage(const char *msg) #endif -int main(int argc, char *argv[]) +static int test_ws_data(int argc, char *argv[]) { -#if !defined(CURL_DISABLE_WEBSOCKETS) && !defined(_MSC_VER) +#ifndef CURL_DISABLE_WEBSOCKETS CURL *curl; CURLcode res = CURLE_OK; const char *url; size_t plen_min = 0, plen_max = 0, count = 1; int ch; - while((ch = getopt(argc, argv, "c:hm:M:")) != -1) { + while((ch = cgetopt(argc, argv, "c:hm:M:")) != -1) { switch(ch) { case 'h': - usage(NULL); + usage_ws_data(NULL); res = CURLE_BAD_FUNCTION_ARGUMENT; goto cleanup; case 'c': - count = (size_t)strtol(optarg, NULL, 10); + count = (size_t)strtol(coptarg, NULL, 10); break; case 'm': - plen_min = (size_t)strtol(optarg, NULL, 10); + plen_min = (size_t)strtol(coptarg, NULL, 10); break; case 'M': - plen_max = (size_t)strtol(optarg, NULL, 10); + plen_max = (size_t)strtol(coptarg, NULL, 10); break; default: - usage("invalid option"); + usage_ws_data("invalid option"); res = CURLE_BAD_FUNCTION_ARGUMENT; goto cleanup; } } - argc -= optind; - argv += optind; + argc -= coptind; + argv += coptind; if(!plen_max) plen_max = plen_min; @@ -308,7 +222,7 @@ int main(int argc, char *argv[]) } if(argc != 1) { - usage(NULL); + usage_ws_data(NULL); res = CURLE_BAD_FUNCTION_ARGUMENT; goto cleanup; } diff --git a/tests/http/clients/ws-pingpong.c b/tests/http/clients/ws_pingpong.c similarity index 86% rename from tests/http/clients/ws-pingpong.c rename to tests/http/clients/ws_pingpong.c index b2cf135469..c27a71e54f 100644 --- a/tests/http/clients/ws-pingpong.c +++ b/tests/http/clients/ws_pingpong.c @@ -21,24 +21,6 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* - * WebSockets pingpong - * - */ -/* curl stuff */ -#include "curl_setup.h" -#include - -#include -#include -#include - -#ifdef _WIN32 -#include -#else -#include -#endif - #ifndef CURL_DISABLE_WEBSOCKETS static CURLcode ping(CURL *curl, const char *send_payload) @@ -81,19 +63,6 @@ static CURLcode recv_pong(CURL *curl, const char *expected_payload) return CURLE_RECV_ERROR; } -/* just close the connection */ -static void websocket_close(CURL *curl) -{ - size_t sent; - CURLcode result = - curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE); - fprintf(stderr, - "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent); -} - -#if defined(__TANDEM) -# include -#endif static CURLcode pingpong(CURL *curl, const char *payload) { CURLcode res; @@ -129,7 +98,7 @@ static CURLcode pingpong(CURL *curl, const char *payload) #endif -int main(int argc, char *argv[]) +static int test_ws_pingpong(int argc, char *argv[]) { #ifndef CURL_DISABLE_WEBSOCKETS CURL *curl; diff --git a/tests/http/test_02_download.py b/tests/http/test_02_download.py index e65e0ece9d..b42f8617a2 100644 --- a/tests/http/test_02_download.py +++ b/tests/http/test_02_download.py @@ -320,7 +320,7 @@ class TestDownload: count = 2 docname = 'data-10m' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -343,7 +343,7 @@ class TestDownload: run_env['CURL_DEBUG'] = 'multi,http/2' if swin_max > 0: run_env['CURL_H2_STREAM_WIN_MAX'] = f'{swin_max}' - client = LocalClient(name='hx-download', env=env, run_env=run_env) + client = LocalClient(name='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=[ @@ -363,7 +363,7 @@ class TestDownload: max_parallel = 5 docname = 'data-10m' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -391,7 +391,7 @@ class TestDownload: pause_offset = 12 * 1024 docname = 'data-1m' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -420,7 +420,7 @@ class TestDownload: abort_offset = 12 * 1024 docname = 'data-1m' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -449,7 +449,7 @@ class TestDownload: fail_offset = 12 * 1024 docname = 'data-1m' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -483,7 +483,7 @@ class TestDownload: # before protocol switch has happened def test_02_25_h2_upgrade_x(self, env: Env, httpd): url = f'http://localhost:{env.http_port}/data-100k' - client = LocalClient(name='h2-upgrade-extreme', env=env, timeout=15) + client = LocalClient(name='h2_upgrade_extreme', env=env, timeout=15) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[url]) @@ -494,7 +494,7 @@ class TestDownload: @pytest.mark.parametrize("proto", ['http/1.1', 'h2', 'h3']) def test_02_26_session_shared_reuse(self, env: Env, proto, httpd, nghttpx): url = f'https://{env.authority_for(env.domain1, proto)}/data-100k' - client = LocalClient(name='tls-session-reuse', env=env) + client = LocalClient(name='tls_session_reuse', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[proto, url]) @@ -505,7 +505,7 @@ class TestDownload: def test_02_27a_paused_no_cl(self, env: Env, httpd, nghttpx, proto): url = f'https://{env.authority_for(env.domain1, proto)}' \ '/curltest/tweak/?&chunks=6&chunk_size=8000' - client = LocalClient(env=env, name='h2-pausing') + client = LocalClient(env=env, name='h2_pausing') r = client.run(args=['-V', proto, url]) r.check_exit_code(0) @@ -514,7 +514,7 @@ class TestDownload: def test_02_27b_paused_no_cl(self, env: Env, httpd, nghttpx, proto): url = f'https://{env.authority_for(env.domain1, proto)}' \ '/curltest/tweak/?error=502' - client = LocalClient(env=env, name='h2-pausing') + client = LocalClient(env=env, name='h2_pausing') r = client.run(args=['-V', proto, url]) r.check_exit_code(0) @@ -523,7 +523,7 @@ class TestDownload: def test_02_27c_paused_no_cl(self, env: Env, httpd, nghttpx, proto): url = f'https://{env.authority_for(env.domain1, proto)}' \ '/curltest/tweak/?status=200&chunks=1&chunk_size=100' - client = LocalClient(env=env, name='h2-pausing') + client = LocalClient(env=env, name='h2_pausing') r = client.run(args=['-V', proto, url]) r.check_exit_code(0) @@ -560,7 +560,7 @@ class TestDownload: count = 2 docname = 'data-10m' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -614,7 +614,7 @@ class TestDownload: if proto != 'h3': port = env.nghttpx_https_port url = f'https://{env.domain1}:{port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -660,7 +660,7 @@ class TestDownload: url = f'https://{env.domain1}:{port}/{docname}' run_env = os.environ.copy() run_env['CURL_DEBUG'] = 'multi' - client = LocalClient(name='hx-download', env=env, run_env=run_env) + client = LocalClient(name='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=[ @@ -698,7 +698,7 @@ class TestDownload: url = f'https://{env.domain1}:{port}/{docname}' run_env = os.environ.copy() run_env['CURL_DEBUG'] = 'multi' - client = LocalClient(name='hx-download', env=env, run_env=run_env) + client = LocalClient(name='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=[ @@ -740,7 +740,7 @@ class TestDownload: pause_offset = 1024 * 1024 docname = 'bomb-100m.txt.var' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ diff --git a/tests/http/test_07_upload.py b/tests/http/test_07_upload.py index 990a999f33..56adeffdae 100644 --- a/tests/http/test_07_upload.py +++ b/tests/http/test_07_upload.py @@ -180,7 +180,7 @@ class TestUpload: count = 2 upload_size = 128*1024 url = f'https://localhost:{env.https_port}/curltest/put' - client = LocalClient(name='hx-upload', env=env) + client = LocalClient(name='hx_upload', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -196,7 +196,7 @@ class TestUpload: count = 2 upload_size = 128*1024 url = f'https://localhost:{env.https_port}/curltest/put' - client = LocalClient(name='hx-upload', env=env) + client = LocalClient(name='hx_upload', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -212,7 +212,7 @@ class TestUpload: count = 2 upload_size = 128*1024 url = f'https://localhost:{env.https_port}/curltest/echo' - client = LocalClient(name='hx-upload', env=env) + client = LocalClient(name='hx_upload', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -543,7 +543,7 @@ class TestUpload: pytest.skip("h3 not supported") if proto == 'h3' and env.curl_uses_lib('msh3'): pytest.skip("msh3 fails here") - client = LocalClient(name='upload-pausing', env=env, timeout=60) + client = LocalClient(name='upload_pausing', env=env, timeout=60) if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]&die_after=0' @@ -565,7 +565,7 @@ class TestUpload: pytest.skip("h3 not supported") if proto == 'h3' and env.curl_uses_lib('msh3'): pytest.skip("msh3 fails here") - client = LocalClient(name='upload-pausing', env=env, timeout=60) + client = LocalClient(name='upload_pausing', env=env, timeout=60) if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=0&just_die=1' @@ -582,7 +582,7 @@ class TestUpload: pytest.skip("h3 not supported") if proto == 'h3' and env.curl_uses_lib('msh3'): pytest.skip("msh3 fails here") - client = LocalClient(name='upload-pausing', env=env, timeout=60) + client = LocalClient(name='upload_pausing', env=env, timeout=60) if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=0&die_after_100=1' @@ -618,7 +618,7 @@ class TestUpload: count = 1 upload_size = 128*1024 url = f'https://localhost:{env.https_port}/curltest/put-redir-{httpcode}' - client = LocalClient(name='hx-upload', env=env) + client = LocalClient(name='hx_upload', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ @@ -746,7 +746,7 @@ class TestUpload: if proto != 'h3': port = env.nghttpx_https_port url = f'https://{env.domain1}:{port}/curltest/put' - client = LocalClient(name='hx-upload', env=env) + client = LocalClient(name='hx_upload', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ diff --git a/tests/http/test_08_caddy.py b/tests/http/test_08_caddy.py index 5276612439..3c62de886b 100644 --- a/tests/http/test_08_caddy.py +++ b/tests/http/test_08_caddy.py @@ -215,7 +215,7 @@ class TestCaddy: count = 2 docname = 'data10k.data' url = f'https://{env.domain1}:{caddy.port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ diff --git a/tests/http/test_09_push.py b/tests/http/test_09_push.py index af5b482a64..b1e37dee7f 100644 --- a/tests/http/test_09_push.py +++ b/tests/http/test_09_push.py @@ -76,7 +76,7 @@ class TestPush: self.httpd_configure(env, httpd) # use localhost as we do not have resolve support in local client url = f'https://localhost:{env.https_port}/push/data1' - client = LocalClient(name='h2-serverpush', env=env) + client = LocalClient(name='h2_serverpush', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[url]) diff --git a/tests/http/test_17_ssl_use.py b/tests/http/test_17_ssl_use.py index 3da2499de1..348a649e06 100644 --- a/tests/http/test_17_ssl_use.py +++ b/tests/http/test_17_ssl_use.py @@ -330,7 +330,7 @@ class TestSSLUse: count = 2 docname = 'data-10k' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env) + client = LocalClient(name='hx_download', env=env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') r = client.run(args=[ diff --git a/tests/http/test_19_shutdown.py b/tests/http/test_19_shutdown.py index fe6d594547..67b3f6402b 100644 --- a/tests/http/test_19_shutdown.py +++ b/tests/http/test_19_shutdown.py @@ -112,7 +112,7 @@ class TestShutdown: count = 10 docname = 'data.json' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env, run_env={ + client = LocalClient(name='hx_download', env=env, run_env={ 'CURL_GRACEFUL_SHUTDOWN': '2000', 'CURL_DEBUG': 'ssl,multi' }) @@ -185,7 +185,7 @@ class TestShutdown: count = 500 docname = 'data.json' url = f'https://localhost:{env.https_port}/{docname}' - client = LocalClient(name='hx-download', env=env, run_env={ + client = LocalClient(name='hx_download', env=env, run_env={ 'CURL_GRACEFUL_SHUTDOWN': '2000', 'CURL_DEBUG': 'ssl,multi' }) diff --git a/tests/http/test_20_websockets.py b/tests/http/test_20_websockets.py index d78d64ac4f..dfb9d1389c 100644 --- a/tests/http/test_20_websockets.py +++ b/tests/http/test_20_websockets.py @@ -70,7 +70,7 @@ class TestWebsockets: @pytest.fixture(autouse=True, scope='class') def ws_echo(self, env): - self.run_dir = os.path.join(env.gen_dir, 'ws-echo-server') + self.run_dir = os.path.join(env.gen_dir, 'ws_echo_server') err_file = os.path.join(self.run_dir, 'stderr') self._rmrf(self.run_dir) self._mkpath(self.run_dir) @@ -109,7 +109,7 @@ class TestWebsockets: def test_20_02_pingpong_small(self, env: Env, ws_echo): payload = 125 * "x" - client = LocalClient(env=env, name='ws-pingpong') + client = LocalClient(env=env, name='ws_pingpong') if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' @@ -119,7 +119,7 @@ class TestWebsockets: # the python websocket server does not like 'large' control frames def test_20_03_pingpong_too_large(self, env: Env, ws_echo): payload = 127 * "x" - client = LocalClient(env=env, name='ws-pingpong') + client = LocalClient(env=env, name='ws_pingpong') if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' @@ -127,7 +127,7 @@ class TestWebsockets: r.check_exit_code(100) # CURLE_TOO_LARGE def test_20_04_data_small(self, env: Env, ws_echo): - client = LocalClient(env=env, name='ws-data') + client = LocalClient(env=env, name='ws_data') if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' @@ -135,7 +135,7 @@ class TestWebsockets: r.check_exit_code(0) def test_20_05_data_med(self, env: Env, ws_echo): - client = LocalClient(env=env, name='ws-data') + client = LocalClient(env=env, name='ws_data') if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' @@ -143,7 +143,7 @@ class TestWebsockets: r.check_exit_code(0) def test_20_06_data_large(self, env: Env, ws_echo): - client = LocalClient(env=env, name='ws-data') + client = LocalClient(env=env, name='ws_data') if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' @@ -153,7 +153,7 @@ class TestWebsockets: def test_20_07_data_large_small_recv(self, env: Env, ws_echo): run_env = os.environ.copy() run_env['CURL_WS_CHUNK_SIZE'] = '1024' - client = LocalClient(env=env, name='ws-data', run_env=run_env) + client = LocalClient(env=env, name='ws_data', run_env=run_env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' @@ -165,7 +165,7 @@ class TestWebsockets: def test_20_08_data_very_large(self, env: Env, ws_echo): run_env = os.environ.copy() run_env['CURL_WS_CHUNK_EAGAIN'] = '8192' - client = LocalClient(env=env, name='ws-data', run_env=run_env) + client = LocalClient(env=env, name='ws_data', run_env=run_env) if not client.exists(): pytest.skip(f'example client not built: {client.name}') url = f'ws://localhost:{env.ws_port}/' diff --git a/tests/http/testenv/client.py b/tests/http/testenv/client.py index 3981752ec4..0b2d9bb4a7 100644 --- a/tests/http/testenv/client.py +++ b/tests/http/testenv/client.py @@ -44,7 +44,7 @@ class LocalClient: timeout: Optional[float] = None, run_env: Optional[Dict[str,str]] = None): self.name = name - self.path = os.path.join(env.build_dir, f'tests/http/clients/{name}') + self.path = os.path.join(env.build_dir, 'tests/http/clients/clients') self.env = env self._run_env = run_env self._timeout = timeout if timeout else env.test_timeout @@ -86,7 +86,7 @@ class LocalClient: self._rmf(self._stderrfile) start = datetime.now() exception = None - myargs = [self.path] + myargs = [self.path, self.name] myargs.extend(args) run_env = None if self._run_env: