Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable DB tests via ScyllaDB service #1103

Merged
merged 4 commits into from
Jan 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/code_coverage/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ runs:
- name: Run tests
shell: bash
run: |
build/clio_tests --gtest_filter="-BackendCassandraBaseTest*:BackendCassandraTest*:BackendCassandraFactoryTestWithDB*"
build/clio_tests --backend_host=scylladb

- name: Run gcovr
shell: bash
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@ jobs:
runs-on: [self-hosted, "${{ matrix.os }}"]
container: ${{ matrix.container }}

services:
scylladb:
image: ${{ (matrix.code_coverage) && 'scylladb/scylla' || '' }}
options: >-
--health-cmd "cqlsh -e 'describe cluster'"
--health-interval 10s
--health-timeout 5s
--health-retries 5

steps:
- uses: actions/checkout@v4
with:
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ if (tests)
unittests/ProfilerTests.cpp
unittests/JsonUtilTests.cpp
unittests/DOSGuardTests.cpp
unittests/util/TestGlobals.cpp
unittests/util/AssertTests.cpp
unittests/util/BatchingTests.cpp
unittests/util/TestObject.cpp
Expand Down
10 changes: 9 additions & 1 deletion unittests/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,23 @@
//==============================================================================

#include "util/TerminationHandler.h"
#include "util/TestGlobals.h"
#include "util/prometheus/Prometheus.h"

#include <gtest/gtest.h>

/*
* Supported custom command line options for clio_tests:
* --backend_host=<host> - sets the cassandra/scylladb host for backend tests
* --backend_keyspace=<keyspace> - sets the cassandra/scylladb keyspace for backend tests
*/
int
main(int argc, char** argv)
main(int argc, char* argv[])
{
util::setTerminationHandler();
PrometheusService::init();
testing::InitGoogleTest(&argc, argv);
TestGlobals::instance().parse(argc, argv);

return RUN_ALL_TESTS();
}
14 changes: 7 additions & 7 deletions unittests/data/BackendFactoryTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "data/BackendFactory.h"
#include "data/cassandra/Handle.h"
#include "util/Fixtures.h"
#include "util/TestGlobals.h"
#include "util/config/Config.h"

#include <boost/json/parse.hpp>
Expand All @@ -30,7 +31,6 @@
#include <string>

namespace {
constexpr auto contactPoints = "127.0.0.1";
constexpr auto keyspace = "factory_test";
} // namespace

Expand Down Expand Up @@ -62,7 +62,7 @@ class BackendCassandraFactoryTestWithDB : public BackendCassandraFactoryTest {
{
BackendCassandraFactoryTest::TearDown();
// drop the keyspace for next test
data::cassandra::Handle const handle{contactPoints};
data::cassandra::Handle const handle{TestGlobals::instance().backendHost};
EXPECT_TRUE(handle.connect());
handle.execute("DROP KEYSPACE " + std::string{keyspace});
}
Expand Down Expand Up @@ -116,7 +116,7 @@ TEST_F(BackendCassandraFactoryTestWithDB, CreateCassandraBackend)
}}
}}
}})",
contactPoints,
TestGlobals::instance().backendHost,
keyspace
))};

Expand All @@ -128,7 +128,7 @@ TEST_F(BackendCassandraFactoryTestWithDB, CreateCassandraBackend)
EXPECT_FALSE(backend->fetchLedgerRange());

// insert range table
data::cassandra::Handle const handle{contactPoints};
data::cassandra::Handle const handle{TestGlobals::instance().backendHost};
EXPECT_TRUE(handle.connect());
handle.execute(fmt::format("INSERT INTO {}.ledger_range (is_latest, sequence) VALUES (False, 100)", keyspace));
handle.execute(fmt::format("INSERT INTO {}.ledger_range (is_latest, sequence) VALUES (True, 500)", keyspace));
Expand Down Expand Up @@ -159,7 +159,7 @@ TEST_F(BackendCassandraFactoryTestWithDB, CreateCassandraBackendReadOnlyWithEmpt
}}
}}
}})",
contactPoints,
TestGlobals::instance().backendHost,
keyspace
))};
EXPECT_THROW(make_Backend(cfg), std::runtime_error);
Expand All @@ -180,7 +180,7 @@ TEST_F(BackendCassandraFactoryTestWithDB, CreateCassandraBackendReadOnlyWithDBRe
}}
}}
}})",
contactPoints,
TestGlobals::instance().backendHost,
keyspace
))};

