297 "remote-cache-lifetime 1\n"
298 "remote 1.1.1.1 1111 udp\n"
299 "remote 2:cafe::1 2222 tcp\n"
300 "remote 3.domain.tld 3333 udp4\n"
301 "remote 3.domain.tld 33333 udp\n"
302 "remote 4.domain.tld 4444 udp6\n"
303 "remote 5.noresolve.tld 5555 udp4\n",
311 openvpn_io::io_context ioctx;
315 openvpn_io::io_context &,
318 fake_bulkres(ioctx, rl, stats);
320 fake_bulkres.set_results(
"1.1.1.1",
"1111", {{
"1.1.1.1", 1111}});
321 fake_bulkres.set_results(
"2:cafe::1",
"2222", {{
"2:cafe::1", 2222}});
322 fake_bulkres.set_results(
"3.domain.tld",
"3333", {{
"3.3.3.3", 3333}, {
"3::3", 3333}});
323 fake_bulkres.set_results(
"4.domain.tld",
"4444", {{
"4.4.4.4", 4444}, {
"4::4", 4444}});
327 fake_bulkres.start(&logmsg);
329 ASSERT_NE(output.find(
"<<<RemoteListBulkResolve>>>"), std::string::npos);
331 ASSERT_EQ(5UL, rl->
size())
332 <<
"Unexpected remote list item count" << std::endl
335 ASSERT_EQ(rl->
get_item(0)->res_addr_list_defined(),
true);
336 ASSERT_EQ(rl->
get_item(0)->res_addr_list->size(), 1UL);
337 ASSERT_EQ(rl->
get_item(0)->res_addr_list->at(0)->to_string(),
"1.1.1.1");
338 ASSERT_EQ(rl->
get_item(1)->res_addr_list_defined(),
true);
339 ASSERT_EQ(rl->
get_item(1)->res_addr_list->size(), 1UL);
340 ASSERT_EQ(rl->
get_item(1)->res_addr_list->at(0)->to_string(),
"2:cafe::1");
341 ASSERT_EQ(rl->
get_item(2)->res_addr_list_defined(),
true);
342 ASSERT_EQ(rl->
get_item(2)->res_addr_list->size(), 1UL);
343 ASSERT_EQ(rl->
get_item(2)->res_addr_list->at(0)->to_string(),
"3.3.3.3");
344 ASSERT_EQ(rl->
get_item(3)->res_addr_list_defined(),
true);
345 ASSERT_EQ(rl->
get_item(3)->res_addr_list->size(), 2UL);
346 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(0)->to_string(),
"3.3.3.3");
347 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(1)->to_string(),
"3::3");
349 ASSERT_EQ(rl->
get_item(4)->res_addr_list_defined(),
true);
350 ASSERT_EQ(rl->
get_item(4)->res_addr_list->size(), 1UL);
351 ASSERT_EQ(rl->
get_item(4)->res_addr_list->at(0)->to_string(),
"4::4");
366 auto ep = fake_bulkres.init_endpoint();
368 ASSERT_EQ(ep.address().to_string(),
"3::3");
372 fake_bulkres.set_results(
"3.domain.tld",
"3333", {{
"333::333", 3333}, {
"33::33", 3333}, {
"33.33.33.33", 3333}});
373 fake_bulkres.set_results(
"4.domain.tld",
"4444", {{
"44::44", 4444}, {
"444::444", 4444}});
375 std::this_thread::sleep_for(std::chrono::seconds(1));
378 fake_bulkres.start(&ignore);
381 ASSERT_EQ(5UL, rl->
size())
382 <<
"Unexpected remote list item count" << std::endl
385 ASSERT_EQ(rl->
get_item(0)->res_addr_list_defined(),
true);
386 ASSERT_EQ(rl->
get_item(0)->res_addr_list->size(), 1UL);
387 ASSERT_EQ(rl->
get_item(0)->res_addr_list->at(0)->to_string(),
"1.1.1.1");
388 ASSERT_EQ(rl->
get_item(1)->res_addr_list_defined(),
true);
389 ASSERT_EQ(rl->
get_item(1)->res_addr_list->size(), 1UL);
390 ASSERT_EQ(rl->
get_item(1)->res_addr_list->at(0)->to_string(),
"2:cafe::1");
391 ASSERT_EQ(rl->
get_item(2)->res_addr_list_defined(),
true);
392 ASSERT_EQ(rl->
get_item(2)->res_addr_list->size(), 1UL);
393 ASSERT_EQ(rl->
get_item(2)->res_addr_list->at(0)->to_string(),
"33.33.33.33");
394 ASSERT_EQ(rl->
get_item(3)->res_addr_list_defined(),
true);
395 ASSERT_EQ(rl->
get_item(3)->res_addr_list->size(), 3UL);
396 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(0)->to_string(),
"333::333");
397 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(1)->to_string(),
"33::33");
398 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(2)->to_string(),
"33.33.33.33");
399 ASSERT_EQ(rl->
get_item(4)->res_addr_list_defined(),
true);
400 ASSERT_EQ(rl->
get_item(4)->res_addr_list->size(), 2UL);
401 ASSERT_EQ(rl->
get_item(4)->res_addr_list->at(0)->to_string(),
"44::44");
402 ASSERT_EQ(rl->
get_item(4)->res_addr_list->at(1)->to_string(),
"444::444");
407 ASSERT_EQ(ep.address().to_string(),
"333::333");
411 fake_bulkres.set_results(
"3.domain.tld",
"3333", {{
"3.3.3.3", 3333}, {
"3::3", 3333}});
412 fake_bulkres.set_results(
"3.domain.tld",
"33333", {{
"3.3.3.3", 33333}, {
"3::3", 33333}});
413 fake_bulkres.set_results(
"4.domain.tld",
"4444", {{
"4.4.4.4", 4444}, {
"4::4", 4444}});
416 fake_bulkres.start(&ignore);
420 ASSERT_EQ(5UL, rl->
size())
421 <<
"Unexpected remote list item count" << std::endl
424 ASSERT_EQ(rl->
get_item(2)->res_addr_list_defined(),
true);
425 ASSERT_EQ(rl->
get_item(2)->res_addr_list->size(), 1UL);
426 ASSERT_EQ(rl->
get_item(2)->res_addr_list->at(0)->to_string(),
"33.33.33.33");
427 ASSERT_EQ(rl->
get_item(3)->res_addr_list_defined(),
true);
428 ASSERT_EQ(rl->
get_item(3)->res_addr_list->size(), 3UL);
429 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(0)->to_string(),
"333::333");
430 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(1)->to_string(),
"33::33");
431 ASSERT_EQ(rl->
get_item(3)->res_addr_list->at(2)->to_string(),
"33.33.33.33");
432 ASSERT_EQ(rl->
get_item(4)->res_addr_list_defined(),
true);
433 ASSERT_EQ(rl->
get_item(4)->res_addr_list->size(), 2UL);
434 ASSERT_EQ(rl->
get_item(4)->res_addr_list->at(0)->to_string(),
"44::44");
435 ASSERT_EQ(rl->
get_item(4)->res_addr_list->at(1)->to_string(),
"444::444");
443 fake_bulkres.start(&ignore);
446 ASSERT_EQ(5UL, rl->
size())
447 <<
"Unexpected remote list item count" << std::endl
450 for (
size_t i = 0; i < rl->
size(); ++i)
452 ASSERT_EQ(rl->
get_item(i)->res_addr_list_defined(),
true);
453 if (rl->
get_item(i)->server_host[0] ==
'1')
455 ASSERT_EQ(rl->
get_item(i)->res_addr_list->size(), 1UL);
456 ASSERT_EQ(rl->
get_item(i)->res_addr_list->at(0)->to_string(),
"1.1.1.1");
458 else if (rl->
get_item(i)->server_host[0] ==
'2')
460 ASSERT_EQ(rl->
get_item(i)->res_addr_list->size(), 1UL);
461 ASSERT_EQ(rl->
get_item(i)->res_addr_list->at(0)->to_string(),
"2:cafe::1");
463 else if (rl->
get_item(i)->server_host[0] ==
'3')
465 if (rl->
get_item(i)->transport_protocol.is_ipv4())
467 ASSERT_EQ(rl->
get_item(i)->res_addr_list->size(), 1UL);
468 ASSERT_EQ(rl->
get_item(i)->res_addr_list->at(0)->to_string(),
"3.3.3.3");
472 ASSERT_EQ(rl->
get_item(i)->res_addr_list->size(), 2UL);
475 else if (rl->
get_item(i)->server_host[0] ==
'4')
477 ASSERT_EQ(rl->
get_item(i)->res_addr_list->size(), 1UL);
478 ASSERT_EQ(rl->
get_item(i)->res_addr_list->at(0)->to_string(),
"4::4");
482 for (
size_t i = 0; i < rl->
size(); ++i)
484 for (
size_t j = 0; j < rl->
get_item(i)->res_addr_list->size(); ++j)
498 auto ep1 = fake_bulkres.init_endpoint();
499 auto ep2 = fake_bulkres.init_endpoint();
501 rl->
get_item(i)->get_endpoint(ep2, j);