# HG changeset patch # User David Demelier # Date 1523651550 -7200 # Node ID 84537e43b352952fba81541b1f78af6015d38820 # Parent a059100b73dc4b30f7cbfe242a8d98376c02cf98 Tests: add [rule] load tests, continue #779 diff -r a059100b73dc -r 84537e43b352 tests/src/libirccd/CMakeLists.txt --- a/tests/src/libirccd/CMakeLists.txt Fri Apr 13 23:05:56 2018 +0200 +++ b/tests/src/libirccd/CMakeLists.txt Fri Apr 13 22:32:30 2018 +0200 @@ -48,3 +48,4 @@ add_subdirectory(irc) add_subdirectory(logger) add_subdirectory(rules) +add_subdirectory(rule-util) diff -r a059100b73dc -r 84537e43b352 tests/src/libirccd/rule-util/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/src/libirccd/rule-util/CMakeLists.txt Fri Apr 13 22:32:30 2018 +0200 @@ -0,0 +1,23 @@ +# +# CMakeLists.txt -- CMake build system for irccd +# +# Copyright (c) 2013-2018 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +irccd_define_test( + NAME rule-util + SOURCES main.cpp + LIBRARIES libirccd +) diff -r a059100b73dc -r 84537e43b352 tests/src/libirccd/rule-util/error-invalid-action.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/src/libirccd/rule-util/error-invalid-action.conf Fri Apr 13 22:32:30 2018 +0200 @@ -0,0 +1,2 @@ +[rule] +action = unknown diff -r a059100b73dc -r 84537e43b352 tests/src/libirccd/rule-util/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/src/libirccd/rule-util/main.cpp Fri Apr 13 22:32:30 2018 +0200 @@ -0,0 +1,111 @@ +/* + * main.cpp -- test rule_util functions + * + * Copyright (c) 2013-2018 David Demelier + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#define BOOST_TEST_MODULE "rule_util" +#include +#include + +#include + +#include +#include + +namespace irccd { + +namespace { + +ini::document open(const std::string& config) +{ + boost::filesystem::path path; + + path /= CMAKE_CURRENT_SOURCE_DIR; + path /= config; + + return ini::read_file(path.string()); +} + +} // !namespace + +BOOST_AUTO_TEST_SUITE(from_config) + +BOOST_AUTO_TEST_SUITE(valid) + +BOOST_AUTO_TEST_CASE(servers) +{ + const auto rule = rule_util::from_config(open("simple.conf")[0]); + + BOOST_TEST(rule.get_servers().size() == 1U); + BOOST_TEST(rule.get_servers().count("s1")); + BOOST_TEST(rule.get_channels().empty()); + BOOST_TEST(rule.get_plugins().empty()); + BOOST_TEST(rule.get_events().empty()); +} + +BOOST_AUTO_TEST_CASE(channels) +{ + const auto rule = rule_util::from_config(open("simple.conf")[1]); + + BOOST_TEST(rule.get_servers().empty()); + BOOST_TEST(rule.get_channels().size() == 1U); + BOOST_TEST(rule.get_channels().count("#c1")); + BOOST_TEST(rule.get_plugins().empty()); + BOOST_TEST(rule.get_events().empty()); +} + +BOOST_AUTO_TEST_CASE(plugins) +{ + const auto rule = rule_util::from_config(open("simple.conf")[2]); + + BOOST_TEST(rule.get_servers().empty()); + BOOST_TEST(rule.get_channels().empty()); + BOOST_TEST(rule.get_plugins().size() == 1U); + BOOST_TEST(rule.get_plugins().count("hangman")); + BOOST_TEST(rule.get_events().empty()); +} + +BOOST_AUTO_TEST_CASE(events) +{ + const auto rule = rule_util::from_config(open("simple.conf")[3]); + + BOOST_TEST(rule.get_servers().empty()); + BOOST_TEST(rule.get_channels().empty()); + BOOST_TEST(rule.get_plugins().empty()); + BOOST_TEST(rule.get_events().size() == 1U); + BOOST_TEST(rule.get_events().count("onCommand")); +} + +BOOST_AUTO_TEST_SUITE(errors) + +BOOST_AUTO_TEST_CASE(invalid_action) +{ + BOOST_REQUIRE_THROW(rule_util::from_config(open("error-invalid-action.conf")[0]), rule_error); + + try { + rule_util::from_config(open("error-invalid-action.conf")[0]); + } catch (const rule_error& ex) { + BOOST_TEST(ex.code() == rule_error::invalid_action); + } +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE_END() + +} // !irccd diff -r a059100b73dc -r 84537e43b352 tests/src/libirccd/rule-util/simple.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/src/libirccd/rule-util/simple.conf Fri Apr 13 22:32:30 2018 +0200 @@ -0,0 +1,22 @@ +[rule] +servers = "s1" +action = accept + +[rule] +channels = "#c1" +action = drop + +[rule] +plugins = "hangman" +action = accept + +[rule] +events = "onCommand" +action = drop + +[rule] +servers = "s1" +channels = "#c1" +plugins = "hangman" +events = "onCommand" +action = accept