/
githubmirror
/
libreport
Обзор
Документация
Войти
/
githubmirror
/
libreport
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/uriparser.at
144 строки
6 KB
Michal Fabik
Use g_free for GLib-alloc'd memory
17 июн 2021, 17:49
17 июн 2021, 17:49
865db9e
Код
Авторство
О чём код?
# -*- Autotest -*- AT_BANNER([uriparser]) ## ----------------------------- ## ## libreport_uri_userinfo_remove ## ## ----------------------------- ## AT_TESTFUN([libreport_uri_userinfo_remove], [[#include "internal_libreport.h" #include <assert.h> #include <string.h> #include <stdio.h> bool string_cmp(const char *message, const char *orig, const char *other) { if (orig == NULL && other != NULL) { printf("%s: expected NULL got '%s'\n", message, other); return false; } if (orig != NULL && other == NULL) { printf("%s: expected '%s' got NULL\n", message, orig); return false; } if (orig == NULL && other == NULL) return true; if (strcmp(orig, other) == 0) return true; printf("%s: '%s' != '%s'\n", message, orig, other); return false; } int test(int retval, const char *uri, const char *result, const char *scheme, const char *hostname, const char *username, const char *password, const char *location) { int e = 0; const char *names[] = {"result", "scheme", "hostname", "username", "password", "location"} ; char *outputs[6]; const char *expected[6]; for (size_t i = 0; i < ARRAY_SIZE(outputs); ++i) outputs[i] = (char *)0xDEADBEEF; expected[0] = result; expected[1] = scheme; expected[2] = hostname; expected[3] = username; expected[4] = password; expected[5] = location; fprintf(stderr, "==== Testing: '%s'\n", uri); fprintf(stdout, "==== Testing: '%s'\n", uri); int r = libreport_uri_userinfo_remove(uri, &outputs[0], &outputs[1], &outputs[2], &outputs[3], &outputs[4], &outputs[5]); if (r != retval) { printf("Invalid retval %d != %d\n", retval, r); ++e; } if (r != -EINVAL) { for (size_t i = 0; i < ARRAY_SIZE(outputs); ++i) { if (outputs[i] == (char *)0xDEADBEEF) { printf("Not initialized argument '%s'\n", names[i]); ++e; } else { e += !string_cmp(names[i], expected[i], outputs[i]); g_free(outputs[i]); outputs[i] = (char *)0xDEADBEEF; } } } else { for (size_t i = 0; i < ARRAY_SIZE(outputs); ++i) { if (outputs[i] != (char *)0xDEADBEEF) { printf("Touched argument '%s'\n", names[i]); ++e; } } } fprintf(stderr, "== Test without arguments\n"); fprintf(stdout, "== Test without arguments\n"); r = libreport_uri_userinfo_remove(uri, &outputs[0], NULL, NULL, NULL, NULL, NULL); if (r != retval) { printf("Invalid retval without arguments: %d != %d\n", retval, r); ++e; } e += !string_cmp(names[0], result, outputs[0]); g_free(outputs[0]); return e; } int main(void) { libreport_g_verbose=3; int e = 0; e += test( 0, "ftp://root:password@", "ftp://", "ftp:", "", "root", "password", ""); e += test( 0, "ftp://root:password@/", "ftp:///", "ftp:", "", "root", "password", "/"); e += test( 0, "ftp://root:password@/foo", "ftp:///foo", "ftp:", "", "root", "password", "/foo"); e += test( 0, "ftp://@", "ftp://", "ftp:", "", "", NULL, ""); e += test( 0, "ftp://@/", "ftp:///", "ftp:", "", "", NULL, "/"); e += test( 0, "ftp://@/foo", "ftp:///foo", "ftp:", "", "", NULL, "/foo"); e += test( 0, "ftp://:@", "ftp://", "ftp:", "", "", "", ""); e += test( 0, "ftp://:@/", "ftp:///", "ftp:", "", "", "", "/"); e += test( 0, "ftp://:@/foo", "ftp:///foo", "ftp:", "", "", "", "/foo"); e += test( 0, "root:password", "root:password", "root:", NULL, NULL, NULL, "password"); e += test( 0, "root:password@", "root:password@", "root:", NULL, NULL, NULL, "password@"); e += test( 0, "ftp://root:password", "ftp://root:password", "ftp:", "root:password", NULL, NULL, ""); e += test( 0, "scp:://root:password@localhost", "scp:://root:password@localhost", "scp:", NULL, NULL, NULL, "://root:password@localhost"); e += test( 0, "scp:///root:password@localhost", "scp:///root:password@localhost", "scp:", "", NULL, NULL, "/root:password@localhost"); e += test( 0, "ftp://root:password/", "ftp://root:password/", "ftp:", "root:password", NULL, NULL, "/"); e += test( 0, "scp://B@rt:P@ssw0rd@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "B@rt", "P@ssw0rd", "/t@rget1?query=foo#head"); e += test( 0, "scp://B@rt@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "B@rt", NULL, "/t@rget1?query=foo#head"); e += test( 0, "scp://B@rt:@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "B@rt", "", "/t@rget1?query=foo#head"); e += test( 0, "scp://:P@ssw0rd@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "", "P@ssw0rd", "/t@rget1?query=foo#head"); e += test( 0, "scp://@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "", NULL, "/t@rget1?query=foo#head"); e += test( 0, "scp://:@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "", "", "/t@rget1?query=foo#head"); e += test( 0, "password/root", "password/root", NULL, NULL, NULL, NULL, "password/root"); e += test( 0, "/password/root", "/password/root", NULL, NULL, NULL, NULL, "/password/root"); e += test( 0, "://root:passowrd@localhost", "://root:passowrd@localhost", NULL, NULL, NULL, NULL, "://root:passowrd@localhost"); return e; } ]])