Expand All @@ -197,7 +197,7 @@ TEST_F(BackendCassandraFactoryTestWithDB, CreateCassandraBackendReadOnlyWithDBRe
}}
}}
}})",
contactPoints,
TestGlobals::instance().backendHost,
keyspace
))};

Expand Down
14 changes: 5 additions & 9 deletions unittests/data/cassandra/BackendTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "util/LedgerUtils.h"
#include "util/Random.h"
#include "util/StringUtils.h"
#include "util/TestGlobals.h"
#include "util/config/Config.h"

#include <boost/asio/impl/spawn.hpp>
Expand Down Expand Up @@ -68,11 +69,6 @@ namespace json = boost::json;

using namespace data::cassandra;

namespace {
constexpr auto contactPoints = "127.0.0.1";
constexpr auto keyspace = "clio_test";
} // namespace

class BackendCassandraTest : public SyncAsioContextTest {
protected:
Config cfg{json::parse(fmt::format(
Expand All @@ -81,8 +77,8 @@ class BackendCassandraTest : public SyncAsioContextTest {
"keyspace": "{}",
"replication_factor": 1
}})JSON",
contactPoints,
keyspace
TestGlobals::instance().backendHost,
TestGlobals::instance().backendKeyspace
))};
SettingsProvider settingsProvider{cfg, 0};

Expand All @@ -101,9 +97,9 @@ class BackendCassandraTest : public SyncAsioContextTest {
backend.reset();

// drop the keyspace for next test
Handle const handle{contactPoints};
Handle const handle{TestGlobals::instance().backendHost};
EXPECT_TRUE(handle.connect());
handle.execute("DROP KEYSPACE " + std::string{keyspace});
handle.execute("DROP KEYSPACE " + TestGlobals::instance().backendKeyspace);
}

std::default_random_engine randomEngine{0};
Expand Down
19 changes: 10 additions & 9 deletions unittests/data/cassandra/BaseTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "data/cassandra/Handle.h"
#include "data/cassandra/Types.h"
#include "util/Fixtures.h"
#include "util/TestGlobals.h"

