From: Casey Bodley Date: Fri, 21 Apr 2017 18:47:00 +0000 (-0400) Subject: qa/rgw: add rgw_multisite_tests task to run tests X-Git-Tag: v12.1.0~10^2~50^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4722d1d92081307d53346bccd9d4fb6273b9af17;p=ceph.git qa/rgw: add rgw_multisite_tests task to run tests Signed-off-by: Casey Bodley --- diff --git a/qa/tasks/rgw_multisite_tests.py b/qa/tasks/rgw_multisite_tests.py new file mode 100644 index 000000000000..1bb07ca594af --- /dev/null +++ b/qa/tasks/rgw_multisite_tests.py @@ -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