test1621: Improve stripcredentials tests

- add more unusual input cases
- add a valid non-http protocol
- fix tests so an input that should be stripped but isn't is a failure
- fix detection of when stripcredentials() would be available to test
- avoid using a NULL pointer

Closes #17304
This commit is contained in:
Dan Fandrich 2025-05-06 23:39:22 -07:00
parent 674836399f
commit 38865c8282
2 changed files with 19 additions and 7 deletions

View File

@ -15,6 +15,7 @@ none
<features> <features>
unittest unittest
https https
pop3s
</features> </features>
<name> <name>
unit tests for stripcredentials from URL unit tests for stripcredentials from URL

View File

@ -37,9 +37,9 @@ static void unit_stop(void)
{ {
} }
#if defined(__MINGW32__) || \ #ifndef USE_XATTR
(!defined(HAVE_FSETXATTR) && \ /* stripcredentials isn't available in this case */
(!defined(__FreeBSD_version) || (__FreeBSD_version < 500000)))
UNITTEST_START UNITTEST_START
UNITTEST_STOP UNITTEST_STOP
#else #else
@ -52,13 +52,24 @@ struct checkthis {
}; };
static const struct checkthis tests[] = { static const struct checkthis tests[] = {
{ "ninja://foo@example.com", "ninja://foo@example.com" }, { "ninja://foo@example.com", "(null)" }, /* unsupported scheme */
{ "pop3s://foo@example.com", "pop3s://example.com/" },
{ "ldap://foo@example.com", "ldap://example.com/" },
{ "https://foo@example.com", "https://example.com/" }, { "https://foo@example.com", "https://example.com/" },
{ "https://localhost:45", "https://localhost:45/" }, { "https://localhost:45", "https://localhost:45/" },
{ "https://foo@localhost:45", "https://localhost:45/" }, { "https://foo@localhost:45", "https://localhost:45/" },
{ "http://daniel:password@localhost", "http://localhost/" }, { "http://daniel:password@localhost", "http://localhost/" },
{ "http://daniel@localhost", "http://localhost/" }, { "http://daniel@localhost", "http://localhost/" },
{ "https://user:pass@localhost:45", "https://localhost:45/" },
{ "http://localhost/", "http://localhost/" }, { "http://localhost/", "http://localhost/" },
{ "http://odd%40host/", "(null)" }, /* bad host */
{ "http://user@odd%40host/", "(null)" }, /* bad host */
{ "http://host/@path/", "http://host/@path/" },
{ "http://emptypw:@host/", "http://host/" },
{ "http://:emptyuser@host/", "http://host/" },
{ "http://odd%40user@host/", "http://host/" },
{ "http://only%40one%40host/", "(null)" }, /* bad host */
{ "http://odder%3auser@host/", "http://host/" },
{ NULL, NULL } /* end marker */ { NULL, NULL } /* end marker */
}; };
@ -69,11 +80,11 @@ UNITTEST_START
for(i = 0; tests[i].input; i++) { for(i = 0; tests[i].input; i++) {
const char *url = tests[i].input; const char *url = tests[i].input;
char *stripped = stripcredentials(url); char *stripped = stripcredentials(url);
char *strippedstr = stripped ? stripped : "(null)";
printf("Test %u got input \"%s\", output: \"%s\"\n", printf("Test %u got input \"%s\", output: \"%s\"\n",
i, tests[i].input, stripped); i, tests[i].input, strippedstr);
fail_if(stripped && strcmp(tests[i].output, stripped), fail_if(strcmp(tests[i].output, strippedstr), tests[i].output);
tests[i].output);
curl_free(stripped); curl_free(stripped);
} }
} }