[Server] Add a servatrice-dev executable on the in-memory database (#7864)

This commit is contained in:
BruebachL 2026-11-10 12:16:36 +01:00 • committed by GitHub
parent a6d5dd5275
commit 15d69eb929
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 358 additions and 27 deletions

View file

@ -430,6 +430,17 @@ cockatrice_add_test(
LABELS
server
)
cockatrice_add_test(
NAME
servatrice_in_memory_database_test
SOURCES
servatrice_in_memory_database_test.cpp
LIBS
libcockatrice_server_dev
LABELS
server
)
cockatrice_add_test(
NAME
private_chat_paging_test

View file

@ -0,0 +1,72 @@
/** @file servatrice_in_memory_database_test.cpp
* @brief Tests for the in-memory server database shared between the main interface and its workers.
* @ingroup Tests
*/
#include "libcockatrice/server/dev/servatrice_in_memory_database_interface.h"
#include <QString>
#include <gtest/gtest.h>
#include <libcockatrice/rng/rng_abstract.h>
#include <memory>
RNG_Abstract *rng = nullptr; // referenced by the server_remote library
namespace
{
TEST(ServatriceInMemoryDatabaseTest, WorkersShareTheSeededState)
{
Servatrice_InMemoryDatabaseInterface mainDatabase;
mainDatabase.setAuthenticationResult(UnknownUser);
ServerInfo_User user;
user.set_name("tester");
user.set_id(7);
mainDatabase.addUser(user);
Server_DatabaseInterface::BootstrapRoomRecord room;
room.id = 3;
room.name = "Lobby";
mainDatabase.addRoom(room);
std::unique_ptr<Server_DatabaseInterface> worker(mainDatabase.createWorkerInterface(0));
ASSERT_NE(nullptr, worker);
QString reason;
int secondsLeft = 0;
EXPECT_EQ(UnknownUser, worker->checkUserPassword(nullptr, "tester", "", "", reason, secondsLeft, false));
const ServerInfo_User fetched = worker->getUserData("tester", true);
EXPECT_EQ(7, fetched.id());
EXPECT_FALSE(worker->getUserData("tester", false).has_id());
const auto rooms = worker->getBootstrapRooms(0);
ASSERT_EQ(1, rooms.size());
EXPECT_EQ(3, rooms.first().id);
EXPECT_EQ("Lobby", rooms.first().name);
// A worker records the messages it logs, and the main interface sees them.
worker->logMessage(1, "tester", "127.0.0.1", "hello", Server_DatabaseInterface::MessageTargetRoom, 3, "Lobby");
EXPECT_EQ(1, mainDatabase.getLogEntries().size());
}
TEST(ServatriceInMemoryDatabaseTest, UnknownUsersAreNamedLikeTheMySqlImplementation)
{
Servatrice_InMemoryDatabaseInterface database;
const ServerInfo_User guest = database.getUserData("stranger", true);
EXPECT_EQ("stranger", QString::fromStdString(guest.name()));
EXPECT_EQ(ServerInfo_User::IsUser, guest.user_level());
}
TEST(ServatriceInMemoryDatabaseTest, IdsAdvancePerInterfaceState)
{
Servatrice_InMemoryDatabaseInterface database;
EXPECT_EQ(1, database.getNextGameId());
EXPECT_EQ(2, database.getNextGameId());
EXPECT_EQ(1, database.getNextReplayId());
}
} // namespace