tests: Add test_res_fake_uri_nsearch()
authorAndreas Schneider <asn@samba.org>
Thu, 19 Aug 2021 10:47:30 +0000 (12:47 +0200)
committerAndreas Schneider <asn@samba.org>
Thu, 19 Aug 2021 10:47:30 +0000 (12:47 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
tests/test_dns_fake.c

index 121ccbcb31c052d0dad00b5c8e1d08ca9ac41590..c057ebeecfd71c69f9589ce8e4ade04b85dd9570 100644 (file)
@@ -749,6 +749,65 @@ static void test_res_fake_txt_query(void **state)
        assert_string_equal(rrdata, "v=spf1 mx");
 }
 
+static void test_res_fake_uri_nsearch(void **state)
+{
+       int rv;
+       struct __res_state dnsstate;
+       unsigned char answer[ANSIZE] = {0};
+       ns_msg handle;
+       ns_rr rr;   /* expanded resource record */
+       const uint8_t *rrdata;
+       int prio;
+       int weight;
+
+       (void) state; /* unused */
+
+       memset(&dnsstate, 0, sizeof(struct __res_state));
+       rv = res_ninit(&dnsstate);
+       assert_int_equal(rv, 0);
+
+       rv = res_nsearch(&dnsstate,
+                       "_vpn.cwrap.org",
+                       1,
+                       256,
+                       answer,
+                       sizeof(answer));
+       assert_int_equal(rv, 208);
+
+       ns_initparse(answer, sizeof(answer), &handle);
+
+       assert_int_equal(ns_msg_getflag(handle, ns_f_rcode), ns_r_noerror);
+       assert_int_equal(ns_msg_count(handle, ns_s_an), 3);
+
+       assert_int_equal(ns_parserr(&handle, ns_s_an, 0, &rr), 0);
+       assert_int_equal(ns_rr_type(rr), ns_t_uri);
+       assert_string_equal(ns_rr_name(rr), "_vpn.cwrap.org");
+       rrdata = ns_rr_rdata(rr);
+       NS_GET16(prio, rrdata);
+       NS_GET16(weight, rrdata);
+       assert_int_equal(prio, 2);
+       assert_int_equal(weight, 5);
+       assert_string_equal(rrdata, "https://vpn.cwrap.org/VPN");
+
+       assert_int_equal(ns_parserr(&handle, ns_s_an, 1, &rr), 0);
+       assert_int_equal(ns_rr_type(rr), ns_t_uri);
+       rrdata = ns_rr_rdata(rr);
+       NS_GET16(prio, rrdata);
+       NS_GET16(weight, rrdata);
+       assert_int_equal(prio, 2);
+       assert_int_equal(weight, 10);
+       assert_string_equal(rrdata, "https://vpn2.cwrap.org/VPN");
+
+       assert_int_equal(ns_parserr(&handle, ns_s_an, 2, &rr), 0);
+       assert_int_equal(ns_rr_type(rr), ns_t_uri);
+       rrdata = ns_rr_rdata(rr);
+       NS_GET16(prio, rrdata);
+       NS_GET16(weight, rrdata);
+       assert_int_equal(prio, 2);
+       assert_int_equal(weight, 20);
+       assert_string_equal(rrdata, "https://vpn3.cwrap.org/VPN");
+}
+
 int main(void)
 {
        int rc;
@@ -769,6 +828,7 @@ int main(void)
                cmocka_unit_test(test_res_fake_a_via_cname),
                cmocka_unit_test(test_res_fake_ptr_query),
                cmocka_unit_test(test_res_fake_txt_query),
+               cmocka_unit_test(test_res_fake_uri_nsearch),
        };
 
        rc = cmocka_run_group_tests(fake_tests, NULL, NULL);