diff options
Diffstat (limited to 'src/transport/test_http_common.c')
-rw-r--r-- | src/transport/test_http_common.c | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/src/transport/test_http_common.c b/src/transport/test_http_common.c new file mode 100644 index 0000000..c97ae17 --- /dev/null +++ b/src/transport/test_http_common.c @@ -0,0 +1,264 @@ +/* + This file is part of GNUnet. + (C) 2009, 2010 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +/** + * @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" + +struct SplittedHTTPAddress +{ + char *protocol; + char *host; + char *path; + int port; +}; + +void +clean (struct SplittedHTTPAddress *addr) +{ + if (NULL != addr) + { + GNUNET_free_non_null (addr->host); + GNUNET_free_non_null (addr->path); + GNUNET_free_non_null (addr->protocol); + GNUNET_free_non_null (addr); + } +} + + +int +check (struct SplittedHTTPAddress *addr, + char * protocol, + char * host, + int port, + 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; +} + +int +check_pass (char *src, + char * protocol, + char * host, + int port, + char * path) +{ + struct SplittedHTTPAddress * spa; + spa = http_split_address (src); + if (NULL == spa) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + else + { + if (GNUNET_OK != check(spa, protocol, host, port, path)) + { + clean (spa); + GNUNET_break (0); + return GNUNET_SYSERR; + } + clean (spa); + } + return GNUNET_OK; +} + +int +check_fail (char *src) +{ + struct SplittedHTTPAddress * spa; + spa = http_split_address (src); + if (NULL != spa) + { + GNUNET_break (0); + clean (spa); + return GNUNET_SYSERR; + } + return GNUNET_OK; +} + + +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"); + +} + + +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"); +} + +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"); +} + + +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); + GNUNET_break (0); + } + + http_split_address ("http://"); + if (NULL != spa) + { + clean (spa); + GNUNET_break (0); + } + + 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 */ |