--- /dev/null
+# 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)
--- /dev/null
+/*
+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()