#include <cassandra.h>
#include <fmt/core.h>
Expand Down Expand Up @@ -107,7 +108,7 @@ class BackendCassandraBaseTest : public NoLoggerFixture {

TEST_F(BackendCassandraBaseTest, ConnectionSuccess)
{
Handle const handle{"127.0.0.1"};
Handle const handle{TestGlobals::instance().backendHost};
auto const f = handle.asyncConnect();
auto const res = f.await();

Expand Down Expand Up @@ -144,7 +145,7 @@ TEST_F(BackendCassandraBaseTest, ConnectionFailTimeout)

TEST_F(BackendCassandraBaseTest, FutureCallback)
{
Handle const handle{"127.0.0.1"};
Handle const handle{TestGlobals::instance().backendHost};
ASSERT_TRUE(handle.connect());

auto const statement = handle.prepare("SELECT keyspace_name FROM system_schema.keyspaces").bind();
Expand All @@ -165,7 +166,7 @@ TEST_F(BackendCassandraBaseTest, FutureCallback)

TEST_F(BackendCassandraBaseTest, FutureCallbackSurviveMove)
{
Handle const handle{"127.0.0.1"};
Handle const handle{TestGlobals::instance().backendHost};
ASSERT_TRUE(handle.connect());

auto const statement = handle.prepare("SELECT keyspace_name FROM system_schema.keyspaces").bind();
Expand All @@ -192,7 +193,7 @@ TEST_F(BackendCassandraBaseTest, FutureCallbackSurviveMove)

TEST_F(BackendCassandraBaseTest, KeyspaceManipulation)
{
Handle const handle{"127.0.0.1"};
Handle const handle{TestGlobals::instance().backendHost};
std::string keyspace = "test_keyspace_manipulation";

{
Expand Down Expand Up @@ -244,7 +245,7 @@ TEST_F(BackendCassandraBaseTest, CreateTableWithStrings)
"fifth",
};

auto handle = createHandle("127.0.0.1", "test");
auto handle = createHandle(TestGlobals::instance().backendHost, "test");
auto q1 = fmt::format(
R"(
CREATE TABLE IF NOT EXISTS strings (hash blob PRIMARY KEY, sequence bigint)
Expand Down Expand Up @@ -309,7 +310,7 @@ TEST_F(BackendCassandraBaseTest, BatchInsert)
"fifth",
};

auto handle = createHandle("127.0.0.1", "test");
auto handle = createHandle(TestGlobals::instance().backendHost, "test");
auto const q1 = fmt::format(
R"(
CREATE TABLE IF NOT EXISTS strings (hash blob PRIMARY KEY, sequence bigint)
Expand Down Expand Up @@ -368,7 +369,7 @@ TEST_F(BackendCassandraBaseTest, BatchInsertAsync)
"fifth",
};

auto handle = createHandle("127.0.0.1", "test");
auto handle = createHandle(TestGlobals::instance().backendHost, "test");
auto const q1 = fmt::format(
R"(
CREATE TABLE IF NOT EXISTS strings (hash blob PRIMARY KEY, sequence bigint)
Expand Down Expand Up @@ -414,7 +415,7 @@ TEST_F(BackendCassandraBaseTest, BatchInsertAsync)

TEST_F(BackendCassandraBaseTest, AlterTableAddColumn)
{
auto handle = createHandle("127.0.0.1", "test");
auto handle = createHandle(TestGlobals::instance().backendHost, "test");
auto const q1 = fmt::format(
R"(
CREATE TABLE IF NOT EXISTS strings (hash blob PRIMARY KEY, sequence bigint)
Expand All @@ -432,7 +433,7 @@ TEST_F(BackendCassandraBaseTest, AlterTableAddColumn)

TEST_F(BackendCassandraBaseTest, AlterTableMoveToNewTable)
{
auto handle = createHandle("127.0.0.1", "test");
auto handle = createHandle(TestGlobals::instance().backendHost, "test");
prepStringsTable(handle);

auto const newTable = fmt::format(
Expand Down
56 changes: 56 additions & 0 deletions unittests/util/TestGlobals.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
//------------------------------------------------------------------------------
/*
This file is part of clio: https://github.com/XRPLF/clio
Copyright (c) 2024, the clio developers.

Permission to use, copy, modify, and 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.
*/
//==============================================================================

#include "util/TestGlobals.h"

#include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp>
#include <boost/program_options/positional_options.hpp>
#include <boost/program_options/value_semantic.hpp>
#include <boost/program_options/variables_map.hpp>

TestGlobals&
TestGlobals::instance()
{
static TestGlobals inst;
return inst;
}

void
TestGlobals::parse(int argc, char* argv[])
{
namespace po = boost::program_options;

// clang-format off
po::options_description description("Clio UT options");
description.add_options()
("backend_host", po::value<std::string>()->default_value(TestGlobals::backendHost),
"sets the cassandra/scylladb host for backend tests")
("backend_keyspace", po::value<std::string>()->default_value(TestGlobals::backendKeyspace),
"sets the cassandra/scylladb keyspace for backend tests")
;
// clang-format on

po::variables_map parsed;
po::store(po::command_line_parser(argc, argv).options(description).run(), parsed);
po::notify(parsed);

backendHost = parsed["backend_host"].as<std::string>();
backendKeyspace = parsed["backend_keyspace"].as<std::string>();
}
45 changes: 45 additions & 0 deletions unittests/util/TestGlobals.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//------------------------------------------------------------------------------
/*
This file is part of clio: https://github.com/XRPLF/clio
Copyright (c) 2024, the clio developers.

Permission to use, copy, modify, and 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.
*/
//==============================================================================

#pragma once

#include <string>

/*
* Contains global variables for use in tests.
*/
struct TestGlobals {
std::string backendHost = "127.0.0.1";
std::string backendKeyspace = "clio_test";

static TestGlobals&
instance();

void
parse(int argc, char* argv[]);

private:
TestGlobals() = default;
TestGlobals(TestGlobals const&) = delete;
TestGlobals(TestGlobals&&) = delete;
TestGlobals&
operator=(TestGlobals const&) = delete;
TestGlobals&
operator=(TestGlobals&&) = delete;
};