From 4389b86d96d83e5480987a2dee293fe5eccd11de Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Thu, 30 Apr 2015 09:39:11 +0200 Subject: [PATCH] added test to DNS: load cache from file --- test/CMakeLists.test_dns.txt | 7 +++++++ test/CMakeLists.test_icmppacket.txt | 8 ++++++++ test/data/CMakeLists.txt | 1 + test/test_dns.cpp | 33 ++++++++++++++++++++++++++++++++- 4 files changed, 48 insertions(+), 1 deletions(-) diff --git a/test/CMakeLists.test_dns.txt b/test/CMakeLists.test_dns.txt index 158e588..43cf380 100644 --- a/test/CMakeLists.test_dns.txt +++ b/test/CMakeLists.test_dns.txt @@ -1,3 +1,7 @@ +add_definitions( + -DDATA_DIR_STRING=\"${CMAKE_BINARY_DIR}/test/data\" +) + # compiler: creates the binaries add_executable(test_dns ${CMAKE_SOURCE_DIR}/src/boost_assert_handler.cpp @@ -30,3 +34,6 @@ target_link_libraries( # cmake: invocation via "make test" add_test(test_dns test_dns) + +# add data subdir for test data +add_subdirectory(data) diff --git a/test/CMakeLists.test_icmppacket.txt b/test/CMakeLists.test_icmppacket.txt index 8899167..e2b2ffd 100644 --- a/test/CMakeLists.test_icmppacket.txt +++ b/test/CMakeLists.test_icmppacket.txt @@ -21,6 +21,13 @@ add_executable(test_icmppacket test_icmppacket.cpp ) +set(Boost_USE_STATIC_LIBS OFF) +set(Boost_USE_MULTITHREADED OFF) +set(Boost_USE_STATIC_RUNTIME OFF) +find_package(Boost 1.44 COMPONENTS serialization date_time REQUIRED) +include_directories(${Boost_INCLUDE_DIRS}) +link_directories(${Boost_LIBRARY_DIRS}) + # linker: link the program against the libraries target_link_libraries( test_icmppacket @@ -31,4 +38,5 @@ target_link_libraries( # cmake: invocation via "make test" add_test(test_icmppacket test_icmppacket) +# add data subdir for test data add_subdirectory(data) diff --git a/test/data/CMakeLists.txt b/test/data/CMakeLists.txt index 1bac7e7..f70f55b 100644 --- a/test/data/CMakeLists.txt +++ b/test/data/CMakeLists.txt @@ -3,3 +3,4 @@ configure_file(icmp_echorequest.pcap ${CMAKE_CURRENT_BINARY_DIR}/icmp_echoreques configure_file(icmp_echoreply.pcap ${CMAKE_CURRENT_BINARY_DIR}/icmp_echoreply.pcap COPYONLY) configure_file(icmp_timeexceeded.pcap ${CMAKE_CURRENT_BINARY_DIR}/icmp_timeexceeded.pcap COPYONLY) configure_file(icmp_destinationunreachable.pcap ${CMAKE_CURRENT_BINARY_DIR}/icmp_destinationunreachable.pcap COPYONLY) +configure_file(dns_cache_example.xml ${CMAKE_CURRENT_BINARY_DIR}/dns_cache_example.xml COPYONLY) diff --git a/test/test_dns.cpp b/test/test_dns.cpp index f215e39..6cb1df5 100644 --- a/test/test_dns.cpp +++ b/test/test_dns.cpp @@ -66,7 +66,7 @@ struct GlobalFixture // setup logging so we can see output from out code I2n::Logger::enable_stderr_log( true ); - I2n::Logger::set_log_level( I2n::Logger::LogLevel::Debug ); + I2n::Logger::set_log_level( I2n::Logger::LogLevel::Info ); I2n::Logger::GlobalLogger.info() << "Logging enabled for DnsTest"; // IoService @@ -193,6 +193,7 @@ BOOST_AUTO_TEST_CASE( cache_retrieve_ip1 ) HostAddressVec ips = Cache->get_ips("host1.test"); BOOST_CHECK_EQUAL( ips.size(), 1 ); HostAddress ip = ips.front(); + BOOST_CHECK( ip.is_valid() ); BOOST_CHECK_EQUAL( ip.get_ip().to_string(), "192.168.42.1" ); BOOST_CHECK_EQUAL( ip.get_ttl().get_value(), 61 ); } @@ -203,9 +204,11 @@ BOOST_AUTO_TEST_CASE( cache_retrieve_ip2 ) HostAddressVec ips = Cache->get_ips("host2_3.test"); BOOST_CHECK_EQUAL( ips.size(), 2 ); HostAddress ip = ips[0]; + BOOST_CHECK( ip.is_valid() ); BOOST_CHECK_EQUAL( ip.get_ip().to_string(), "192.168.42.2" ); BOOST_CHECK_EQUAL( ip.get_ttl().get_value(), 92 ); ip = ips[1]; + BOOST_CHECK( ip.is_valid() ); BOOST_CHECK_EQUAL( ip.get_ip().to_string(), "192.168.42.3" ); BOOST_CHECK_EQUAL( ip.get_ttl().get_value(), 93 ); } @@ -226,6 +229,7 @@ BOOST_AUTO_TEST_CASE( cache_retrieve_recursive1 ) HostAddressVec ips = Cache->get_ips_recursive("cname.test"); BOOST_CHECK_EQUAL( ips.size(), 1 ); HostAddress ip = ips.front(); + BOOST_CHECK( ip.is_valid() ); BOOST_CHECK_EQUAL( ip.get_ip().to_string(), "192.168.42.1" ); BOOST_CHECK_EQUAL( ip.get_ttl().get_value(), 35 ); } @@ -236,6 +240,7 @@ BOOST_AUTO_TEST_CASE( cache_retrieve_recursive2 ) HostAddressVec ips = Cache->get_ips_recursive("cname3.test"); BOOST_CHECK_EQUAL( ips.size(), 1 ); HostAddress ip = ips.front(); + BOOST_CHECK( ip.is_valid() ); BOOST_CHECK_EQUAL( ip.get_ip().to_string(), "192.168.42.1" ); BOOST_CHECK_EQUAL( ip.get_ttl().get_value(), 33 ); } @@ -300,6 +305,27 @@ BOOST_AUTO_TEST_CASE( cache_skip_tests ) BOOST_CHECK_EQUAL( Cache->get_first_outdated_cname("host1.test", 5), "" ); } +BOOST_AUTO_TEST_CASE( cache_load_test ) +{ + std::stringstream file_name; + file_name << DATA_DIR_STRING << "/" << "dns_cache_example.xml"; + BOOST_TEST_MESSAGE( "loading cache from file " << file_name.str() ); + DnsCache loaded_cache( IoService, file_name.str() ); + HostAddressVec ips = loaded_cache.get_ips("abc.xyz"); + BOOST_CHECK_EQUAL( ips.size(), 1 ); + HostAddress ip = ips.front(); + BOOST_CHECK_EQUAL( ip.get_ip().to_string(), "11.22.33.44" ); + BOOST_CHECK_EQUAL( ip.get_ttl().get_value(), 567 ); + BOOST_CHECK_EQUAL( ip.get_ttl().get_updated_value(), 0 ); + + Cname cname = loaded_cache.get_cname("cname1.xyz"); + BOOST_CHECK_EQUAL( cname.Host, "abc.xyz" ); + BOOST_CHECK_EQUAL( cname.Ttl.get_value(), 27 ); + BOOST_CHECK_EQUAL( cname.Ttl.get_updated_value(), 0 ); + + // not testing Ttl set time since is private +} + BOOST_AUTO_TEST_SUITE_END() // of TestDnsCache @@ -318,10 +344,12 @@ BOOST_AUTO_TEST_CASE( create_resolver_v4 ) PingProtocol_ICMP); BOOST_CHECK_EQUAL( resolver->get_hostname(), hostname ); BOOST_CHECK( !resolver->is_resolving() ); + BOOST_CHECK( !resolver->is_waiting_to_resolve() ); // cancel should have no effect resolver->cancel_resolve(); BOOST_CHECK( !resolver->is_resolving() ); + BOOST_CHECK( !resolver->is_waiting_to_resolve() ); // should not have any ips since cache did not load anything BOOST_CHECK_EQUAL( resolver->get_resolved_ip_count(), 0 ); @@ -346,12 +374,15 @@ BOOST_AUTO_TEST_CASE( do_resolve ) std::string hostname = "www.intra2net.com"; ResolverItem resolver = Master->get_resolver_for(hostname, PingProtocol_ICMP); + BOOST_CHECK( !resolver->is_resolving() ); + BOOST_CHECK( !resolver->is_waiting_to_resolve() ); // set callback callback_type callback = boost::bind( resolve_callback, IoService, resolver, _1, _2 ); // start resolving resolver->async_resolve(callback); + BOOST_CHECK( resolver->is_resolving() ); IoService->run(); // this will block until io service is stopped in resolve_callback -- 1.7.1