util: Use default resolver behavior in util::dns::Resolver
As of this commit, we are using the default behavior of
boost::asio::ip::resolver (only return IPv4 addresses if a non-loopback
IPv4 address is configured for the system; only return IPv6 addresses if
a non-loopback IPv6 address is configured for the system).
Unit tests are now conditioned upon availability of IPv4/IPv6 and will
not fail if IPv4 or IPv6 addresses cannot be resolved.
Change-Id: I8d7fa9a205ad26a2ca85fd22d582ffe6b0a02a92
Refs: #2415
diff --git a/tests/unit-tests/util/test-dns.cpp b/tests/unit-tests/util/test-dns.cpp
index 6eeb6e0..23bce2d 100644
--- a/tests/unit-tests/util/test-dns.cpp
+++ b/tests/unit-tests/util/test-dns.cpp
@@ -22,13 +22,18 @@
#include "util/dns.hpp"
#include "boost-test.hpp"
+#include "../network-configuration-detector.hpp"
#include <boost/lexical_cast.hpp>
namespace ndn {
+namespace util {
+namespace tests {
using boost::asio::ip::address_v4;
using boost::asio::ip::address_v6;
+using ndn::tests::NetworkConfigurationDetector;
+
class DnsFixture
{
public:
@@ -88,6 +93,74 @@
BOOST_AUTO_TEST_CASE(Asynchronous)
{
+ if (!NetworkConfigurationDetector::hasIpv4() && !NetworkConfigurationDetector::hasIpv6()) {
+ BOOST_TEST_MESSAGE("Platform does not support both IPv4 and IPv6, skipping test case");
+ return;
+ }
+
+ dns::asyncResolve("nothost.nothost.nothost.arpa",
+ bind(&DnsFixture::onSuccess, this, _1,
+ dns::IpAddress(address_v4()), false, false),
+ bind(&DnsFixture::onFailure, this, true),
+ m_ioService); // should fail
+ m_ioService.run();
+
+ BOOST_CHECK_EQUAL(m_nFailures, 1);
+ BOOST_CHECK_EQUAL(m_nSuccesses, 0);
+}
+
+BOOST_AUTO_TEST_CASE(AsynchronousV4)
+{
+ if (!NetworkConfigurationDetector::hasIpv4()) {
+ BOOST_TEST_MESSAGE("Platform does not support IPv4, skipping the test case");
+ return;
+ }
+
+ dns::asyncResolve("192.0.2.1",
+ bind(&DnsFixture::onSuccess, this, _1,
+ dns::IpAddress(address_v4::from_string("192.0.2.1")),
+ true, true),
+ bind(&DnsFixture::onFailure, this, false),
+ m_ioService);
+ m_ioService.run();
+
+ BOOST_CHECK_EQUAL(m_nFailures, 0);
+ BOOST_CHECK_EQUAL(m_nSuccesses, 1);
+}
+
+BOOST_AUTO_TEST_CASE(AsynchronousV6)
+{
+ if (!NetworkConfigurationDetector::hasIpv6()) {
+ BOOST_TEST_MESSAGE("Platform does not support IPv6, skipping the test case");
+ return;
+ }
+
+ dns::asyncResolve("ipv6.google.com", // only IPv6 address should be available
+ bind(&DnsFixture::onSuccess, this, _1,
+ dns::IpAddress(address_v6()), true, false),
+ bind(&DnsFixture::onFailure, this, false),
+ m_ioService);
+
+ dns::asyncResolve("2001:db8:3f9:0:3025:ccc5:eeeb:86d3",
+ bind(&DnsFixture::onSuccess, this, _1,
+ dns::IpAddress(address_v6::
+ from_string("2001:db8:3f9:0:3025:ccc5:eeeb:86d3")),
+ true, true),
+ bind(&DnsFixture::onFailure, this, false),
+ m_ioService);
+ m_ioService.run();
+
+ BOOST_CHECK_EQUAL(m_nFailures, 0);
+ BOOST_CHECK_EQUAL(m_nSuccesses, 2);
+}
+
+BOOST_AUTO_TEST_CASE(AsynchronousV4AndV6)
+{
+ if (!NetworkConfigurationDetector::hasIpv4() || !NetworkConfigurationDetector::hasIpv6()) {
+ BOOST_TEST_MESSAGE("Platform does not support either IPv4 or IPv6, skipping test case");
+ return;
+ }
+
dns::asyncResolve("www.named-data.net",
bind(&DnsFixture::onSuccess, this, _1,
dns::IpAddress(address_v4()), true, false),
@@ -95,20 +168,14 @@
m_ioService,
dns::Ipv4Only());
- dns::asyncResolve("nothost.nothost.nothost.arpa",
- bind(&DnsFixture::onSuccess, this, _1,
- dns::IpAddress(address_v4()), false, false),
- bind(&DnsFixture::onFailure, this, true),
- m_ioService); // should fail
-
- dns::asyncResolve("www.google.com",
+ dns::asyncResolve("a.root-servers.net",
bind(&DnsFixture::onSuccess, this, _1,
dns::IpAddress(address_v4()), true, false),
bind(&DnsFixture::onFailure, this, false),
m_ioService,
dns::Ipv4Only()); // request IPv4 address
- dns::asyncResolve("www.google.com",
+ dns::asyncResolve("a.root-servers.net",
bind(&DnsFixture::onSuccess, this, _1,
dns::IpAddress(address_v6()), true, false),
bind(&DnsFixture::onFailure, this, false),
@@ -119,12 +186,6 @@
bind(&DnsFixture::onSuccess, this, _1,
dns::IpAddress(address_v6()), true, false),
bind(&DnsFixture::onFailure, this, false),
- m_ioService);
-
- dns::asyncResolve("ipv6.google.com", // only IPv6 address should be available
- bind(&DnsFixture::onSuccess, this, _1,
- dns::IpAddress(address_v6()), true, false),
- bind(&DnsFixture::onFailure, this, false),
m_ioService,
dns::Ipv6Only());
@@ -134,30 +195,18 @@
bind(&DnsFixture::onFailure, this, true), // should fail
m_ioService,
dns::Ipv4Only());
-
- dns::asyncResolve("192.0.2.1",
- bind(&DnsFixture::onSuccess, this, _1,
- dns::IpAddress(address_v4::from_string("192.0.2.1")),
- true, true),
- bind(&DnsFixture::onFailure, this, false),
- m_ioService);
-
- dns::asyncResolve("2001:db8:3f9:0:3025:ccc5:eeeb:86d3",
- bind(&DnsFixture::onSuccess, this, _1,
- dns::IpAddress(address_v6::
- from_string("2001:db8:3f9:0:3025:ccc5:eeeb:86d3")),
- true, true),
- bind(&DnsFixture::onFailure, this, false),
- m_ioService);
-
m_ioService.run();
- BOOST_CHECK_EQUAL(m_nFailures, 2);
- BOOST_CHECK_EQUAL(m_nSuccesses, 7);
+ BOOST_CHECK_EQUAL(m_nFailures, 1);
+ BOOST_CHECK_EQUAL(m_nSuccesses, 4);
}
BOOST_AUTO_TEST_CASE(Synchronous)
{
+ if (!NetworkConfigurationDetector::hasIpv4() && !NetworkConfigurationDetector::hasIpv6()) {
+ BOOST_TEST_MESSAGE("Platform does not support both IPv4 and IPv6, skipping test case");
+ return;
+ }
dns::IpAddress address;
BOOST_CHECK_NO_THROW(address = dns::syncResolve("www.named-data.net", m_ioService));
@@ -166,4 +215,6 @@
BOOST_AUTO_TEST_SUITE_END()
+} // namespace tests
+} // namespace util
} // namespace ndn