Files
secondo/Algebras/DBService2/SecondoDatabaseAdapterTest.cpp
2026-01-23 17:03:45 +08:00

135 lines
3.9 KiB
C++

/*
1.1.1 Class Implementation
----
This file is part of SECONDO.
Copyright (C) 2017,
Faculty of Mathematics and Computer Science,
Database Systems for New Applications.
SECONDO is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
SECONDO 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with SECONDO; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
----
*/
#include "catch.hh" // https://github.com/catchorg/Catch2
#include "Algebras/DBService2/SecondoDatabaseAdapter.hpp"
using namespace DBService;
using namespace std;
using Catch::Matchers::Contains;
TEST_CASE("DBService::SecondoDatabaseAdapter")
{
const string test_db_name = "dbservice_test";
shared_ptr<DatabaseAdapter> adapter = SecondoDatabaseAdapter::getInstance();
SECTION("It should confirm that an non-existing database doesn't exists")
{
REQUIRE(adapter->doesDatabaseExist("nonexistenddatabase") == false);
}
SECTION("It should confirm that an existing database exists")
{
REQUIRE(adapter->doesDatabaseExist(test_db_name) == true);
}
SECTION("A database should be open as the test operator requires an open \
database to be invoked") {
REQUIRE(adapter->isDatabaseOpen() == true);
}
SECTION("Given an open database it should be possible to close the database")
{
REQUIRE(adapter->isDatabaseOpen() == true);
adapter->closeDatabase();
REQUIRE(adapter->isDatabaseOpen() == false);
// Now there's no database open anymore!
}
SECTION("Without an open database, the attempt to close it should succeed \
silently") {
REQUIRE(adapter->isDatabaseOpen() == false);
adapter->closeDatabase();
REQUIRE(adapter->isDatabaseOpen() == false);
}
SECTION("Without an open database, it should be possible to open the \
database") {
REQUIRE(adapter->isDatabaseOpen() == false);
adapter->openDatabase(test_db_name);
REQUIRE(adapter->isDatabaseOpen() == true);
}
SECTION("Given an open database, it should success to open the \
database again") {
REQUIRE(adapter->isDatabaseOpen() == true);
adapter->openDatabase(test_db_name);
REQUIRE(adapter->isDatabaseOpen() == true);
}
SECTION("Given an open database, it should success to open the \
database again") {
REQUIRE(adapter->isDatabaseOpen() == true);
adapter->openDatabase(test_db_name);
REQUIRE(adapter->isDatabaseOpen() == true);
}
SECTION("Given an open database, it should success to open the database \
again") {
REQUIRE(adapter->isDatabaseOpen() == true);
adapter->openDatabase(test_db_name);
REQUIRE(adapter->isDatabaseOpen() == true);
}
// The following test has been disabled as the check has been
// disabled for performance reasons.
// SECTION("It should raise an exception attempting to open a non-existing \
// database") {
// REQUIRE_THROWS_WITH(adapter->openDatabase("nonexistenddatabase"),
// Contains("doesn't exist"));
// }
SECTION("Database lifecycle tests") {
// exoticdatabase73829 -> crash
string exoticDatabaseName = "db73829";
SECTION("Creating a database") {
REQUIRE(adapter->doesDatabaseExist(exoticDatabaseName) == false);
REQUIRE_NOTHROW(adapter->createDatabase(exoticDatabaseName));
REQUIRE(adapter->doesDatabaseExist(exoticDatabaseName) == true);
}
SECTION("Deleting a database") {
REQUIRE(adapter->doesDatabaseExist(exoticDatabaseName) == true);
REQUIRE_NOTHROW(adapter->deleteDatabase(exoticDatabaseName));
REQUIRE(adapter->doesDatabaseExist(exoticDatabaseName) == false);
}
}
}