Check that you are not present in trail twice
[oweals/gnunet.git] / src / transport / test_http_common.c
index 05c4adb6476b5a7a56a7719dad384556d25ecff6..80b7cbc5b9ecb6b2644ebc7ab9ab87e18e8659dc 100644 (file)
 #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);
+    GNUNET_break (0);
   }
 
   http_split_address ("http://");
   if (NULL != spa)
   {
-               clean (spa);
-       GNUNET_break (0);
+    clean (spa);
+    GNUNET_break (0);
   }
 
   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;
 }