Mercurial > irccd
diff tests/src/libirccd/rule-util/main.cpp @ 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 | |
children | e8c4ba5ed1c6 |
line wrap: on
line diff
--- /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