test: route S3 mock server messages through logger
The S3 mock server (introduced in 5a96549c) currently prints its status
messages directly to stdout, which can be distracting when reviewing test
results. For example:
```console
$ ./test.py --verbose --mode debug object_store/test_backup::test_simple_backup
Found 1 tests.
Starting S3 mock server on ('127.226.51.1', 2012)
================================================================================
[N/TOTAL] SUITE MODE RESULT TEST
------------------------------------------------------------------------------
[1/1] object_store debug [ PASS ] object_store.test_backup.1 5.99s
Stopping S3 mock server
-------------------------
CPU utilization: 6.5%
```
Move these messages to use proper logging to give developers more control
over their visibility:
- Make logger parameter mandatory in MockS3Server constructor
- Route "Stopping S3 mock server" message through the provided logger
- Add --log-level option to the standalone mock server launcher
The message is now hidden:
```console
$ ./test.py --verbose --mode debug --save-log-on-success object_store/test_backup::test_simple_backup
Found 1 tests.
================================================================================
[N/TOTAL] SUITE MODE RESULT TEST
------------------------------------------------------------------------------
[1/1] object_store debug [ PASS ] object_store.test_backup.1 6.25s
------------------------------------------------------------------------------
CPU utilization: 5.5%
```
Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
Closes scylladb/scylladb#21384
This commit is contained in:
committed by
Pavel Emelyanov
parent
78ceaeabca
commit
f8221b960f
@@ -182,7 +182,7 @@ class InjectingHandler(BaseHTTPRequestHandler):
|
||||
# pytest kicks in. In addition, it is possible just to start this server using another script - `start_mock.py` to
|
||||
# run it locally to provide mocking functionality for tests executed during development process
|
||||
class MockS3Server:
|
||||
def __init__(self, host, port, logger=None):
|
||||
def __init__(self, host, port, logger):
|
||||
self.req_states = LRUCache(10000)
|
||||
handler = partial(InjectingHandler, self.req_states, logger)
|
||||
self.server = ThreadingHTTPServer((host, port), handler)
|
||||
@@ -191,20 +191,21 @@ class MockS3Server:
|
||||
self.server.timeout = 10000
|
||||
self.server.socket.settimeout(10000)
|
||||
self.server.socket.listen(1000)
|
||||
self.logger = logger
|
||||
self.is_running = False
|
||||
os.environ['MOCK_S3_SERVER_PORT'] = f'{port}'
|
||||
os.environ['MOCK_S3_SERVER_HOST'] = host
|
||||
|
||||
async def start(self):
|
||||
if not self.is_running:
|
||||
print(f'Starting S3 mock server on {self.server.server_address}')
|
||||
self.logger.info('Starting S3 mock server on %s', self.server.server_address)
|
||||
loop = asyncio.get_running_loop()
|
||||
self.server_thread = loop.run_in_executor(None, self.server.serve_forever)
|
||||
self.is_running = True
|
||||
|
||||
async def stop(self):
|
||||
if self.is_running:
|
||||
print('Stopping S3 mock server')
|
||||
self.logger.info('Stopping S3 mock server')
|
||||
self.server.shutdown()
|
||||
await self.server_thread
|
||||
self.is_running = False
|
||||
@@ -215,5 +216,5 @@ class MockS3Server:
|
||||
while self.is_running:
|
||||
await asyncio.sleep(1)
|
||||
except Exception as e:
|
||||
print(f"Server error: {e}")
|
||||
self.logger.error("Server error: %s", e)
|
||||
await self.stop()
|
||||
|
||||
@@ -3,6 +3,7 @@ import asyncio
|
||||
import sys
|
||||
import signal
|
||||
import argparse
|
||||
import logging
|
||||
from s3_server_mock import MockS3Server
|
||||
|
||||
|
||||
@@ -10,8 +11,12 @@ async def run():
|
||||
parser = argparse.ArgumentParser(description="Start S3 mock server")
|
||||
parser.add_argument('--host', default='127.0.0.1')
|
||||
parser.add_argument('--port', type=int, default=2012)
|
||||
parser.add_argument('--log-level', default=logging.WARNING,
|
||||
choices=logging.getLevelNamesMapping().keys(),
|
||||
help="Set log level")
|
||||
args = parser.parse_args()
|
||||
server = MockS3Server(args.host, args.port)
|
||||
logging.basicConfig(level=args.log_level)
|
||||
server = MockS3Server(args.host, args.port, logging.getLogger('s3-server'))
|
||||
|
||||
print('Starting S3 mock server')
|
||||
await server.start()
|
||||
|
||||
Reference in New Issue
Block a user