summaryrefslogtreecommitdiff
path: root/test/test-parse_dns_udp-multi.c
diff options
context:
space:
mode:
authordaniel <daniel@planethacker.net>2025-05-06 16:57:32 -0700
committerdaniel <daniel@planethacker.net>2025-05-06 16:57:32 -0700
commit2278df1493e064c197913e49b5d1935942d83448 (patch)
tree42f06ab2f76e2ddf228bafbb03f79621975a4534 /test/test-parse_dns_udp-multi.c
initial import
Diffstat (limited to 'test/test-parse_dns_udp-multi.c')
-rw-r--r--test/test-parse_dns_udp-multi.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/test-parse_dns_udp-multi.c b/test/test-parse_dns_udp-multi.c
new file mode 100644
index 0000000..854b61a
--- /dev/null
+++ b/test/test-parse_dns_udp-multi.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include "dns.h"
+
+int main() {
+ uint8_t pkt[512] = {0};
+
+ // DNS header
+ pkt[4] = 0x00;
+ pkt[5] = 0x02; // QDCOUNT = 2
+
+ uint8_t *ptr = pkt + 12;
+
+ // Question 1: foo.com A
+ *ptr++ = 3; memcpy(ptr, "foo", 3); ptr += 3;
+ *ptr++ = 3; memcpy(ptr, "com", 3); ptr += 3;
+ *ptr++ = 0; // null terminator
+ *ptr++ = 0x00; *ptr++ = 0x01; // QTYPE A
+ *ptr++ = 0x00; *ptr++ = 0x01; // QCLASS IN
+
+ // Question 2: bar.org AAAA
+ *ptr++ = 3; memcpy(ptr, "bar", 3); ptr += 3;
+ *ptr++ = 3; memcpy(ptr, "org", 3); ptr += 3;
+ *ptr++ = 0;
+ *ptr++ = 0x00; *ptr++ = 0x1c; // QTYPE AAAA
+ *ptr++ = 0x00; *ptr++ = 0x01;
+
+ size_t pkt_len = ptr - pkt;
+
+ struct dns_question out[4];
+ size_t count = parse_dns_udp(pkt, pkt_len, out, 4);
+
+ //printf("Got %zu questions:\n", count);
+ //for (size_t i = 0; i < count; i++) {
+ // printf(" %s (%s)\n", out[i].name, dns_type_to_string(out[i].qtype));
+ //}
+
+ int res = (count == 2 &&
+ strcmp(out[0].name, "foo.com") == 0 &&
+ out[0].qtype == 1 &&
+ strcmp(out[1].name, "bar.org") == 0 &&
+ out[1].qtype == 28);
+
+ printf("%s: parse_dns_udp-multi\n", res ? "PASS" : "FAIL");
+ return res;
+}