Files
scylladb/test/nodetool/test_compact.py
Botond Dénes 764e9a344d test/nodetool: nodetool(): add check_return_code param
When set to false, the returncode is not checked, this is left to the
caller. This in turn allows for checking the expected and unexpected
requests which is not checked when the nodetool process fails.
This is used by utils._do_check_nodetool_fails_with(), so that expected
and unexpected requests are checked even for failed invocations.

Some test need adjustment to the stricter checks.
2024-03-27 04:18:19 -04:00

104 lines
5.0 KiB
Python

#
# Copyright 2023-present ScyllaDB
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
from rest_api_mock import expected_request
import utils
import pytest
# `scylla nodetool compact` invokes the newly added global compact api
def test_all_keyspaces(nodetool, scylla_only):
nodetool("compact", expected_requests=[
expected_request("POST", "/storage_service/compact")])
# The java-based `nodetool compact` lists all keyspaces and invoke the keyspace_compaction api on each of them
def test_all_keyspaces_jmx(nodetool, cassandra_only):
nodetool("compact", expected_requests=[
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST", "/storage_service/keyspace_compaction/system"),
expected_request("POST", "/storage_service/keyspace_compaction/system_schema")])
def test_keyspace(nodetool):
nodetool("compact", "system_schema", expected_requests=[
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST", "/storage_service/keyspace_compaction/system_schema")])
def test_nonexistent_keyspace(nodetool):
utils.check_nodetool_fails_with(
nodetool,
("compact", "non_existent_ks"),
{"expected_requests": [
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system"])]},
["nodetool: Keyspace [non_existent_ks] does not exist.",
"error processing arguments: keyspace non_existent_ks does not exist"])
def test_table(nodetool):
nodetool("compact", "system_schema", "columns", expected_requests=[
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST", "/storage_service/keyspace_compaction/system_schema", params={"cf": "columns"})])
nodetool("compact", "system_schema", "columns", "computed_columns", expected_requests=[
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST",
"/storage_service/keyspace_compaction/system_schema",
params={"cf": "columns,computed_columns"})])
def test_split_output_compatibility_argument(nodetool):
dummy_request = [
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST", "/storage_service/keyspace_compaction/system_schema")]
nodetool("compact", "system_schema", "-s", expected_requests=dummy_request)
nodetool("compact", "system_schema", "--split-output", expected_requests=dummy_request)
def test_token_range_compatibility_argument(nodetool):
dummy_request = [
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST", "/storage_service/keyspace_compaction/system_schema")]
nodetool("compact", "system_schema", "-st", "0", "-et", "1000", expected_requests=dummy_request)
nodetool("compact", "system_schema", "--start-token", "0", "--end-token", "1000", expected_requests=dummy_request)
def test_user_defined(nodetool, scylla_only):
utils.check_nodetool_fails_with(
nodetool,
("compact", "--user-defined", "/var/lib/scylla/data/system/local-7ad54392bcdd35a684174e047860b377/"
"me-3g8w_11cg_4317k2ppfb6d5vgp0w-big-Data.db"),
{},
["error processing arguments: --user-defined flag is unsupported"])
@pytest.mark.parametrize("flush", ("true", "false"))
# The `--flush-memtables` option to `nodetool compact` is available only with `scylla_nodetool`
def test_keyspace_flush_memtables_option(nodetool, scylla_only, flush):
params = {"flush_memtables": flush}
nodetool("compact", "system_schema", "--flush-memtables", flush, expected_requests=[
expected_request("GET", "/storage_service/keyspaces", multiple=expected_request.MULTIPLE,
response=["system", "system_schema"]),
expected_request("POST", "/storage_service/keyspace_compaction/system_schema", params=params)])
@pytest.mark.parametrize("flush", ("true", "false"))
# The `--flush-memtables` option to `nodetool compact` is available only with `scylla_nodetool`
def test_all_keyspaces_flush_memtables_option(nodetool, scylla_only, flush):
params = {"flush_memtables": flush}
nodetool("compact", "--flush-memtables", flush, expected_requests=[
expected_request("POST", "/storage_service/compact", params=params)])