added test to DNS: load cache from file
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 30 Apr 2015 07:39:11 +0000 (09:39 +0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Mon, 4 May 2015 14:57:58 +0000 (16:57 +0200)
test/CMakeLists.test_dns.txt
test/CMakeLists.test_icmppacket.txt
test/data/CMakeLists.txt
test/test_dns.cpp

index 158e588..43cf380 100644 (file)
@@ -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)
index 8899167..e2b2ffd 100644 (file)
@@ -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)
index 1bac7e7..f70f55b 100644 (file)
@@ -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)
index f215e39..6cb1df5 100644 (file)
@@ -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