Use universalasync library to make test.py async code compatible with synchronous code of dtest/ccm Also, copied unmodified error_example_test.py from dtest as an example. Run the test in `dev` mode only.
71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
#
|
|
# Copyright (C) 2025-present ScyllaDB
|
|
#
|
|
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
#
|
|
|
|
"""
|
|
Home for functionality that provides context managers, and anything related to
|
|
making those context managers function.
|
|
"""
|
|
|
|
import logging
|
|
from contextlib import contextmanager
|
|
|
|
from test.cluster.dtest.tools.env import ALLOW_NOISY_LOGGING
|
|
|
|
|
|
@contextmanager
|
|
def log_filter(log_id, expected_strings=None):
|
|
"""
|
|
Context manager which allows silencing logs until exit.
|
|
Log records matching expected_strings will be filtered out of logging.
|
|
If expected_strings is not provided, everything is filtered for that log.
|
|
"""
|
|
logger = logging.getLogger(log_id)
|
|
log_filter = _make_filter_class(expected_strings)
|
|
logger.addFilter(log_filter)
|
|
yield
|
|
if log_filter.records_silenced > 0:
|
|
print("Logs were filtered to remove messages deemed unimportant, total count: %d" % log_filter.records_silenced)
|
|
logger.removeFilter(log_filter)
|
|
|
|
|
|
def _make_filter_class(expected_strings):
|
|
"""
|
|
Builds an anon-ish filtering class and returns it.
|
|
|
|
Returns a logfilter if filtering should take place, otherwise a nooplogfilter.
|
|
|
|
We're just using a class here as a one-off object with a filter method, for
|
|
use as a filter object on the desired log.
|
|
"""
|
|
|
|
class NoopLogFilter:
|
|
records_silenced = 0
|
|
|
|
@classmethod
|
|
def filter(cls, record):
|
|
return True
|
|
|
|
class LogFilter:
|
|
records_silenced = 0
|
|
|
|
@classmethod
|
|
def filter(cls, record):
|
|
if expected_strings is None:
|
|
cls.records_silenced += 1
|
|
return False
|
|
|
|
for s in expected_strings:
|
|
if s in record.msg or s in record.name:
|
|
cls.records_silenced += 1
|
|
return False
|
|
|
|
return True
|
|
|
|
if ALLOW_NOISY_LOGGING:
|
|
return NoopLogFilter
|
|
else:
|
|
return LogFilter
|