From 288e39de91944de9f824b9cb4cc449f320ab602d Mon Sep 17 00:00:00 2001 From: Guilherme Maciel Ferreira Date: Wed, 1 Feb 2012 22:31:01 -0200 Subject: [PATCH] Test: bring aboard ConfigurationFile test case. --- test/CMakeLists.test_configurationfile.txt | 36 +++++++++++ test/CMakeLists.txt | 1 + test/test_configurationfile.cpp | 94 ++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 0 deletions(-) create mode 100644 test/CMakeLists.test_configurationfile.txt create mode 100644 test/test_configurationfile.cpp diff --git a/test/CMakeLists.test_configurationfile.txt b/test/CMakeLists.test_configurationfile.txt new file mode 100644 index 0000000..d042739 --- /dev/null +++ b/test/CMakeLists.test_configurationfile.txt @@ -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) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2673b52..c02aac5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -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 index 0000000..6367f40 --- /dev/null +++ b/test/test_configurationfile.cpp @@ -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 +#include +#include +#include + +#include +#include + +#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() -- 1.7.1