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;
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);