From 6c184947c3886ce80aa9eb9807a700025a344442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Blot?= Date: Fri, 16 Mar 2018 08:41:33 +0100 Subject: Server: delegate mod management & config to ServerModConfiguration (#7131) * Server: delegate mod management & config to ServerModConfiguration (rename it to ServerModManager) * Use c++11 range based loops * Add unittests + experimental/default mod as a test case to permit testing mod loading in future tests --- src/unittest/test_servermodmanager.cpp | 165 +++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 src/unittest/test_servermodmanager.cpp (limited to 'src/unittest/test_servermodmanager.cpp') diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp new file mode 100644 index 000000000..cb43babf9 --- /dev/null +++ b/src/unittest/test_servermodmanager.cpp @@ -0,0 +1,165 @@ +/* +Minetest +Copyright (C) 2018 nerzhul, Loic Blot + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" +#include +#include "server/mods.h" +#include "test_config.h" + +class TestServerModManager : public TestBase +{ +public: + TestServerModManager() { TestManager::registerTestModule(this); } + const char *getName() { return "TestServerModManager"; } + + void runTests(IGameDef *gamedef); + + void testCreation(); + void testIsConsistent(); + void testUnsatisfiedMods(); + void testGetMods(); + void testGetModsWrongDir(); + void testGetModspec(); + void testGetModNamesWrongDir(); + void testGetModNames(); + void testGetModMediaPathsWrongDir(); + void testGetModMediaPaths(); +}; + +static TestServerModManager g_test_instance; + +void TestServerModManager::runTests(IGameDef *gamedef) +{ + const char *saved_env_mt_subgame_path = getenv("MINETEST_SUBGAME_PATH"); +#ifdef WIN32 + { + std::string subgame_path("MINETEST_SUBGAME_PATH="); + subgame_path.append(TEST_SUBGAME_PATH); + _putenv(subgame_path.c_str()); + } +#else + setenv("MINETEST_SUBGAME_PATH", TEST_SUBGAME_PATH, 1); +#endif + + TEST(testCreation); + TEST(testIsConsistent); + TEST(testGetModsWrongDir); + TEST(testUnsatisfiedMods); + TEST(testGetMods); + TEST(testGetModspec); + TEST(testGetModNamesWrongDir); + TEST(testGetModNames); + TEST(testGetModMediaPathsWrongDir); + TEST(testGetModMediaPaths); + +#ifdef WIN32 + { + std::string subgame_path("MINETEST_SUBGAME_PATH="); + subgame_path.append(saved_env_mt_subgame_path); + _putenv(subgame_path.c_str()); + } +#else + setenv("MINETEST_SUBGAME_PATH", saved_env_mt_subgame_path, 1); +#endif +} + +void TestServerModManager::testCreation() +{ + ServerModManager sm(TEST_WORLDDIR); +} + +void TestServerModManager::testGetModsWrongDir() +{ + // Test in non worlddir to ensure no mods are found + ServerModManager sm(std::string(TEST_WORLDDIR) + DIR_DELIM + ".."); + UASSERTEQ(bool, sm.getMods().empty(), true); +} + +void TestServerModManager::testUnsatisfiedMods() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + UASSERTEQ(bool, sm.getUnsatisfiedMods().empty(), true); +} + +void TestServerModManager::testIsConsistent() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + UASSERTEQ(bool, sm.isConsistent(), true); +} + +void TestServerModManager::testGetMods() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + const auto &mods = sm.getMods(); + UASSERTEQ(bool, mods.empty(), false); + + // Ensure we found default mod inside the test folder + bool default_found = false; + for (const auto &m : mods) { + if (m.name == "default") + default_found = true; + + // Verify if paths are not empty + UASSERTEQ(bool, m.path.empty(), false); + } + + UASSERTEQ(bool, default_found, true); +} + +void TestServerModManager::testGetModspec() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + UASSERTEQ(const ModSpec *, sm.getModSpec("wrongmod"), NULL); + UASSERT(sm.getModSpec("default") != NULL); +} + +void TestServerModManager::testGetModNamesWrongDir() +{ + ServerModManager sm(std::string(TEST_WORLDDIR) + DIR_DELIM + ".."); + std::vector result; + sm.getModNames(result); + UASSERTEQ(bool, result.empty(), true); +} + +void TestServerModManager::testGetModNames() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + std::vector result; + sm.getModNames(result); + UASSERTEQ(bool, result.empty(), false); + UASSERT(std::find(result.begin(), result.end(), "default") != result.end()); +} + +void TestServerModManager::testGetModMediaPathsWrongDir() +{ + ServerModManager sm(std::string(TEST_WORLDDIR) + DIR_DELIM + ".."); + std::vector result; + sm.getModsMediaPaths(result); + UASSERTEQ(bool, result.empty(), true); +} + +void TestServerModManager::testGetModMediaPaths() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + std::vector result; + sm.getModsMediaPaths(result); + UASSERTEQ(bool, result.empty(), false); + // We should have 5 folders for each mod (textures, media, locale, model, sounds) + UASSERTEQ(unsigned long, result.size() % 5, 0); +} -- cgit v1.2.3