From: Tommi Virtanen Date: Mon, 5 Dec 2011 18:07:25 +0000 (-0800) Subject: Rename "testrados" and "testswift" tasks to not begin with "test". X-Git-Tag: v10.2.8~13^2~2^2~4^2~4^2~5^2~3^2~1^2~1^2~7 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=9598e47949ba65030c722947dc433e38875b1bd6;p=ceph-ci.git Rename "testrados" and "testswift" tasks to not begin with "test". Anything "test*" looks like a unit test, and shouldn't be used for actual code. --- diff --git a/swift.py b/swift.py new file mode 100644 index 00000000000..65ff7df8648 --- /dev/null +++ b/swift.py @@ -0,0 +1,214 @@ +from cStringIO import StringIO +from configobj import ConfigObj +import base64 +import contextlib +import logging +import os + +from teuthology import misc as teuthology +from teuthology import contextutil +from ..orchestra import run +from ..orchestra.connection import split_user + +log = logging.getLogger(__name__) + + +@contextlib.contextmanager +def download(ctx, config): + assert isinstance(config, list) + log.info('Downloading swift...') + for client in config: + ctx.cluster.only(client).run( + args=[ + 'git', 'clone', + 'https://github.com/NewDreamNetwork/swift.git', + '/tmp/cephtest/swift', + ], + ) + try: + yield + finally: + log.info('Removing swift...') + for client in config: + ctx.cluster.only(client).run( + args=[ + 'rm', + '-rf', + '/tmp/cephtest/swift', + ], + ) + +def _config_user(testswift_conf, account, user, suffix): + testswift_conf['func_test'].setdefault('account{s}'.format(s=suffix), account); + testswift_conf['func_test'].setdefault('username{s}'.format(s=suffix), user); + testswift_conf['func_test'].setdefault('email{s}'.format(s=suffix), '{account}+test@test.test'.format(account=account)) + testswift_conf['func_test'].setdefault('display_name{s}'.format(s=suffix), 'Mr. {account} {user}'.format(account=account, user=user)) + testswift_conf['func_test'].setdefault('password{s}'.format(s=suffix), base64.b64encode(os.urandom(40))) + +@contextlib.contextmanager +def create_users(ctx, config): + assert isinstance(config, dict) + log.info('Creating rgw users...') + for client in config['clients']: + testswift_conf = config['testswift_conf'][client] + for user, suffix in [('foo', ''), ('bar', '2')]: + _config_user(testswift_conf, '{user}.{client}'.format(user=user, client=client), user, suffix) + ctx.cluster.only(client).run( + args=[ + 'LD_LIBRARY_PATH=/tmp/cephtest/binary/usr/local/lib', + '/tmp/cephtest/enable-coredump', + '/tmp/cephtest/binary/usr/local/bin/ceph-coverage', + '/tmp/cephtest/archive/coverage', + '/tmp/cephtest/binary/usr/local/bin/radosgw-admin', + '-c', '/tmp/cephtest/ceph.conf', + 'user', 'create', + '--subuser', '{account}:{user}'.format(account=testswift_conf['func_test']['account{s}'.format(s=suffix)],user=user), + '--display-name', testswift_conf['func_test']['display_name{s}'.format(s=suffix)], + '--secret', testswift_conf['func_test']['password{s}'.format(s=suffix)], + '--email', testswift_conf['func_test']['email{s}'.format(s=suffix)], + '--key-type', 'swift', + ], + ) + yield + + +@contextlib.contextmanager +def configure(ctx, config): + assert isinstance(config, dict) + log.info('Configuring testswift...') + for client, properties in config['clients'].iteritems(): + print 'client={c}'.format(c=client) + print 'config={c}'.format(c=config) + testswift_conf = config['testswift_conf'][client] + if properties is not None and 'rgw_server' in properties: + host = None + for target, roles in zip(ctx.config['targets'].iterkeys(), ctx.config['roles']): + log.info('roles: ' + str(roles)) + log.info('target: ' + str(target)) + if properties['rgw_server'] in roles: + _, host = split_user(target) + assert host is not None, "Invalid client specified as the rgw_server" + testswift_conf['func_test']['auth_host'] = host + else: + testswift_conf['func_test']['auth_host'] = 'localhost' + + print client + (remote,) = ctx.cluster.only(client).remotes.keys() + remote.run( + args=[ + 'cd', + '/tmp/cephtest/swift', + run.Raw('&&'), + './bootstrap', + ], + ) + conf_fp = StringIO() + testswift_conf.write(conf_fp) + teuthology.write_file( + remote=remote, + path='/tmp/cephtest/archive/testswift.{client}.conf'.format(client=client), + data=conf_fp.getvalue(), + ) + yield + + +@contextlib.contextmanager +def run_tests(ctx, config): + assert isinstance(config, dict) + for client, client_config in config.iteritems(): + args = [ + 'SWIFT_TEST_CONFIG_FILE=/tmp/cephtest/archive/testswift.{client}.conf'.format(client=client), + '/tmp/cephtest/swift/virtualenv/bin/nosetests', + '-w', + '/tmp/cephtest/swift/test/functional', + '-v', + '-a', '!fails_on_rgw', + ] + if client_config is not None and 'extra_args' in client_config: + args.extend(client_config['extra_args']) + + ctx.cluster.only(client).run( + args=args, + ) + yield + + +@contextlib.contextmanager +def task(ctx, config): + """ + Run the testswift suite against rgw. + + To run all tests on all clients:: + + tasks: + - ceph: + - rgw: + - testswift: + + To restrict testing to particular clients:: + + tasks: + - ceph: + - rgw: [client.0] + - testswift: [client.0] + + To run against a server on client.1:: + + tasks: + - ceph: + - rgw: [client.1] + - testswift: + client.0: + rgw_server: client.1 + + To pass extra arguments to nose (e.g. to run a certain test):: + + tasks: + - ceph: + - rgw: [client.0] + - testswift: + client.0: + extra_args: ['test.functional.tests:TestFileUTF8', '-m', 'testCopy'] + client.1: + extra_args: ['--exclude', 'TestFile'] + """ + assert config is None or isinstance(config, list) \ + or isinstance(config, dict), \ + "task testswift only supports a list or dictionary for configuration" + all_clients = ['client.{id}'.format(id=id_) + for id_ in teuthology.all_roles_of_type(ctx.cluster, 'client')] + if config is None: + config = all_clients + if isinstance(config, list): + config = dict.fromkeys(config) + clients = config.keys() + + print 'clients={c}'.format(c=clients) + + testswift_conf = {} + for client in clients: + testswift_conf[client] = ConfigObj( + indent_type='', + infile={ + 'func_test': + { + 'auth_port' : 7280, + 'auth_ssl' : 'no', + 'auth_prefix' : '/auth/', + }, + } + ) + + with contextutil.nested( + lambda: download(ctx=ctx, config=clients), + lambda: create_users(ctx=ctx, config=dict( + clients=clients, + testswift_conf=testswift_conf, + )), + lambda: configure(ctx=ctx, config=dict( + clients=config, + testswift_conf=testswift_conf, + )), + lambda: run_tests(ctx=ctx, config=config), + ): + yield diff --git a/testswift.py b/testswift.py deleted file mode 100644 index 65ff7df8648..00000000000 --- a/testswift.py +++ /dev/null @@ -1,214 +0,0 @@ -from cStringIO import StringIO -from configobj import ConfigObj -import base64 -import contextlib -import logging -import os - -from teuthology import misc as teuthology -from teuthology import contextutil -from ..orchestra import run -from ..orchestra.connection import split_user - -log = logging.getLogger(__name__) - - -@contextlib.contextmanager -def download(ctx, config): - assert isinstance(config, list) - log.info('Downloading swift...') - for client in config: - ctx.cluster.only(client).run( - args=[ - 'git', 'clone', - 'https://github.com/NewDreamNetwork/swift.git', - '/tmp/cephtest/swift', - ], - ) - try: - yield - finally: - log.info('Removing swift...') - for client in config: - ctx.cluster.only(client).run( - args=[ - 'rm', - '-rf', - '/tmp/cephtest/swift', - ], - ) - -def _config_user(testswift_conf, account, user, suffix): - testswift_conf['func_test'].setdefault('account{s}'.format(s=suffix), account); - testswift_conf['func_test'].setdefault('username{s}'.format(s=suffix), user); - testswift_conf['func_test'].setdefault('email{s}'.format(s=suffix), '{account}+test@test.test'.format(account=account)) - testswift_conf['func_test'].setdefault('display_name{s}'.format(s=suffix), 'Mr. {account} {user}'.format(account=account, user=user)) - testswift_conf['func_test'].setdefault('password{s}'.format(s=suffix), base64.b64encode(os.urandom(40))) - -@contextlib.contextmanager -def create_users(ctx, config): - assert isinstance(config, dict) - log.info('Creating rgw users...') - for client in config['clients']: - testswift_conf = config['testswift_conf'][client] - for user, suffix in [('foo', ''), ('bar', '2')]: - _config_user(testswift_conf, '{user}.{client}'.format(user=user, client=client), user, suffix) - ctx.cluster.only(client).run( - args=[ - 'LD_LIBRARY_PATH=/tmp/cephtest/binary/usr/local/lib', - '/tmp/cephtest/enable-coredump', - '/tmp/cephtest/binary/usr/local/bin/ceph-coverage', - '/tmp/cephtest/archive/coverage', - '/tmp/cephtest/binary/usr/local/bin/radosgw-admin', - '-c', '/tmp/cephtest/ceph.conf', - 'user', 'create', - '--subuser', '{account}:{user}'.format(account=testswift_conf['func_test']['account{s}'.format(s=suffix)],user=user), - '--display-name', testswift_conf['func_test']['display_name{s}'.format(s=suffix)], - '--secret', testswift_conf['func_test']['password{s}'.format(s=suffix)], - '--email', testswift_conf['func_test']['email{s}'.format(s=suffix)], - '--key-type', 'swift', - ], - ) - yield - - -@contextlib.contextmanager -def configure(ctx, config): - assert isinstance(config, dict) - log.info('Configuring testswift...') - for client, properties in config['clients'].iteritems(): - print 'client={c}'.format(c=client) - print 'config={c}'.format(c=config) - testswift_conf = config['testswift_conf'][client] - if properties is not None and 'rgw_server' in properties: - host = None - for target, roles in zip(ctx.config['targets'].iterkeys(), ctx.config['roles']): - log.info('roles: ' + str(roles)) - log.info('target: ' + str(target)) - if properties['rgw_server'] in roles: - _, host = split_user(target) - assert host is not None, "Invalid client specified as the rgw_server" - testswift_conf['func_test']['auth_host'] = host - else: - testswift_conf['func_test']['auth_host'] = 'localhost' - - print client - (remote,) = ctx.cluster.only(client).remotes.keys() - remote.run( - args=[ - 'cd', - '/tmp/cephtest/swift', - run.Raw('&&'), - './bootstrap', - ], - ) - conf_fp = StringIO() - testswift_conf.write(conf_fp) - teuthology.write_file( - remote=remote, - path='/tmp/cephtest/archive/testswift.{client}.conf'.format(client=client), - data=conf_fp.getvalue(), - ) - yield - - -@contextlib.contextmanager -def run_tests(ctx, config): - assert isinstance(config, dict) - for client, client_config in config.iteritems(): - args = [ - 'SWIFT_TEST_CONFIG_FILE=/tmp/cephtest/archive/testswift.{client}.conf'.format(client=client), - '/tmp/cephtest/swift/virtualenv/bin/nosetests', - '-w', - '/tmp/cephtest/swift/test/functional', - '-v', - '-a', '!fails_on_rgw', - ] - if client_config is not None and 'extra_args' in client_config: - args.extend(client_config['extra_args']) - - ctx.cluster.only(client).run( - args=args, - ) - yield - - -@contextlib.contextmanager -def task(ctx, config): - """ - Run the testswift suite against rgw. - - To run all tests on all clients:: - - tasks: - - ceph: - - rgw: - - testswift: - - To restrict testing to particular clients:: - - tasks: - - ceph: - - rgw: [client.0] - - testswift: [client.0] - - To run against a server on client.1:: - - tasks: - - ceph: - - rgw: [client.1] - - testswift: - client.0: - rgw_server: client.1 - - To pass extra arguments to nose (e.g. to run a certain test):: - - tasks: - - ceph: - - rgw: [client.0] - - testswift: - client.0: - extra_args: ['test.functional.tests:TestFileUTF8', '-m', 'testCopy'] - client.1: - extra_args: ['--exclude', 'TestFile'] - """ - assert config is None or isinstance(config, list) \ - or isinstance(config, dict), \ - "task testswift only supports a list or dictionary for configuration" - all_clients = ['client.{id}'.format(id=id_) - for id_ in teuthology.all_roles_of_type(ctx.cluster, 'client')] - if config is None: - config = all_clients - if isinstance(config, list): - config = dict.fromkeys(config) - clients = config.keys() - - print 'clients={c}'.format(c=clients) - - testswift_conf = {} - for client in clients: - testswift_conf[client] = ConfigObj( - indent_type='', - infile={ - 'func_test': - { - 'auth_port' : 7280, - 'auth_ssl' : 'no', - 'auth_prefix' : '/auth/', - }, - } - ) - - with contextutil.nested( - lambda: download(ctx=ctx, config=clients), - lambda: create_users(ctx=ctx, config=dict( - clients=clients, - testswift_conf=testswift_conf, - )), - lambda: configure(ctx=ctx, config=dict( - clients=config, - testswift_conf=testswift_conf, - )), - lambda: run_tests(ctx=ctx, config=config), - ): - yield