Test: bring aboard ConfigurationFile test case.
authorGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Thu, 2 Feb 2012 00:31:01 +0000 (22:31 -0200)
committerGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Thu, 2 Feb 2012 00:31:01 +0000 (22:31 -0200)
test/CMakeLists.test_configurationfile.txt [new file with mode: 0644]
test/CMakeLists.txt
test/test_configurationfile.cpp [new file with mode: 0644]

diff --git a/test/CMakeLists.test_configurationfile.txt b/test/CMakeLists.test_configurationfile.txt
new file mode 100644 (file)
index 0000000..d042739
--- /dev/null
@@ -0,0 +1,36 @@
+# compiler: creates the binaries
+add_executable(test_configurationfile
+    test_configurationfile.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/configurationfile.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/configurationinterface.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/configurationoptions.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/configuration.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/host.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/daemonoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/configfileoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/configurationoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/hostconfigurationoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/hostpingintervaloption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/hostpingprotocoloption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/hostportoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/hostnameoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/hostdownlimitoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/linkdownintervaloption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/linkupintervaloption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/nameserveroption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/pingfaillimitoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/sourcenetworkinterfaceoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/statusnotifiercmdoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/config/option/versionoption.cpp
+    ${CMAKE_SOURCE_DIR}/src/host/pingprotocol.cpp
+)
+
+# linker: link the program against the libraries
+target_link_libraries(
+    test_configurationfile
+    ${I2NCOMMON_LIBRARIES}
+    ${Boost_LIBRARIES}
+)
+
+# cmake: invocation via "make test"
+add_test(test_configurationfile test_configurationfile)
index 2673b52..c02aac5 100644 (file)
@@ -25,6 +25,7 @@ enable_testing()
 
 # cmake: inclusion of each test case cmake file
 include(CMakeLists.test_configurationcommandline.txt)
+include(CMakeLists.test_configurationfile.txt)
 include(CMakeLists.test_messagepayload.txt)
 include(CMakeLists.test_hoststatus.txt)
 include(CMakeLists.test_ipv4header.txt)
diff --git a/test/test_configurationfile.cpp b/test/test_configurationfile.cpp
new file mode 100644 (file)
index 0000000..6367f40
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+The software in this package is distributed under the GNU General
+Public License version 2 (with a special exception described below).
+
+A copy of GNU General Public License (GPL) is included in this distribution,
+in the file COPYING.GPL.
+
+As a special exception, if other files instantiate templates or use macros
+or inline functions from this file, or you compile this file and link it
+with other works to produce a work based on this file, this file
+does not by itself cause the resulting work to be covered
+by the GNU General Public License.
+
+However the source code for this file must still be made available
+in accordance with section (3) of the GNU General Public License.
+
+This exception does not invalidate any other reasons why a work based
+on this file might be covered by the GNU General Public License.
+*/
+
+#define BOOST_TEST_MAIN
+#define BOOST_TEST_DYN_LINK
+
+#include <iostream>
+#include <fstream>
+#include <streambuf>
+#include <string>
+
+#include <boost/program_options.hpp>
+#include <boost/test/unit_test.hpp>
+
+#include "config/configurationfile.h"
+
+BOOST_AUTO_TEST_SUITE( TestConfigurationFile )
+
+BOOST_AUTO_TEST_CASE( normal_options )
+{
+    boost::program_options::variables_map vm;
+    Configuration config;
+
+    std::string file_name = "pingcheck.conf";
+
+    std::ofstream file;
+    file.open( file_name.c_str() );
+    file << "source-network-interface=eth0\n";
+    file << "nameserver=localhost\n";
+    file << "hosts-down-limit=2\n";
+    file << "ping-fail-limit=80\n";
+    file << "status-notifier-cmd=scripts/notifier_command.sh\n";
+    file << "link-up-interval=10\n";
+    file << "link-down-interval=10\n";
+    // 1st host
+    file << "[host]\n";
+    file << "name=www.intra2net.com\n";
+    file << "port=80\n";
+    file << "interval=4000\n";
+    file << "ping-protocol=TCP\n";
+    // 2nd host
+    file << "[host]\n";
+    file << "name=www.ufsc.br\n";
+    file << "port=25\n";
+    file << "interval=1000\n";
+    file << "ping-protocol=ICMP\n";
+    file.close();
+
+    ConfigurationFile configuration_file( file_name );
+    bool file_processed = configuration_file.process( &vm );
+    bool file_parsed = configuration_file.parse( vm, &config );
+
+    BOOST_CHECK_EQUAL( file_processed, true );
+    BOOST_CHECK_EQUAL( file_parsed, true );
+
+    BOOST_CHECK_EQUAL( config.get_source_network_interface(), "eth0" );
+    BOOST_CHECK_EQUAL( config.get_nameserver(), "localhost" );
+    BOOST_CHECK_EQUAL( config.get_hosts_down_limit(), 2 );
+    BOOST_CHECK_EQUAL( config.get_ping_fail_limit(), 80 );
+    BOOST_CHECK_EQUAL( config.get_status_notifier_cmd(), "scripts/notifier_command.sh" );
+    BOOST_CHECK_EQUAL( config.get_link_up_interval_in_min(), 10 );
+    BOOST_CHECK_EQUAL( config.get_link_down_interval_in_min(), 10 );
+
+    BOOST_CHECK_EQUAL( config.get_hosts().size(), 2 );
+    HostItem host1 = config.get_hosts().at(0);
+    BOOST_CHECK_EQUAL( host1->get_address(), "www.intra2net.com" );
+    BOOST_CHECK_EQUAL( host1->get_port(), 80 );
+    BOOST_CHECK_EQUAL( host1->get_interval_in_sec(), 4000 );
+    BOOST_CHECK_EQUAL( host1->get_ping_protocol(), PingProtocol_TCP );
+    HostItem host2 = config.get_hosts().at(1);
+    BOOST_CHECK_EQUAL( host2->get_address(), "www.ufsc.br" );
+    BOOST_CHECK_EQUAL( host2->get_port(), 25 );
+    BOOST_CHECK_EQUAL( host2->get_interval_in_sec(), 1000 );
+    BOOST_CHECK_EQUAL( host2->get_ping_protocol(), PingProtocol_ICMP );
+}
+
+BOOST_AUTO_TEST_SUITE_END()