mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-28 04:06:59 +00:00
the temporary directory holding the log file collecting the scylla subprocess's output is specified by the test itself, and it is `test_tempdir`. but unfortunately, cql-pytest/run.py is not aware of this. so `cleanup_all()` is not able to print out the logging messages at exit. as, please note, cql-pytest/run.py always collect "log" file under the directory created using `pid_to_dir()` where pid is the spawned subprocesses. but `object_store/run` uses the main process's pid for its reusable tempdir. so, with this change, we also register a cleanup func to printout the logging message when the test exits. Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
96 lines
3.1 KiB
Python
Executable File
96 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Use the run.py library from ../cql-pytest:
|
|
import sys
|
|
sys.path.insert(1, sys.path[0] + '/../cql-pytest')
|
|
import run
|
|
|
|
import atexit
|
|
import os
|
|
import requests
|
|
import shutil
|
|
|
|
print('Scylla is: ' + run.find_scylla() + '.')
|
|
success = True
|
|
|
|
ssl = '--ssl' in sys.argv
|
|
if ssl:
|
|
cmd = run.run_scylla_ssl_cql_cmd
|
|
check_cql = run.check_ssl_cql
|
|
else:
|
|
cmd = run.run_scylla_cmd
|
|
check_cql = run.check_cql
|
|
|
|
test_tempdir = run.pid_to_dir(os.getpid())
|
|
os.mkdir(test_tempdir)
|
|
|
|
def get_tempdir(pid):
|
|
return test_tempdir
|
|
|
|
def teardown(pid):
|
|
print('Kill scylla')
|
|
sys.stdout.flush()
|
|
log = run.abort_run_with_dir(pid, test_tempdir)
|
|
shutil.copyfileobj(log, sys.stdout.buffer)
|
|
|
|
print(f'Start scylla (dir={test_tempdir}')
|
|
pid = run.run_with_generated_dir(cmd, get_tempdir)
|
|
atexit.register(lambda: teardown(pid))
|
|
|
|
ip = run.pid_to_ip(pid)
|
|
run.wait_for_services(pid, [ lambda: check_cql(ip) ])
|
|
s3_server_address = os.environ['S3_SERVER_ADDRESS_FOR_TEST']
|
|
s3_public_bucket = os.environ['S3_PUBLIC_BUCKET_FOR_TEST']
|
|
|
|
print(f'Create keyspace (minio listening at {s3_server_address})')
|
|
cluster = run.get_cql_cluster(ip)
|
|
conn = cluster.connect()
|
|
conn.execute("CREATE KEYSPACE test_ks WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor': '1' } AND STORAGE = { 'type': 'S3', 'endpoint': '" + f'{s3_server_address}' + ":9000', 'bucket': '" + f'{s3_public_bucket}' + "' };")
|
|
conn.execute("CREATE TABLE test_ks.test_cf ( name text primary key, value text );")
|
|
conn.execute("INSERT INTO test_ks.test_cf ( name, value ) VALUES ('0', 'zero');")
|
|
conn.execute("INSERT INTO test_ks.test_cf ( name, value ) VALUES ('1', 'one');")
|
|
conn.execute("INSERT INTO test_ks.test_cf ( name, value ) VALUES ('2', 'two');")
|
|
res = conn.execute("SELECT * FROM test_ks.test_cf;")
|
|
|
|
r = requests.post(f'http://{ip}:10000/storage_service/keyspace_flush/test_ks', timeout=60)
|
|
if r.status_code != 200:
|
|
print(f'Error flushing keyspace: {r}')
|
|
success = False
|
|
|
|
# Check that the ownership table is populated properly
|
|
res = conn.execute("SELECT * FROM system.sstables;")
|
|
for row in res:
|
|
if not row.location.startswith(test_tempdir):
|
|
print(f'Unexpected entry location in registry: {row.location}')
|
|
success = False
|
|
if row.status != 'sealed':
|
|
print(f'Unexpected entry status in registry: {row.status}')
|
|
success = False
|
|
|
|
cluster.shutdown()
|
|
|
|
print('Restart scylla')
|
|
pid = run.restart_with_dir(pid, cmd, test_tempdir)
|
|
ip = run.pid_to_ip(pid)
|
|
run.wait_for_services(pid, [ lambda: check_cql(ip) ])
|
|
|
|
cluster = run.get_cql_cluster(ip)
|
|
conn = cluster.connect()
|
|
res = conn.execute("SELECT * FROM test_ks.test_cf;")
|
|
want_res = { '0': 'zero', '1': 'one', '2': 'two' }
|
|
have_res = { x.name: x.value for x in res }
|
|
if want_res != have_res:
|
|
print(f'Unexpected table content: {have_res}')
|
|
success = False
|
|
|
|
print('Drop table')
|
|
conn.execute("DROP TABLE test_ks.test_cf;")
|
|
# Check that the ownership table is de-populated
|
|
res = conn.execute("SELECT * FROM system.sstables;")
|
|
for row in res:
|
|
print(f'Unexpected entry in registry: {row.location} {row.status}')
|
|
success = False
|
|
|
|
cluster.shutdown()
|
|
|
|
sys.exit(0 if success else 1)
|