mirror of
https://github.com/curl/curl.git
synced 2026-04-14 22:01:41 +03:00
tests/libtest/cli*: fix init/deinit, leaks, and more
- add global init and deinit where missing. - check global init success. - improve cleaning up on error codepaths. - drop `CLI_ERR()` macro, that could quit. Also make error messages tell the reason. Closes #19309
This commit is contained in:
parent
d29f14b9cf
commit
70f240b2ed
9 changed files with 224 additions and 127 deletions
|
|
@ -80,21 +80,15 @@ static size_t cb(char *data, size_t size, size_t nmemb, void *clientp)
|
|||
return realsize;
|
||||
}
|
||||
|
||||
#define CLI_ERR() \
|
||||
do { \
|
||||
curl_mfprintf(stderr, "something unexpected went wrong - bailing out!\n");\
|
||||
return (CURLcode)2; \
|
||||
} while(0)
|
||||
|
||||
static CURLcode test_cli_h2_pausing(const char *URL)
|
||||
{
|
||||
struct handle handles[2];
|
||||
CURLM *multi_handle;
|
||||
CURLM *multi_handle = NULL;
|
||||
int still_running = 1, msgs_left, numfds;
|
||||
size_t i;
|
||||
CURLMsg *msg;
|
||||
int rounds = 0;
|
||||
CURLcode rc = CURLE_OK;
|
||||
CURLcode result = CURLE_OK;
|
||||
CURLU *cu;
|
||||
struct curl_slist *resolve = NULL;
|
||||
char resolve_buf[1024];
|
||||
|
|
@ -139,25 +133,35 @@ static CURLcode test_cli_h2_pausing(const char *URL)
|
|||
}
|
||||
url = test_argv[0];
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
curl_global_trace("ids,time,http/2,http/3");
|
||||
|
||||
memset(handles, 0, sizeof(handles));
|
||||
|
||||
cu = curl_url();
|
||||
if(!cu) {
|
||||
curl_mfprintf(stderr, "out of memory\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
||||
curl_mfprintf(stderr, "not a URL: '%s'\n", url);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
||||
curl_mfprintf(stderr, "could not get host of '%s'\n", url);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
||||
curl_mfprintf(stderr, "could not get port of '%s'\n", url);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
memset(&resolve, 0, sizeof(resolve));
|
||||
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
||||
|
|
@ -183,24 +187,35 @@ static CURLcode test_cli_h2_pausing(const char *URL)
|
|||
curl_easy_setopt(handles[i].h, CURLOPT_RESOLVE, resolve) != CURLE_OK ||
|
||||
curl_easy_setopt(handles[i].h, CURLOPT_PIPEWAIT, 1L) ||
|
||||
curl_easy_setopt(handles[i].h, CURLOPT_URL, url) != CURLE_OK) {
|
||||
CLI_ERR();
|
||||
curl_mfprintf(stderr, "failed configuring easy handle - bailing out\n");
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
}
|
||||
curl_easy_setopt(handles[i].h, CURLOPT_HTTP_VERSION, http_version);
|
||||
}
|
||||
|
||||
multi_handle = curl_multi_init();
|
||||
if(!multi_handle)
|
||||
CLI_ERR();
|
||||
if(!multi_handle) {
|
||||
curl_mfprintf(stderr, "curl_multi_init() failed - bailing out\n");
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
for(i = 0; i < CURL_ARRAYSIZE(handles); i++) {
|
||||
if(curl_multi_add_handle(multi_handle, handles[i].h) != CURLM_OK)
|
||||
CLI_ERR();
|
||||
if(curl_multi_add_handle(multi_handle, handles[i].h) != CURLM_OK) {
|
||||
curl_mfprintf(stderr, "curl_multi_add_handle() failed - bailing out\n");
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
for(rounds = 0;; rounds++) {
|
||||
curl_mfprintf(stderr, "INFO: multi_perform round %d\n", rounds);
|
||||
if(curl_multi_perform(multi_handle, &still_running) != CURLM_OK)
|
||||
CLI_ERR();
|
||||
if(curl_multi_perform(multi_handle, &still_running) != CURLM_OK) {
|
||||
curl_mfprintf(stderr, "curl_multi_perform() failed - bailing out\n");
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(!still_running) {
|
||||
int as_expected = 1;
|
||||
|
|
@ -228,13 +243,16 @@ static CURLcode test_cli_h2_pausing(const char *URL)
|
|||
if(!as_expected) {
|
||||
curl_mfprintf(stderr, "ERROR: handles not in expected state "
|
||||
"after %d rounds\n", rounds);
|
||||
rc = (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(curl_multi_poll(multi_handle, NULL, 0, 100, &numfds) != CURLM_OK)
|
||||
CLI_ERR();
|
||||
if(curl_multi_poll(multi_handle, NULL, 0, 100, &numfds) != CURLM_OK) {
|
||||
curl_mfprintf(stderr, "curl_multi_poll() failed - bailing out\n");
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* !checksrc! disable EQUALSNULL 1 */
|
||||
while((msg = curl_multi_info_read(multi_handle, &msgs_left)) != NULL) {
|
||||
|
|
@ -246,8 +264,8 @@ static CURLcode test_cli_h2_pausing(const char *URL)
|
|||
"resumed=%d, result %d - wtf?\n", i,
|
||||
handles[i].paused,
|
||||
handles[i].resumed, msg->data.result);
|
||||
rc = (CURLcode)1;
|
||||
goto out;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -278,7 +296,8 @@ static CURLcode test_cli_h2_pausing(const char *URL)
|
|||
}
|
||||
}
|
||||
|
||||
out:
|
||||
cleanup:
|
||||
|
||||
for(i = 0; i < CURL_ARRAYSIZE(handles); i++) {
|
||||
curl_multi_remove_handle(multi_handle, handles[i].h);
|
||||
curl_easy_cleanup(handles[i].h);
|
||||
|
|
@ -291,5 +310,5 @@ out:
|
|||
curl_multi_cleanup(multi_handle);
|
||||
curl_global_cleanup();
|
||||
|
||||
return rc;
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include "testtrace.h"
|
||||
#include "memdebug.h"
|
||||
|
||||
static FILE *out_download;
|
||||
static FILE *out_download = NULL;
|
||||
|
||||
static int setup_h2_serverpush(CURL *hnd, const char *url)
|
||||
{
|
||||
|
|
@ -52,7 +52,7 @@ static int setup_h2_serverpush(CURL *hnd, const char *url)
|
|||
return 0; /* all is good */
|
||||
}
|
||||
|
||||
static FILE *out_push;
|
||||
static FILE *out_push = NULL;
|
||||
|
||||
/* called when there is an incoming push */
|
||||
static int server_push_callback(CURL *parent,
|
||||
|
|
@ -106,9 +106,10 @@ static int server_push_callback(CURL *parent,
|
|||
*/
|
||||
static CURLcode test_cli_h2_serverpush(const char *URL)
|
||||
{
|
||||
CURL *easy;
|
||||
CURL *easy = NULL;
|
||||
CURLM *multi_handle;
|
||||
int transfers = 1; /* we start with one */
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
debug_config.nohex = TRUE;
|
||||
debug_config.tracetime = FALSE;
|
||||
|
|
@ -118,13 +119,27 @@ static CURLcode test_cli_h2_serverpush(const char *URL)
|
|||
return (CURLcode)2;
|
||||
}
|
||||
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
multi_handle = curl_multi_init();
|
||||
if(!multi_handle) {
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
easy = curl_easy_init();
|
||||
if(!easy) {
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(setup_h2_serverpush(easy, URL)) {
|
||||
curlx_fclose(out_download);
|
||||
curl_mfprintf(stderr, "failed\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
|
||||
|
|
@ -163,11 +178,16 @@ static CURLcode test_cli_h2_serverpush(const char *URL)
|
|||
|
||||
} while(transfers); /* as long as we have transfers going */
|
||||
|
||||
cleanup:
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
curlx_fclose(out_download);
|
||||
if(out_download)
|
||||
curlx_fclose(out_download);
|
||||
if(out_push)
|
||||
curlx_fclose(out_push);
|
||||
|
||||
return CURLE_OK;
|
||||
curl_global_cleanup();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,13 +43,18 @@ static CURLcode test_cli_h2_upgrade_extreme(const char *URL)
|
|||
CURLMsg *msg;
|
||||
int msgs_in_queue;
|
||||
char range[128];
|
||||
CURLcode exitcode = (CURLcode)1;
|
||||
CURLcode result = (CURLcode)1;
|
||||
|
||||
if(!URL) {
|
||||
curl_mfprintf(stderr, "need URL as argument\n");
|
||||
return (CURLcode)2;
|
||||
}
|
||||
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
multi = curl_multi_init();
|
||||
if(!multi) {
|
||||
curl_mfprintf(stderr, "curl_multi_init failed\n");
|
||||
|
|
@ -144,7 +149,7 @@ static CURLcode test_cli_h2_upgrade_extreme(const char *URL)
|
|||
} while(running_handles > 0 || start_count);
|
||||
|
||||
curl_mfprintf(stderr, "exiting\n");
|
||||
exitcode = CURLE_OK;
|
||||
result = CURLE_OK;
|
||||
|
||||
cleanup:
|
||||
|
||||
|
|
@ -161,5 +166,7 @@ cleanup:
|
|||
curl_multi_cleanup(multi);
|
||||
}
|
||||
|
||||
return exitcode;
|
||||
curl_global_cleanup();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -278,9 +278,9 @@ static void usage_hx_download(const char *msg)
|
|||
*/
|
||||
static CURLcode test_cli_hx_download(const char *URL)
|
||||
{
|
||||
CURLM *multi_handle;
|
||||
CURLM *multi_handle = NULL;
|
||||
struct CURLMsg *m;
|
||||
CURLSH *share;
|
||||
CURLSH *share = NULL;
|
||||
const char *url;
|
||||
size_t i, n, max_parallel = 1;
|
||||
size_t active_transfers;
|
||||
|
|
@ -288,7 +288,7 @@ static CURLcode test_cli_hx_download(const char *URL)
|
|||
size_t abort_offset = 0;
|
||||
size_t fail_offset = 0;
|
||||
int abort_paused = 0, use_earlydata = 0;
|
||||
struct transfer_d *t;
|
||||
struct transfer_d *t = NULL;
|
||||
long http_version = CURL_HTTP_VERSION_2_0;
|
||||
int ch;
|
||||
struct curl_slist *host = NULL;
|
||||
|
|
@ -306,7 +306,7 @@ static CURLcode test_cli_hx_download(const char *URL)
|
|||
case 'h':
|
||||
usage_hx_download(NULL);
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
goto optcleanup;
|
||||
case 'a':
|
||||
abort_paused = 1;
|
||||
break;
|
||||
|
|
@ -354,29 +354,34 @@ static CURLcode test_cli_hx_download(const char *URL)
|
|||
else {
|
||||
usage_hx_download("invalid http version");
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
goto optcleanup;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
usage_hx_download("invalid option");
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
goto optcleanup;
|
||||
}
|
||||
}
|
||||
test_argc -= coptind;
|
||||
test_argv += coptind;
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl_global_trace("ids,time,http/2,http/3");
|
||||
|
||||
if(test_argc != 1) {
|
||||
usage_hx_download("not enough arguments");
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
goto optcleanup;
|
||||
}
|
||||
url = test_argv[0];
|
||||
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
result = (CURLcode)3;
|
||||
goto optcleanup;
|
||||
}
|
||||
|
||||
if(resolve)
|
||||
host = curl_slist_append(NULL, resolve);
|
||||
|
||||
|
|
@ -525,28 +530,36 @@ static CURLcode test_cli_hx_download(const char *URL)
|
|||
|
||||
} while(active_transfers); /* as long as we have transfers going */
|
||||
|
||||
cleanup:
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
for(i = 0; i < transfer_count_d; ++i) {
|
||||
t = &transfer_d[i];
|
||||
if(t->out) {
|
||||
curlx_fclose(t->out);
|
||||
t->out = NULL;
|
||||
if(transfer_d) {
|
||||
for(i = 0; i < transfer_count_d; ++i) {
|
||||
t = &transfer_d[i];
|
||||
if(t->out) {
|
||||
curlx_fclose(t->out);
|
||||
t->out = NULL;
|
||||
}
|
||||
if(t->easy) {
|
||||
curl_easy_cleanup(t->easy);
|
||||
t->easy = NULL;
|
||||
}
|
||||
if(t->result)
|
||||
result = t->result;
|
||||
else /* on success we expect ssl to have been checked */
|
||||
assert(t->checked_ssl);
|
||||
}
|
||||
if(t->easy) {
|
||||
curl_easy_cleanup(t->easy);
|
||||
t->easy = NULL;
|
||||
}
|
||||
if(t->result)
|
||||
result = t->result;
|
||||
else /* on success we expect ssl to have been checked */
|
||||
assert(t->checked_ssl);
|
||||
free(transfer_d);
|
||||
}
|
||||
free(transfer_d);
|
||||
|
||||
curl_share_cleanup(share);
|
||||
curl_slist_free_all(host);
|
||||
cleanup:
|
||||
|
||||
curl_global_cleanup();
|
||||
|
||||
optcleanup:
|
||||
|
||||
free(resolve);
|
||||
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -241,11 +241,12 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
int reuse_easy = 0;
|
||||
int use_earlydata = 0;
|
||||
int announce_length = 0;
|
||||
struct transfer_u *t;
|
||||
struct transfer_u *t = NULL;
|
||||
long http_version = CURL_HTTP_VERSION_2_0;
|
||||
struct curl_slist *host = NULL;
|
||||
const char *resolve = NULL;
|
||||
int ch;
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
(void)URL;
|
||||
|
||||
|
|
@ -320,22 +321,27 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
return (CURLcode)2;
|
||||
}
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl_global_trace("ids,time,http/2,http/3");
|
||||
|
||||
if(test_argc != 1) {
|
||||
usage_hx_upload("not enough arguments");
|
||||
return (CURLcode)2;
|
||||
}
|
||||
url = test_argv[0];
|
||||
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
curl_global_trace("ids,time,http/2,http/3");
|
||||
|
||||
if(resolve)
|
||||
host = curl_slist_append(NULL, resolve);
|
||||
|
||||
share = curl_share_init();
|
||||
if(!share) {
|
||||
curl_mfprintf(stderr, "error allocating share\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
|
||||
curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
|
||||
|
|
@ -347,7 +353,8 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
transfer_u = calloc(transfer_count_u, sizeof(*transfer_u));
|
||||
if(!transfer_u) {
|
||||
curl_mfprintf(stderr, "error allocating transfer structs\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
active_transfers = 0;
|
||||
|
|
@ -363,18 +370,20 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
|
||||
if(reuse_easy) {
|
||||
CURL *easy = curl_easy_init();
|
||||
CURLcode rc = CURLE_OK;
|
||||
if(!easy) {
|
||||
curl_mfprintf(stderr, "failed to init easy handle\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
for(i = 0; i < transfer_count_u; ++i) {
|
||||
CURLcode rc;
|
||||
t = &transfer_u[i];
|
||||
t->easy = easy;
|
||||
if(setup_hx_upload(t->easy, url, t, http_version, host, share,
|
||||
use_earlydata, announce_length)) {
|
||||
curl_mfprintf(stderr, "[t-%zu] FAILED setup\n", i);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
curl_mfprintf(stderr, "[t-%zu] STARTING\n", t->idx);
|
||||
|
|
@ -396,7 +405,8 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
if(!t->easy || setup_hx_upload(t->easy, url, t, http_version, host,
|
||||
share, use_earlydata, announce_length)) {
|
||||
curl_mfprintf(stderr, "[t-%zu] FAILED setup\n", i);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
curl_multi_add_handle(multi_handle, t->easy);
|
||||
t->started = 1;
|
||||
|
|
@ -482,7 +492,8 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
host, share, use_earlydata,
|
||||
announce_length)) {
|
||||
curl_mfprintf(stderr, "[t-%zu] FAILED setup\n", i);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
curl_multi_add_handle(multi_handle, t->easy);
|
||||
t->started = 1;
|
||||
|
|
@ -503,23 +514,29 @@ static CURLcode test_cli_hx_upload(const char *URL)
|
|||
curl_multi_cleanup(multi_handle);
|
||||
}
|
||||
|
||||
for(i = 0; i < transfer_count_u; ++i) {
|
||||
t = &transfer_u[i];
|
||||
if(t->out) {
|
||||
curlx_fclose(t->out);
|
||||
t->out = NULL;
|
||||
}
|
||||
if(t->easy) {
|
||||
curl_easy_cleanup(t->easy);
|
||||
t->easy = NULL;
|
||||
}
|
||||
if(t->mime) {
|
||||
curl_mime_free(t->mime);
|
||||
cleanup:
|
||||
|
||||
if(transfer_u) {
|
||||
for(i = 0; i < transfer_count_u; ++i) {
|
||||
t = &transfer_u[i];
|
||||
if(t->out) {
|
||||
curlx_fclose(t->out);
|
||||
t->out = NULL;
|
||||
}
|
||||
if(t->easy) {
|
||||
curl_easy_cleanup(t->easy);
|
||||
t->easy = NULL;
|
||||
}
|
||||
if(t->mime) {
|
||||
curl_mime_free(t->mime);
|
||||
}
|
||||
}
|
||||
free(transfer_u);
|
||||
}
|
||||
free(transfer_u);
|
||||
|
||||
curl_share_cleanup(share);
|
||||
curl_slist_free_all(host);
|
||||
curl_global_cleanup();
|
||||
|
||||
return CURLE_OK;
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,13 +109,18 @@ static CURLcode test_cli_tls_session_reuse(const char *URL)
|
|||
int add_more, waits, ongoing = 0;
|
||||
char *host = NULL, *port = NULL;
|
||||
long http_version = CURL_HTTP_VERSION_1_1;
|
||||
CURLcode exitcode = (CURLcode)1;
|
||||
CURLcode result = (CURLcode)1;
|
||||
|
||||
if(!URL || !libtest_arg2) {
|
||||
curl_mfprintf(stderr, "need args: URL proto\n");
|
||||
return (CURLcode)2;
|
||||
}
|
||||
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
if(!strcmp("h2", libtest_arg2))
|
||||
http_version = CURL_HTTP_VERSION_2;
|
||||
else if(!strcmp("h3", libtest_arg2))
|
||||
|
|
@ -124,7 +129,8 @@ static CURLcode test_cli_tls_session_reuse(const char *URL)
|
|||
cu = curl_url();
|
||||
if(!cu) {
|
||||
curl_mfprintf(stderr, "out of memory\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_set(cu, CURLUPART_URL, URL, 0)) {
|
||||
curl_mfprintf(stderr, "not a URL: '%s'\n", URL);
|
||||
|
|
@ -230,12 +236,12 @@ static CURLcode test_cli_tls_session_reuse(const char *URL)
|
|||
|
||||
if(!tse_found_tls_session) {
|
||||
curl_mfprintf(stderr, "CURLINFO_TLS_SSL_PTR not found during run\n");
|
||||
exitcode = CURLE_FAILED_INIT;
|
||||
result = CURLE_FAILED_INIT;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
curl_mfprintf(stderr, "exiting\n");
|
||||
exitcode = CURLE_OK;
|
||||
result = CURLE_OK;
|
||||
|
||||
cleanup:
|
||||
|
||||
|
|
@ -255,7 +261,9 @@ cleanup:
|
|||
curl_slist_free_all(resolve);
|
||||
curl_free(host);
|
||||
curl_free(port);
|
||||
curl_url_cleanup(cu);
|
||||
if(cu)
|
||||
curl_url_cleanup(cu);
|
||||
curl_global_cleanup();
|
||||
|
||||
return exitcode;
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ static void usage_upload_pausing(const char *msg)
|
|||
|
||||
static CURLcode test_cli_upload_pausing(const char *URL)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode rc = CURLE_OK;
|
||||
CURL *curl = NULL;
|
||||
CURLcode result = CURLE_OK;
|
||||
CURLU *cu;
|
||||
struct curl_slist *resolve = NULL;
|
||||
char resolve_buf[1024];
|
||||
|
|
@ -126,25 +126,33 @@ static CURLcode test_cli_upload_pausing(const char *URL)
|
|||
}
|
||||
url = test_argv[0];
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
curl_global_trace("ids,time");
|
||||
|
||||
cu = curl_url();
|
||||
if(!cu) {
|
||||
curl_mfprintf(stderr, "out of memory\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
||||
curl_mfprintf(stderr, "not a URL: '%s'\n", url);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
||||
curl_mfprintf(stderr, "could not get host of '%s'\n", url);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
||||
curl_mfprintf(stderr, "could not get port of '%s'\n", url);
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
memset(&resolve, 0, sizeof(resolve));
|
||||
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
||||
|
|
@ -154,7 +162,8 @@ static CURLcode test_cli_upload_pausing(const char *URL)
|
|||
curl = curl_easy_init();
|
||||
if(!curl) {
|
||||
curl_mfprintf(stderr, "out of memory\n");
|
||||
return (CURLcode)1;
|
||||
result = (CURLcode)1;
|
||||
goto cleanup;
|
||||
}
|
||||
/* We want to use our own read function. */
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
|
||||
|
|
@ -181,23 +190,25 @@ static CURLcode test_cli_upload_pausing(const char *URL)
|
|||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, cli_debug_cb) != CURLE_OK ||
|
||||
curl_easy_setopt(curl, CURLOPT_RESOLVE, resolve) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "something unexpected went wrong - bailing out!\n");
|
||||
return (CURLcode)2;
|
||||
result = (CURLcode)2;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, http_version);
|
||||
|
||||
rc = curl_easy_perform(curl);
|
||||
result = curl_easy_perform(curl);
|
||||
|
||||
if(curl) {
|
||||
cleanup:
|
||||
|
||||
if(curl)
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
curl_slist_free_all(resolve);
|
||||
curl_free(host);
|
||||
curl_free(port);
|
||||
curl_url_cleanup(cu);
|
||||
if(cu)
|
||||
curl_url_cleanup(cu);
|
||||
curl_global_cleanup();
|
||||
|
||||
return rc;
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -411,7 +411,7 @@ static void test_ws_data_usage(const char *msg)
|
|||
static CURLcode test_cli_ws_data(const char *URL)
|
||||
{
|
||||
#ifndef CURL_DISABLE_WEBSOCKETS
|
||||
CURLcode res = CURLE_OK;
|
||||
CURLcode result = CURLE_OK;
|
||||
const char *url;
|
||||
size_t plen_min = 0, plen_max = 0, count = 1;
|
||||
int ch, model = 2;
|
||||
|
|
@ -428,8 +428,7 @@ static CURLcode test_cli_ws_data(const char *URL)
|
|||
break;
|
||||
case 'h':
|
||||
test_ws_data_usage(NULL);
|
||||
res = CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
goto cleanup;
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
case 'c':
|
||||
count = (size_t)atol(coptarg);
|
||||
break;
|
||||
|
|
@ -441,8 +440,7 @@ static CURLcode test_cli_ws_data(const char *URL)
|
|||
break;
|
||||
default:
|
||||
test_ws_data_usage("invalid option");
|
||||
res = CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
goto cleanup;
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
}
|
||||
}
|
||||
test_argc -= coptind;
|
||||
|
|
@ -454,27 +452,28 @@ static CURLcode test_cli_ws_data(const char *URL)
|
|||
if(plen_max < plen_min) {
|
||||
curl_mfprintf(stderr, "maxlen must be >= minlen, got %zu-%zu\n",
|
||||
plen_min, plen_max);
|
||||
res = CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
goto cleanup;
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
}
|
||||
|
||||
if(test_argc != 1) {
|
||||
test_ws_data_usage(NULL);
|
||||
res = CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
goto cleanup;
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
}
|
||||
url = test_argv[0];
|
||||
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
if(model == 1)
|
||||
res = test_ws_data_m1_echo(url, plen_min, plen_max);
|
||||
result = test_ws_data_m1_echo(url, plen_min, plen_max);
|
||||
else
|
||||
res = test_ws_data_m2_echo(url, count, plen_min, plen_max);
|
||||
result = test_ws_data_m2_echo(url, count, plen_min, plen_max);
|
||||
|
||||
cleanup:
|
||||
curl_global_cleanup();
|
||||
return res;
|
||||
|
||||
return result;
|
||||
|
||||
#else /* !CURL_DISABLE_WEBSOCKETS */
|
||||
(void)URL;
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ static CURLcode test_cli_ws_pingpong(const char *URL)
|
|||
{
|
||||
#ifndef CURL_DISABLE_WEBSOCKETS
|
||||
CURL *curl;
|
||||
CURLcode res = CURLE_OK;
|
||||
CURLcode result = CURLE_OK;
|
||||
const char *payload;
|
||||
|
||||
if(!URL || !libtest_arg2) {
|
||||
|
|
@ -65,7 +65,10 @@ static CURLcode test_cli_ws_pingpong(const char *URL)
|
|||
}
|
||||
payload = libtest_arg2;
|
||||
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
||||
curl_mfprintf(stderr, "curl_global_init() failed\n");
|
||||
return (CURLcode)3;
|
||||
}
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
|
|
@ -75,16 +78,16 @@ static CURLcode test_cli_ws_pingpong(const char *URL)
|
|||
curl_easy_setopt(curl, CURLOPT_USERAGENT, "ws-pingpong");
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */
|
||||
res = curl_easy_perform(curl);
|
||||
curl_mfprintf(stderr, "curl_easy_perform() returned %u\n", res);
|
||||
if(res == CURLE_OK)
|
||||
res = pingpong(curl, payload);
|
||||
result = curl_easy_perform(curl);
|
||||
curl_mfprintf(stderr, "curl_easy_perform() returned %u\n", result);
|
||||
if(result == CURLE_OK)
|
||||
result = pingpong(curl, payload);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
curl_global_cleanup();
|
||||
return res;
|
||||
return result;
|
||||
|
||||
#else /* !CURL_DISABLE_WEBSOCKETS */
|
||||
(void)URL;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue