Files
scylladb/test/nodetool/test_stop.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

77 lines
3.0 KiB
Python

#
# Copyright 2023-present ScyllaDB
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
from rest_api_mock import expected_request
import utils
def check_compaction_type(nodetool, compaction_type):
nodetool(f"stop", compaction_type, expected_requests=[
expected_request("POST", "/compaction_manager/stop_compaction", params={"type": compaction_type})])
# Test compaction-types supported by both C* and Scylla
def test_stop_common(nodetool):
for compaction_type in ("COMPACTION", "CLEANUP", "SCRUB", "RESHAPE"):
check_compaction_type(nodetool, compaction_type)
# Even though our docs says it is supported, cassandra-nodetool doesn't know about RESHARD
def test_stop_reshard(nodetool, scylla_only):
check_compaction_type(nodetool, "RESHARD")
# Cassandra calls UPGRADE, UPGRADE_SSTABLES, which the scylla-code doesn't recognize
def test_stop_upgrade(nodetool, scylla_only):
check_compaction_type(nodetool, "UPGRADE")
# Recognized by scylla, but not supported
def test_stop_unsupported(nodetool):
for compaction_type in ("VALIDATION", "INDEX_BUILD"):
req = expected_request(
"POST",
"/compaction_manager/stop_compaction",
params={"type": compaction_type},
multiple=expected_request.ANY,
response={"code": 500,
"message": f"std::runtime_error (Compaction type {compaction_type} is unsupported)"},
response_status=500)
utils.check_nodetool_fails_with(
nodetool,
("stop", compaction_type),
{"expected_requests": [req]},
["nodetool: Scylla API server HTTP POST to URL 'compaction_manager/stop_compaction' failed:"
f" std::runtime_error (Compaction type {compaction_type} is unsupported)",
f"error processing arguments: invalid compaction type: {compaction_type}"])
def test_stop_unknown(nodetool):
utils.check_nodetool_fails_with(
nodetool,
("stop", "FOO"),
{},
["nodetool: compaction_type: can not convert \"FOO\" to a OperationType",
"error processing arguments: invalid compaction type: FOO"])
def test_stop_no_type(nodetool, scylla_only):
utils.check_nodetool_fails_with(
nodetool,
("stop",),
{},
["error processing arguments: missing required parameter: compaction_type"])
# This is not implemented, nodetool logs a message and exits
def test_stop_by_id(nodetool, scylla_only):
expected_error = "error processing arguments: stopping compactions by id is not implemented"
utils.check_nodetool_fails_with(nodetool, ("stop", "-id", "123"), {}, [expected_error])
utils.check_nodetool_fails_with(nodetool, ("stop", "-id=123"), {}, [expected_error])
utils.check_nodetool_fails_with(nodetool, ("stop", "--id", "123"), {}, [expected_error])
utils.check_nodetool_fails_with(nodetool, ("stop", "--id=123"), {}, [expected_error])