@@ -2362,6 +2362,71 @@ test_set_so_rcvbuf_so_sndbuf(void *arg)
2362
2362
evdns_base_free (dns_base , 0 );
2363
2363
}
2364
2364
2365
+ static void
2366
+ test_set_option (void * arg )
2367
+ {
2368
+ #define SUCCESS 0
2369
+ #define FAIL -1
2370
+ struct basic_test_data * data = arg ;
2371
+ struct evdns_base * dns_base ;
2372
+ size_t i ;
2373
+ /* Option names are allowed to have ':' at the end.
2374
+ * So all test option names come in pairs.
2375
+ */
2376
+ const char * int_options [] = {
2377
+ "ndots" , "ndots:" ,
2378
+ "max-timeouts" , "max-timeouts:" ,
2379
+ "max-inflight" , "max-inflight:" ,
2380
+ "attempts" , "attempts:" ,
2381
+ "randomize-case" , "randomize-case:" ,
2382
+ "so-rcvbuf" , "so-rcvbuf:" ,
2383
+ "so-sndbuf" , "so-sndbuf:" ,
2384
+ };
2385
+ const char * timeval_options [] = {
2386
+ "timeout" , "timeout:" ,
2387
+ "getaddrinfo-allow-skew" , "getaddrinfo-allow-skew:" ,
2388
+ "initial-probe-timeout" , "initial-probe-timeout:" ,
2389
+ };
2390
+ const char * addr_port_options [] = {
2391
+ "bind-to" , "bind-to:" ,
2392
+ };
2393
+
2394
+ dns_base = evdns_base_new (data -> base , 0 );
2395
+ tt_assert (dns_base );
2396
+
2397
+ for (i = 0 ; i < ARRAY_SIZE (int_options ); ++ i ) {
2398
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , int_options [i ], "0" ));
2399
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , int_options [i ], "1" ));
2400
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , int_options [i ], "10000" ));
2401
+ tt_assert (FAIL == evdns_base_set_option (dns_base , int_options [i ], "foo" ));
2402
+ tt_assert (FAIL == evdns_base_set_option (dns_base , int_options [i ], "3.14" ));
2403
+ }
2404
+
2405
+ for (i = 0 ; i < ARRAY_SIZE (timeval_options ); ++ i ) {
2406
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , timeval_options [i ], "1" ));
2407
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , timeval_options [i ], "0.001" ));
2408
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , timeval_options [i ], "3.14" ));
2409
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , timeval_options [i ], "10000" ));
2410
+ tt_assert (FAIL == evdns_base_set_option (dns_base , timeval_options [i ], "0" ));
2411
+ tt_assert (FAIL == evdns_base_set_option (dns_base , timeval_options [i ], "foo" ));
2412
+ }
2413
+
2414
+ for (i = 0 ; i < ARRAY_SIZE (addr_port_options ); ++ i ) {
2415
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , addr_port_options [i ], "8.8.8.8:80" ));
2416
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , addr_port_options [i ], "1.2.3.4" ));
2417
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , addr_port_options [i ], "::1:82" ));
2418
+ tt_assert (SUCCESS == evdns_base_set_option (dns_base , addr_port_options [i ], "3::4" ));
2419
+ tt_assert (FAIL == evdns_base_set_option (dns_base , addr_port_options [i ], "3.14" ));
2420
+ tt_assert (FAIL == evdns_base_set_option (dns_base , addr_port_options [i ], "foo" ));
2421
+ }
2422
+
2423
+ #undef SUCCESS
2424
+ #undef FAIL
2425
+ end :
2426
+ if (dns_base )
2427
+ evdns_base_free (dns_base , 0 );
2428
+ }
2429
+
2365
2430
#define DNS_LEGACY (name , flags ) \
2366
2431
{ #name, run_legacy_test_fn, flags|TT_LEGACY, &legacy_setup, \
2367
2432
dns_##name }
@@ -2435,6 +2500,8 @@ struct testcase_t dns_testcases[] = {
2435
2500
2436
2501
{ "set_SO_RCVBUF_SO_SNDBUF" , test_set_so_rcvbuf_so_sndbuf ,
2437
2502
TT_FORK |TT_NEED_BASE , & basic_setup , NULL },
2503
+ { "set_options" , test_set_option ,
2504
+ TT_FORK |TT_NEED_BASE , & basic_setup , NULL },
2438
2505
2439
2506
END_OF_TESTCASES
2440
2507
};
0 commit comments