Files
scylladb/test/object_store/run
Kefu Chai c2488fc516 test: object_store: specify timeout
just in case scylla does not behave as expected, so we can identify the
issue and error out sooner without hang forever until the whole test
timesout. this issue was identified by pylint,
see https://pylint.readthedocs.io/en/latest/user_guide/messages/warning/missing-timeout.html

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-04-22 00:38:37 +08:00

89 lines
2.9 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 os
import requests
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
print(f'Start scylla (dir={test_tempdir}')
pid = run.run_with_generated_dir(cmd, get_tempdir)
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()
print('Kill scylla')
run.abort_run_with_dir(pid, test_tempdir)
sys.exit(0 if success else 1)