error msg
[oweals/gnunet.git] / src / transport / test_http_common.c
index 60aa3bfd3f52db4c77fb069e226487de18c9786f..c97ae17455cc4f5b28e742bf17330198bdb31bb7 100644 (file)
      Boston, MA 02111-1307, USA.
 */
 /**
- * @file transport/test_transport_api.c
- * @brief base test case for transport implementations
- *
- * This test case serves as a base for tcp, udp, and udp-nat
- * transport test cases.  Based on the executable being run
- * the correct test case will be performed.  Conservation of
- * C code apparently.
+ * @file transport/test_http_common.c
+ * @brief base test case for common http functionality
  */
 #include "platform.h"
 #include "gnunet_transport_service.h"
 
 struct SplittedHTTPAddress
 {
-       char *protocoll;
+       char *protocol;
        char *host;
-       char *port;
        char *path;
+       int port;
 };
 
 void
@@ -46,25 +41,224 @@ clean (struct SplittedHTTPAddress *addr)
        {
                GNUNET_free_non_null (addr->host);
                GNUNET_free_non_null (addr->path);
-               GNUNET_free_non_null (addr->port);
-               GNUNET_free_non_null (addr->protocoll);
+               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);
+  }
 
-  clean(http_split_address (""));
-  clean(http_split_address ("http://"));
-  clean(http_split_address ("http://test/path"));
-  clean(http_split_address ("http://test:8999/path"));
-  clean(http_split_address ("http://1.2.3.4:8999/path"));
-  clean(http_split_address ("http://1.2.3.4:8999"));
+  test_pass_hostname ();
+  test_pass_ipv4 ();
+  test_fail_ipv6 ();
+  test_fail ();
 
   return ret;
 }
 
-/* end of test_transport_api.c */
+/* end of test_http_common.c */