diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-10-19 14:16:57 -0400 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2022-11-10 18:56:48 +0100 |
commit | aaa05f901adddebf2435890edcbe03fe3e501771 (patch) | |
tree | 187afc29f1c3bc36bb1e7ddc9b95c8e46d48c200 /src/unittest/test_modmetadatadatabase.cpp | |
parent | 9dbac989bd0fb22de8bd882a788c827a7a3bc2e1 (diff) | |
download | minetest-aaa05f901adddebf2435890edcbe03fe3e501771.tar.xz |
Add mod storage PostgreSQL backend
Diffstat (limited to 'src/unittest/test_modmetadatadatabase.cpp')
-rw-r--r-- | src/unittest/test_modmetadatadatabase.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/unittest/test_modmetadatadatabase.cpp b/src/unittest/test_modmetadatadatabase.cpp index b93ff7e3b..b46feb884 100644 --- a/src/unittest/test_modmetadatadatabase.cpp +++ b/src/unittest/test_modmetadatadatabase.cpp @@ -20,12 +20,18 @@ with this program; if not, write to the Free Software Foundation, Inc., // This file is an edited copy of test_authdatabase.cpp +#include "cmake_config.h" + #include "test.h" #include <algorithm> +#include <cstdlib> #include "database/database-dummy.h" #include "database/database-files.h" #include "database/database-sqlite3.h" +#if USE_POSTGRESQL +#include "database/database-postgresql.h" +#endif #include "filesys.h" namespace @@ -104,6 +110,46 @@ private: std::string dir; ModMetadataDatabase *mod_meta_db = nullptr; }; + +#if USE_POSTGRESQL +void clearPostgreSQLDatabase(const std::string &connect_string) +{ + ModMetadataDatabasePostgreSQL db(connect_string); + std::vector<std::string> modnames; + db.beginSave(); + db.listMods(&modnames); + for (const std::string &modname : modnames) + db.removeModEntries(modname); + db.endSave(); +} + +class PostgreSQLProvider : public ModMetadataDatabaseProvider +{ +public: + PostgreSQLProvider(const std::string &connect_string): m_connect_string(connect_string) {} + + ~PostgreSQLProvider() + { + if (m_db) + m_db->endSave(); + delete m_db; + } + + ModMetadataDatabase *getModMetadataDatabase() override + { + if (m_db) + m_db->endSave(); + delete m_db; + m_db = new ModMetadataDatabasePostgreSQL(m_connect_string); + m_db->beginSave(); + return m_db; + }; + +private: + std::string m_connect_string; + ModMetadataDatabase *m_db = nullptr; +}; +#endif // USE_POSTGRESQL } class TestModMetadataDatabase : public TestBase @@ -193,6 +239,33 @@ void TestModMetadataDatabase::runTests(IGameDef *gamedef) runTestsForCurrentDB(); delete mod_meta_provider; + +#if USE_POSTGRESQL + const char *env_postgresql_connect_string = getenv("MINETEST_POSTGRESQL_CONNECT_STRING"); + if (env_postgresql_connect_string) { + std::string connect_string(env_postgresql_connect_string); + + rawstream << "-------- PostgreSQL database (same object)" << std::endl; + + clearPostgreSQLDatabase(connect_string); + mod_meta_db = new ModMetadataDatabasePostgreSQL(connect_string); + mod_meta_provider = new FixedProvider(mod_meta_db); + + runTestsForCurrentDB(); + + delete mod_meta_db; + delete mod_meta_provider; + + rawstream << "-------- PostgreSQL database (new objects)" << std::endl; + + clearPostgreSQLDatabase(connect_string); + mod_meta_provider = new PostgreSQLProvider(connect_string); + + runTestsForCurrentDB(); + + delete mod_meta_provider; + } +#endif // USE_POSTGRESQL } //////////////////////////////////////////////////////////////////////////////// |