aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-usockets/tests/sni_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-usockets/tests/sni_test.c')
-rw-r--r--packages/bun-usockets/tests/sni_test.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/packages/bun-usockets/tests/sni_test.c b/packages/bun-usockets/tests/sni_test.c
new file mode 100644
index 000000000..9de1ffbcf
--- /dev/null
+++ b/packages/bun-usockets/tests/sni_test.c
@@ -0,0 +1,57 @@
+extern "C" {
+void *sni_new();
+void sni_free(void *sni, void (*cb)(void *user));
+int sni_add(void *sni, const char *hostname, void *user);
+void *sni_remove(void *sni, const char *hostname);
+void *sni_find(void *sni, const char *hostname);
+}
+
+#include <assert.h>
+#include <stdio.h>
+
+/* Todo: replace 13, 14 and 15 with malloc */
+//void *WILDCARD_GOOGLE_COM = strdup("*.google.com");
+//void *TEST_GOOGLE_COM = strdup("test.google.com");
+
+void sni_free_cb(void *user) {
+ printf("Freeing %p\n", user);
+}
+
+int main() {
+
+ void *sni = sni_new();
+
+ /* Adding should succeed */
+ assert(sni_add(sni, "*.google.com", 13) == 0);
+ assert(sni_add(sni, "test.google.com", 14) == 0);
+
+ /* Adding the same name should not overwrite existing */
+ assert(sni_add(sni, "*.google.com", 15) != 0);
+ assert(sni_find(sni, "anything.google.com") == 13);
+
+ assert(sni_find(sni, "docs.google.com") == 13);
+ assert(sni_find(sni, "*.google.com") == 13);
+ assert(sni_find(sni, "test.google.com") == 14);
+ assert(sni_find(sni, "yolo.nothing.com") == 0);
+ assert(sni_find(sni, "yolo.google.com") == 13);
+
+ /* Removing should work */
+ assert(sni_remove(sni, "test.google.com") == 14);
+ assert(sni_find(sni, "test.google.com") == 13);
+ assert(sni_remove(sni, "*.google.com") == 13);
+ assert(sni_find(sni, "test.google.com") == 0);
+
+ /* Removing parent with data should not remove child with data */
+ assert(sni_add(sni, "www.google.com", 16) == 0);
+ assert(sni_add(sni, "www.google.com.au.ck.uk", 17) == 0);
+ assert(sni_find(sni, "www.google.com") == 16);
+ assert(sni_find(sni, "www.google.com.au.ck.uk") == 17);
+ assert(sni_remove(sni, "www.google.com.yolo") == 0);
+ assert(sni_remove(sni, "www.google.com.au.ck.uk") == 17);
+ assert(sni_find(sni, "www.google.com") == 16);
+
+ /* Free should not leave anything remaining (test with ASAN leaksanitizer) */
+ sni_free(sni, sni_free_cb);
+
+ printf("OK\n");
+}