added more tests, fixed trouble with position of test data relative to build dir
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 19 Mar 2015 17:26:17 +0000 (18:26 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 19 Mar 2015 17:26:17 +0000 (18:26 +0100)
test/CMakeLists.test_icmppacket.txt
test/test_icmppacket.cpp

index 260ba6d..8899167 100644 (file)
@@ -1,3 +1,7 @@
+add_definitions(
+  -DDATA_DIR_STRING=\"${CMAKE_BINARY_DIR}/test/data\"
+)
+
 # compiler: creates the binaries
 add_executable(test_icmppacket
     ${CMAKE_SOURCE_DIR}/src/boost_assert_handler.cpp
index 5322624..559b095 100644 (file)
@@ -24,6 +24,7 @@
 #define BOOST_TEST_DYN_LINK
 
 #include <fstream>
+#include <sstream>
 #include <ios>
 #include <boost/test/unit_test.hpp>
 #include <boost/asio.hpp>
@@ -75,19 +76,12 @@ IcmpPacketItem read_packet(const std::string &file_name)
 
 BOOST_AUTO_TEST_SUITE( TestIcmpPacket )
 
-// just read a pcap file to see if helpers work
-BOOST_AUTO_TEST_CASE( TestInternal )
-{
-    std::string file_name = "test_icmppacket_echorequest.pcap";
-    IcmpPacketItem packet = read_packet(file_name);
-    BOOST_CHECK( packet );
-}
-
-
 BOOST_AUTO_TEST_CASE( EchoRequest )
 {
-    std::string file_name = "test_icmppacket_echorequest.pcap";
-    IcmpPacketItem packet = read_packet(file_name);
+    std::string request_file = "icmp_echorequest.pcap";
+
+    // read request file
+    IcmpPacketItem packet = read_packet(request_file);
     BOOST_REQUIRE( packet );
     BOOST_CHECK_EQUAL( packet->get_type_v4(), Icmpv4Type_EchoRequest );
     BOOST_CHECK_EQUAL( packet->get_source_address().to_string(),
@@ -98,6 +92,61 @@ BOOST_AUTO_TEST_CASE( EchoRequest )
     BOOST_CHECK_EQUAL( packet->get_icmp_size(), 20 );
 }
 
+
+BOOST_AUTO_TEST_CASE( EchoReply )
+{
+    std::string reply_file = "icmp_echoreply.pcap";
+
+    // read reply file
+    IcmpPacketItem packet = read_packet(reply_file);
+    BOOST_REQUIRE( packet );
+    BOOST_CHECK_EQUAL( packet->get_type_v4(), Icmpv4Type_EchoReply );
+    BOOST_CHECK_EQUAL( packet->get_source_address().to_string(),
+                       "38.100.128.10");
+    BOOST_CHECK_EQUAL( packet->get_destination_address().to_string(),
+                       "172.16.1.141");
+    BOOST_CHECK_EQUAL( packet->get_icmp_code(), 0 );
+    BOOST_CHECK_EQUAL( packet->get_icmp_size(), 20 );
+    BOOST_CHECK( packet->match_echo_reply(0xaf36, 1,
+                 boost::asio::ip::address_v4::from_string("38.100.128.10")) );
+}
+
+BOOST_AUTO_TEST_CASE( TimeExceeded )
+{
+    std::string file_name = "icmp_timeexceeded.pcap";
+
+    // read file
+    IcmpPacketItem packet = read_packet(file_name);
+    BOOST_REQUIRE( packet );
+    BOOST_CHECK_EQUAL( packet->get_type_v4(), Icmpv4Type_TimeExceeded );
+    BOOST_CHECK_EQUAL( packet->get_source_address().to_string(),
+                       "193.186.7.1");
+    BOOST_CHECK_EQUAL( packet->get_destination_address().to_string(),
+                       "172.16.1.141");
+    BOOST_CHECK_EQUAL( packet->get_icmp_code(), 0 );
+    BOOST_CHECK_EQUAL( packet->get_icmp_size(), 48 );
+    BOOST_CHECK( packet->match_time_exceeded(0x4ae3, 1,
+                 boost::asio::ip::address_v4::from_string("193.168.7.1")) );
+}
+
+BOOST_AUTO_TEST_CASE( DestinationUnreachable )
+{
+    std::string file_name = "icmp_destinationunreachable.pcap";
+
+    // read file
+    IcmpPacketItem packet = read_packet(file_name);
+    BOOST_REQUIRE( packet );
+    BOOST_CHECK_EQUAL( packet->get_type_v4(), Icmpv4Type_DestinationUnreachable );
+    BOOST_CHECK_EQUAL( packet->get_source_address().to_string(),
+                       "172.16.1.254");
+    BOOST_CHECK_EQUAL( packet->get_destination_address().to_string(),
+                       "172.16.1.141");
+    BOOST_CHECK_EQUAL( packet->get_icmp_code(), 3 );
+    BOOST_CHECK_EQUAL( packet->get_icmp_size(), 92 );
+    BOOST_CHECK( packet->match_destination_unreachable(0x077b, 1,
+                 boost::asio::ip::address_v4::from_string("85.214.66.2")) );
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 // (created using vim -- the world's best text editor)