#!/usr/bin/env python from __future__ import print_function import sys from os import environ from os.path import dirname, join, pardir, abspath, exists import subprocess import nose def fetch_es_repo(): # user is manually setting YAML dir, don't tamper with it if 'TEST_ES_YAML_DIR' in environ: return repo_path = environ.get( 'TEST_ES_REPO', abspath(join(dirname(__file__), pardir, pardir, 'elasticsearch')) ) # no repo if not exists(repo_path) or not exists(join(repo_path, '.git')): print('No elasticsearch repo found...') # set YAML DIR to empty to skip yaml tests environ['TEST_ES_YAML_DIR'] = '' return # set YAML test dir environ['TEST_ES_YAML_DIR'] = join(repo_path, 'rest-api-spec', 'src', 'main', 'resources', 'rest-api-spec', 'test') # fetching of yaml tests disabled, we'll run with what's there if environ.get('TEST_ES_NOFETCH', False): return from test_elasticsearch.test_server import get_client from test_elasticsearch.test_cases import SkipTest # find out the sha of the running es try: es = get_client() sha = es.info()['version']['build_hash'] except (SkipTest, KeyError): print('No running elasticsearch >1.X server...') return # fetch new commits to be sure... print('Fetching elasticsearch repo...') subprocess.check_call('cd %s && git fetch https://github.com/elasticsearch/elasticsearch.git' % repo_path, shell=True) # reset to the version fron info() subprocess.check_call('cd %s && git reset --hard %s' % (repo_path, sha), shell=True) def run_all(argv=None): sys.exitfunc = lambda: sys.stderr.write('Shutting down....\n') # fetch yaml tests fetch_es_repo() # always insert coverage when running tests if argv is None: argv = [ 'nosetests', '--with-xunit', '--with-xcoverage', '--cover-package=elasticsearch', '--cover-erase', '--logging-filter=elasticsearch', '--logging-level=DEBUG', '--verbose', '--with-id', ] nose.run_exit( argv=argv, defaultTest=abspath(dirname(__file__)) ) if __name__ == '__main__': run_all(sys.argv)