123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- /*
- This file is part of GNUnet.
- Copyright (C) 2009, 2010 GNUnet e.V.
- GNUnet is free software: you can redistribute it and/or modify it
- under the terms of the GNU Affero General Public License as published
- by the Free Software Foundation, either version 3 of the License,
- or (at your option) any later version.
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- SPDX-License-Identifier: AGPL3.0-or-later
- */
- /**
- * @file transport/test_http_common.c
- * @brief base test case for common http functionality
- */
- #include "platform.h"
- #include "gnunet_transport_service.h"
- #include "transport-testing.h"
- #include "plugin_transport_http_common.h"
- static void
- clean (struct SplittedHTTPAddress *addr)
- {
- if (NULL == addr)
- return;
- GNUNET_free_non_null (addr->host);
- GNUNET_free_non_null (addr->path);
- GNUNET_free_non_null (addr->protocol);
- GNUNET_free (addr);
- }
- static int
- check (struct SplittedHTTPAddress *addr,
- const char *protocol,
- const char *host,
- int port,
- const char *path)
- {
- if (NULL == addr)
- return GNUNET_NO;
- if (((NULL == addr->protocol) && (NULL != protocol)) ||
- ((NULL != addr->protocol) && (NULL == protocol)))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- else if ((NULL != addr->protocol) && (NULL != protocol))
- {
- if (0 != strcmp (addr->protocol, protocol))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- }
- if (((NULL == addr->host) && (NULL != host)) ||
- ((NULL != addr->host) && (NULL == host)))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- else if ((NULL != addr->host) && (NULL != host))
- {
- if (0 != strcmp (addr->host, host))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- }
- if (((NULL == addr->path) && (NULL != path)) ||
- ((NULL != addr->path) && (NULL == path)))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- else if ((NULL != addr->path) && (NULL != path))
- {
- if (0 != strcmp (addr->path, path))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- }
- if ((addr->port != port))
- {
- GNUNET_break (0);
- return GNUNET_NO;
- }
- return GNUNET_OK;
- }
- static int
- check_pass (const char *src,
- const char *protocol,
- const char *host,
- int port,
- const char *path)
- {
- struct SplittedHTTPAddress *spa;
- spa = http_split_address (src);
- if (NULL == spa)
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- if (GNUNET_OK != check (spa, protocol, host, port, path))
- {
- clean (spa);
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- clean (spa);
- return GNUNET_OK;
- }
- static int
- check_fail (const char *src)
- {
- struct SplittedHTTPAddress *spa;
- spa = http_split_address (src);
- if (NULL != spa)
- {
- GNUNET_break (0);
- clean (spa);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- static void
- test_pass_hostname ()
- {
- check_pass ("http://test.local", "http", "test.local", HTTP_DEFAULT_PORT, "");
- check_pass ("http://test.local/", "http", "test.local", HTTP_DEFAULT_PORT,
- "/");
- check_pass ("http://test.local/path", "http", "test.local", HTTP_DEFAULT_PORT,
- "/path");
- check_pass ("http://test.local/path/", "http", "test.local",
- HTTP_DEFAULT_PORT, "/path/");
- check_pass ("http://test.local/path/more", "http", "test.local",
- HTTP_DEFAULT_PORT, "/path/more");
- check_pass ("http://test.local:81", "http", "test.local", 81, "");
- check_pass ("http://test.local:81/", "http", "test.local", 81, "/");
- check_pass ("http://test.local:81/path", "http", "test.local", 81, "/path");
- check_pass ("http://test.local:81/path/", "http", "test.local", 81, "/path/");
- check_pass ("http://test.local:81/path/more", "http", "test.local", 81,
- "/path/more");
- }
- static void
- test_pass_ipv4 ()
- {
- check_pass ("http://127.0.0.1", "http", "127.0.0.1", HTTP_DEFAULT_PORT, "");
- check_pass ("http://127.0.0.1/", "http", "127.0.0.1", HTTP_DEFAULT_PORT, "/");
- check_pass ("http://127.0.0.1/path", "http", "127.0.0.1", HTTP_DEFAULT_PORT,
- "/path");
- check_pass ("http://127.0.0.1/path/", "http", "127.0.0.1", HTTP_DEFAULT_PORT,
- "/path/");
- check_pass ("http://127.0.0.1:81", "http", "127.0.0.1", 81, "");
- check_pass ("http://127.0.0.1:81/", "http", "127.0.0.1", 81, "/");
- check_pass ("http://127.0.0.1:81/path", "http", "127.0.0.1", 81, "/path");
- check_pass ("http://127.0.0.1:81/path/", "http", "127.0.0.1", 81, "/path/");
- check_pass ("http://127.0.0.1:81/path/more", "http", "127.0.0.1", 81,
- "/path/more");
- }
- static void
- test_fail_ipv6 ()
- {
- check_pass ("http://[::1]", "http", "[::1]", HTTP_DEFAULT_PORT, "");
- check_pass ("http://[::1]/", "http", "[::1]", HTTP_DEFAULT_PORT, "/");
- check_pass ("http://[::1]/path", "http", "[::1]", HTTP_DEFAULT_PORT, "/path");
- check_pass ("http://[::1]/path/", "http", "[::1]", HTTP_DEFAULT_PORT,
- "/path/");
- check_pass ("http://[::1]:81", "http", "[::1]", 81, "");
- check_pass ("http://[::1]:81/", "http", "[::1]", 81, "/");
- check_pass ("http://[::1]:81/path", "http", "[::1]", 81, "/path");
- check_pass ("http://[::1]:81/path/", "http", "[::1]", 81, "/path/");
- check_pass ("http://[::1]:81/path/more", "http", "[::1]", 81, "/path/more");
- }
- static void
- test_fail ()
- {
- if (GNUNET_SYSERR == check_fail (""))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("http"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("://"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("http://"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("//localhost"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("//:80"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("//:80/"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("//:80:"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("http://localhost:a/"))
- GNUNET_break (0);
- if (GNUNET_SYSERR == check_fail ("http://127.0.0.1:a/"))
- GNUNET_break (0);
- }
- int
- main (int argc, char *argv[])
- {
- int ret = 0;
- struct SplittedHTTPAddress *spa;
- GNUNET_log_setup ("test", "DEBUG", NULL);
- spa = http_split_address ("");
- if (NULL != spa)
- {
- clean (spa);
- spa = NULL;
- GNUNET_break (0);
- }
- spa = http_split_address ("http://");
- if (NULL != spa)
- {
- clean (spa);
- GNUNET_break (0);
- }
- spa = http_split_address ("://");
- if (NULL != spa)
- {
- clean (spa);
- GNUNET_break (0);
- }
- test_pass_hostname ();
- test_pass_ipv4 ();
- test_fail_ipv6 ();
- test_fail ();
- return ret;
- }
- /* end of test_http_common.c */
|