mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
qa/rgw: add rgw_multisite_tests task to run tests
Signed-off-by: Casey Bodley <cbodley@redhat.com>
This commit is contained in:
parent
b6d86be2c5
commit
4722d1d920
88
qa/tasks/rgw_multisite_tests.py
Normal file
88
qa/tasks/rgw_multisite_tests.py
Normal file
@ -0,0 +1,88 @@
|
||||
"""
|
||||
rgw multisite testing
|
||||
"""
|
||||
import logging
|
||||
import sys
|
||||
import nose.core
|
||||
import nose.config
|
||||
|
||||
from teuthology.exceptions import ConfigError
|
||||
from teuthology.task import Task
|
||||
from teuthology import misc
|
||||
|
||||
from rgw_multi import multisite, tests
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class RGWMultisiteTests(Task):
|
||||
"""
|
||||
Runs the rgw_multi tests against a multisite configuration created by the
|
||||
rgw-multisite task. Tests are run with nose, using any additional 'args'
|
||||
provided.
|
||||
|
||||
- rgw-multisite-tests:
|
||||
args:
|
||||
- tasks.rgw_multi.tests:test_object_sync
|
||||
|
||||
"""
|
||||
def __init__(self, ctx, config):
|
||||
super(RGWMultisiteTests, self).__init__(ctx, config)
|
||||
|
||||
def setup(self):
|
||||
super(RGWMultisiteTests, self).setup()
|
||||
|
||||
if not self.ctx.rgw_multisite:
|
||||
raise ConfigError('rgw-multisite-tests must run after the rgw-multisite task')
|
||||
realm = self.ctx.rgw_multisite.realm
|
||||
master_zone = realm.meta_master_zone()
|
||||
|
||||
# create the test user
|
||||
log.info('creating test user..')
|
||||
user = multisite.User('rgw-multisite-test-user')
|
||||
user.create(master_zone, ['--display-name', 'Multisite Test User',
|
||||
'--gen-access-key', '--gen-secret'])
|
||||
|
||||
tests.init_multi(realm, user)
|
||||
tests.realm_meta_checkpoint(realm)
|
||||
|
||||
overrides = self.ctx.config.get('overrides', {})
|
||||
misc.deep_merge(self.config, overrides.get('rgw-multisite-tests', {}))
|
||||
|
||||
def begin(self):
|
||||
# extra arguments for nose can be passed as a string or list
|
||||
extra_args = self.config.get('args', [])
|
||||
if not isinstance(extra_args, list):
|
||||
extra_args = [extra_args]
|
||||
argv = [__name__] + extra_args
|
||||
|
||||
log.info("running rgw multisite tests on '%s' with args=%r",
|
||||
tests.__name__, extra_args)
|
||||
|
||||
# run nose tests in the rgw_multi.tests module
|
||||
conf = nose.config.Config(stream=get_log_stream(), verbosity=2)
|
||||
result = nose.run(defaultTest=tests.__name__, argv=argv, config=conf)
|
||||
if not result:
|
||||
raise RuntimeError('rgw multisite test failures')
|
||||
|
||||
def get_log_stream():
|
||||
""" return a log stream for nose output """
|
||||
# XXX: this is a workaround for IOErrors when nose writes to stderr,
|
||||
# copied from vstart_runner.py
|
||||
class LogStream(object):
|
||||
def __init__(self):
|
||||
self.buffer = ""
|
||||
|
||||
def write(self, data):
|
||||
self.buffer += data
|
||||
if "\n" in self.buffer:
|
||||
lines = self.buffer.split("\n")
|
||||
for line in lines[:-1]:
|
||||
log.info(line)
|
||||
self.buffer = lines[-1]
|
||||
|
||||
def flush(self):
|
||||
pass
|
||||
|
||||
return LogStream()
|
||||
|
||||
task = RGWMultisiteTests
|
Loading…
Reference in New Issue
Block a user