Mercurial > irccd
changeset 687:84537e43b352
Tests: add [rule] load tests, continue #779
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 13 Apr 2018 22:32:30 +0200 |
parents | a059100b73dc |
children | a18dd69afdd0 |
files | tests/src/libirccd/CMakeLists.txt tests/src/libirccd/rule-util/CMakeLists.txt tests/src/libirccd/rule-util/error-invalid-action.conf tests/src/libirccd/rule-util/main.cpp tests/src/libirccd/rule-util/simple.conf |
diffstat | 5 files changed, 159 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- /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 <markand@malikania.fr> +# +# 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 +)
--- /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
--- /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 <markand@malikania.fr> + * + * 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 <boost/test/unit_test.hpp> +#include <boost/filesystem.hpp> + +#include <irccd/ini.hpp> + +#include <irccd/daemon/rule.hpp> +#include <irccd/daemon/rule_util.hpp> + +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
--- /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