/*
This file is part of GNUnet.
- (C) 2009, 2010 Christian Grothoff (and other contributing authors)
+ Copyright (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
#include "transport-testing.h"
#include "plugin_transport_http_common.h"
-struct SplittedHTTPAddress
-{
- char *protocol;
- char *host;
- char *path;
- int port;
-};
-void
+static 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);
- }
+ 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);
}
-int
+static int
check (struct SplittedHTTPAddress *addr,
- char * protocol,
- char * host,
- int port,
- char * path)
+ 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;
-}
-
-void
-test_hostname ()
-{
- struct SplittedHTTPAddress * spa;
- spa = http_split_address ("http://test.local");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "test.local", HTTP_DEFAULT_PORT, ""))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
-
- spa = http_split_address ("http://test.local");
- if (NULL == spa)
+ if (NULL == addr)
+ return GNUNET_NO;
+ if (((NULL == addr->protocol) && (NULL != protocol)) ||
+ ((NULL != addr->protocol) && (NULL == protocol)))
{
- GNUNET_break (0);
+ GNUNET_break (0);
+ return GNUNET_NO;
}
- else
+ else if ((NULL != addr->protocol) && (NULL != protocol))
{
- if (GNUNET_OK != check(spa, "http", "test.local", HTTP_DEFAULT_PORT, ""))
- {
- GNUNET_break (0);
- }
- clean (spa);
+ if (0 != strcmp(addr->protocol, protocol))
+ {
+ GNUNET_break (0);
+ return GNUNET_NO;
+ }
}
-
- spa = http_split_address ("http://test.local/");
- if (NULL == spa)
+ if (((NULL == addr->host) && (NULL != host)) ||
+ ((NULL != addr->host) && (NULL == host)))
{
- GNUNET_break (0);
+ GNUNET_break (0);
+ return GNUNET_NO;
}
- else
+ else if ((NULL != addr->host) && (NULL != host))
{
- if (GNUNET_OK != check(spa, "http", "test.local", HTTP_DEFAULT_PORT, "/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
+ if (0 != strcmp(addr->host, host))
+ {
+ GNUNET_break (0);
+ return GNUNET_NO;
+ }
}
- spa = http_split_address ("http://test.local/path");
- if (NULL == spa)
+ if (((NULL == addr->path) && (NULL != path)) ||
+ ((NULL != addr->path) && (NULL == path)))
{
- GNUNET_break (0);
+ GNUNET_break (0);
+ return GNUNET_NO;
}
- else
+ else if ((NULL != addr->path) && (NULL != path))
{
- if (GNUNET_OK != check(spa, "http", "test.local", HTTP_DEFAULT_PORT, "/path"))
- {
- GNUNET_break (0);
- }
- clean (spa);
+ if (0 != strcmp(addr->path, path))
+ {
+ GNUNET_break (0);
+ return GNUNET_NO;
+ }
}
- spa = http_split_address ("http://test.local/path/");
- if (NULL == spa)
+ if ((addr->port != port))
{
- GNUNET_break (0);
+ GNUNET_break (0);
+ return GNUNET_NO;
}
- else
- {
- if (GNUNET_OK != check(spa, "http", "test.local", HTTP_DEFAULT_PORT, "/path/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
+ 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 ("http://test.local:1000/path/");
+ spa = http_split_address (src);
if (NULL == spa)
{
- GNUNET_break (0);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
- else
+ if (GNUNET_OK != check(spa, protocol, host, port, path))
{
- if (GNUNET_OK != check(spa, "http", "test.local", 1000, "/path/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
+ clean (spa);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
+ clean (spa);
+ return GNUNET_OK;
}
-void
-test_ipv4 ()
+
+static int
+check_fail (const char *src)
{
struct SplittedHTTPAddress * spa;
- spa = http_split_address ("http://127.0.0.1");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "127.0.0.1", HTTP_DEFAULT_PORT, ""))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
- spa = http_split_address ("http://127.0.0.1");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "127.0.0.1", HTTP_DEFAULT_PORT, ""))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
-
-
- spa = http_split_address ("http://127.0.0.1/");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "127.0.0.1", HTTP_DEFAULT_PORT, "/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
-
- spa = http_split_address ("http://127.0.0.1/path");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "127.0.0.1", HTTP_DEFAULT_PORT, "/path"))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
-
- spa = http_split_address ("http://127.0.0.1/path/");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "127.0.0.1", HTTP_DEFAULT_PORT, "/path/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
-
-
- }
-
- spa = http_split_address ("http://127.0.0.1:1000/path/");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
+ spa = http_split_address (src);
+ if (NULL != spa)
{
- if (GNUNET_OK != check(spa, "http", "127.0.0.1", 1000, "/path/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
+ GNUNET_break (0);
+ clean (spa);
+ return GNUNET_SYSERR;
}
+ return GNUNET_OK;
}
-void
-test_ipv6 ()
-{
- struct SplittedHTTPAddress * spa;
- spa = http_split_address ("http://[::1]");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "[::1]", HTTP_DEFAULT_PORT, ""))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
- spa = http_split_address ("http://[::1]");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "[::1]", HTTP_DEFAULT_PORT, ""))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
+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");
+}
- spa = http_split_address ("http://[::1]/");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "[::1]", HTTP_DEFAULT_PORT, "/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
- spa = http_split_address ("http://[::1]/path");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "[::1]", HTTP_DEFAULT_PORT, "/path"))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
+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");
+}
- spa = http_split_address ("http://[::1]/path/");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "[::1]", HTTP_DEFAULT_PORT, "/path/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
+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");
+}
- }
- spa = http_split_address ("http://[::1]:1000/path/");
- if (NULL == spa)
- {
- GNUNET_break (0);
- }
- else
- {
- if (GNUNET_OK != check(spa, "http", "[::1]", 1000, "/path/"))
- {
- GNUNET_break (0);
- }
- clean (spa);
- }
+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);
+ GNUNET_log_setup ("test", "DEBUG", NULL);
spa = http_split_address ("");
if (NULL != spa)
{
- clean (spa);
- GNUNET_break (0);
+ clean (spa);
+ spa = NULL;
+ GNUNET_break (0);
}
- http_split_address ("http://");
+ spa = http_split_address ("http://");
if (NULL != spa)
{
- clean (spa);
- GNUNET_break (0);
+ clean (spa);
+ GNUNET_break (0);
}
- http_split_address ("://");
+ spa = http_split_address ("://");
if (NULL != spa)
{
- clean (spa);
- GNUNET_break (0);
+ clean (spa);
+ GNUNET_break (0);
}
- test_hostname ();
- test_ipv4 ();
- test_ipv6 ();
+ test_pass_hostname ();
+ test_pass_ipv4 ();
+ test_fail_ipv6 ();
+ test_fail ();
return ret;
}