src/server/test/uri.c

changeset 693
b26cae13b79a
parent 633
392ec9026b07
--- a/src/server/test/uri.c	Sat Feb 21 14:40:03 2026 +0100
+++ b/src/server/test/uri.c	Sat Feb 21 19:36:15 2026 +0100
@@ -106,3 +106,87 @@
     }
 }
 
+CX_TEST(test_util_parse_uri) {
+    CX_TEST_DO {
+        WSUri uri;
+        CX_TEST_ASSERT(util_parse_uri("http://example.com", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "example.com"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "http"));
+        CX_TEST_ASSERT(uri.pathlen == 0);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTP);
+        CX_TEST_ASSERT(uri.port == 80);
+        
+        CX_TEST_ASSERT(util_parse_uri("https://unixwork.de/path/", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "unixwork.de"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "https"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), "/path/"));
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTPS);
+        CX_TEST_ASSERT(uri.port == 443);
+        
+        CX_TEST_ASSERT(util_parse_uri("https://code.unixwork.de/", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "code.unixwork.de"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "https"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), "/"));
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTPS);
+        
+        CX_TEST_ASSERT(util_parse_uri("http://pkg.unixwork.de:8080", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "pkg.unixwork.de"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "http"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), ""));
+        CX_TEST_ASSERT(uri.port == 8080);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTP);
+        
+        CX_TEST_ASSERT(util_parse_uri("https://pkg.unixwork.eu:8443/", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "pkg.unixwork.eu"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "https"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), "/"));
+        CX_TEST_ASSERT(uri.port == 8443);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTPS);
+        
+        CX_TEST_ASSERT(util_parse_uri("http://[::1]", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "::1"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "http"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), ""));
+        CX_TEST_ASSERT(uri.port == 80);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTP);
+        
+        CX_TEST_ASSERT(util_parse_uri("http://[fe80::1ff:fe23:4567:890a]:8081", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "fe80::1ff:fe23:4567:890a"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "http"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), ""));
+        CX_TEST_ASSERT(uri.port == 8081);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTP);
+        
+        CX_TEST_ASSERT(util_parse_uri("http://[::ffff:0.0.0.0]:8082/ipv6/path/", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "::ffff:0.0.0.0"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "http"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), "/ipv6/path/"));
+        CX_TEST_ASSERT(uri.port == 8082);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTP);
+        
+        CX_TEST_ASSERT(util_parse_uri("http://[::ffff:0.0.0.1]/ipv6/without/port/", &uri));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.host, uri.hostlen), "::ffff:0.0.0.1"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.scheme, uri.schemelen), "http"));
+        CX_TEST_ASSERT(!cx_strcmp(cx_strn(uri.path, uri.pathlen), "/ipv6/without/port/"));
+        CX_TEST_ASSERT(uri.port == 80);
+        CX_TEST_ASSERT(uri.scheme_num == WS_URI_HTTP);
+    }
+}
+
+CX_TEST(test_util_parse_uri_error) {
+    CX_TEST_DO {
+        WSUri uri;
+        CX_TEST_ASSERT(!util_parse_uri("", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("https://", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://host:invalidport", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://host:01:02", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http:///", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://[::1", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://[::1]test", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://[:[:1]", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://[hello-world]", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://host[]", &uri));
+        CX_TEST_ASSERT(!util_parse_uri("http://localhost:9999999", &uri));
+    }
+}

mercurial