def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) qiime_test_data_dir = opts.qiime_test_data_dir qiime_scripts_dir = opts.qiime_scripts_dir working_dir = opts.working_dir verbose = opts.verbose tests = opts.tests if tests != None: tests = tests.split(',') failure_log_fp = opts.failure_log_fp result_summary, num_failures = run_script_usage_tests( qiime_test_data_dir, qiime_scripts_dir, working_dir, verbose=verbose, tests=tests, failure_log_fp=failure_log_fp) if verbose: print result_summary
def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) qiime_test_data_dir = opts.qiime_test_data_dir qiime_scripts_dir = opts.qiime_scripts_dir working_dir = opts.working_dir verbose = opts.verbose tests = opts.tests if tests != None: tests = [e.rstrip('/') for e in tests.split(',')] failure_log_fp = opts.failure_log_fp result_summary, num_failures = run_script_usage_tests( qiime_test_data_dir, qiime_scripts_dir, working_dir, verbose=verbose, tests=tests, failure_log_fp=failure_log_fp) if verbose: print result_summary
def main(): option_parser, opts, args = parse_command_line_parameters(**script_info) if opts.suppress_unit_tests and opts.suppress_script_tests and opts.suppress_script_usage_tests: option_parser.error("You're suppressing all three test types. Nothing to run.") test_dir = abspath(dirname(__file__)) unittest_good_pattern = re.compile("OK\s*$") application_not_found_pattern = re.compile("ApplicationNotFoundError") python_name = "python" bad_tests = [] missing_application_tests = [] # Run through all of QIIME's unit tests, and keep track of any files which # fail unit tests. if not opts.suppress_unit_tests: unittest_names = [] if not opts.unittest_glob: for root, dirs, files in walk(test_dir): for name in files: if name.startswith("test_") and name.endswith(".py"): unittest_names.append(join(root, name)) else: for fp in glob(opts.unittest_glob): fn = split(fp)[1] if fn.startswith("test_") and fn.endswith(".py"): unittest_names.append(abspath(fp)) unittest_names.sort() for unittest_name in unittest_names: print "Testing %s:\n" % unittest_name command = "%s %s -v" % (python_name, unittest_name) stdout, stderr, return_value = qiime_system_call(command) print stderr if not unittest_good_pattern.search(stderr): if application_not_found_pattern.search(stderr): missing_application_tests.append(unittest_name) else: bad_tests.append(unittest_name) bad_scripts = [] if not opts.suppress_script_tests: # Run through all of QIIME's scripts, and pass -h to each one. If the # resulting stdout does not being with the Usage text, that is an # indicator of something being wrong with the script. Issues that would # cause that are bad import statements in the script, SyntaxErrors, or # other failures prior to running qiime.util.parse_command_line_parameters. try: scripts_dir = get_qiime_scripts_dir() script_directory_found = True except AssertionError: script_directory_found = False if script_directory_found: script_names = [] script_names = glob("%s/*py" % scripts_dir) script_names.sort() for script_name in script_names: script_good_pattern = re.compile("^Usage: %s" % split(script_name)[1]) print "Testing %s." % script_name command = "%s %s -h" % (python_name, script_name) stdout, stderr, return_value = qiime_system_call(command) if not script_good_pattern.search(stdout): bad_scripts.append(script_name) num_script_usage_example_failures = 0 qiime_test_data_dir = qiime_config["qiime_test_data_dir"] if not opts.suppress_script_usage_tests and qiime_test_data_dir != None: # Run the script usage testing functionality script_usage_result_summary, num_script_usage_example_failures = run_script_usage_tests( qiime_test_data_dir=qiime_test_data_dir, qiime_scripts_dir=qiime_config["qiime_scripts_dir"], working_dir=qiime_config["temp_dir"], verbose=True, tests=None, # runs all failure_log_fp=None, force_overwrite=True, ) print "==============\nResult summary\n==============" if not opts.suppress_unit_tests: print "\nUnit test result summary\n------------------------\n" if bad_tests: print "\nFailed the following unit tests.\n%s" % "\n".join(bad_tests) if missing_application_tests: print "\nFailed the following unit tests, in part or whole due " + "to missing external applications.\nDepending on the QIIME features " + "you plan to use, this may not be critical.\n%s" % "\n".join( missing_application_tests ) if not (missing_application_tests or bad_tests): print "\nAll unit tests passed.\n\n" if not opts.suppress_script_tests: print "\nBasic script test result summary\n--------------------------------\n" if not script_directory_found: print "Critical error: Failed to test scripts because the script directory could not be found.\n The most likely explanation for this failure is that you've installed QIIME using setup.py, and forgot to specify the qiime_scripts_dir in your qiime_config file. This value shoud be set either to the directory you provided for --install-scripts, or /usr/local/bin if no value was provided to --install-scripts." else: if bad_scripts: print "Failed the following basic script tests.\n%s" % "\n".join(bad_scripts) else: print "All basic script tests passed successfully.\n" qiime_test_data_dir_exists = True if not opts.suppress_script_usage_tests: if qiime_test_data_dir: print "\nScript usage test result summary\n------------------------------------\n" print script_usage_result_summary else: print "\nCould not run script usage tests because qiime_test_data_dir is not defined in your qiime_config." qiime_test_data_dir_exists = False print "" # If any of the unit tests, script tests, or script usage tests fail, or if # we have any missing application errors or a missing QIIME test data dir # if script usage tests weren't suppressed, use return code 1 (as python's # unittest module does to indicate one or more failures). return_code = 1 if ( len(bad_tests) == 0 and len(missing_application_tests) == 0 and len(bad_scripts) == 0 and num_script_usage_example_failures == 0 and qiime_test_data_dir_exists ): return_code = 0 return return_code
def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) if (opts.suppress_unit_tests and opts.suppress_script_usage_tests): option_parser.error( "You're suppressing both test types. Nothing to run.") test_dir = abspath(dirname(__file__)) unittest_good_pattern = re.compile('OK\s*$') application_not_found_pattern = re.compile('ApplicationNotFoundError') python_name = 'python' bad_tests = [] missing_application_tests = [] # Run through all of QIIME's unit tests, and keep track of any files which # fail unit tests. if not opts.suppress_unit_tests: unittest_names = [] if not opts.unittest_glob: for root, dirs, files in walk(test_dir): for name in files: if name.startswith('test_') and name.endswith('.py'): unittest_names.append(join(root, name)) else: for fp in glob(opts.unittest_glob): fn = split(fp)[1] if fn.startswith('test_') and fn.endswith('.py'): unittest_names.append(abspath(fp)) unittest_names.sort() for unittest_name in unittest_names: print "Testing %s:\n" % unittest_name command = '%s %s -v' % (python_name, unittest_name) stdout, stderr, return_value = qiime_system_call(command) print stderr if not unittest_good_pattern.search(stderr): if application_not_found_pattern.search(stderr): missing_application_tests.append(unittest_name) else: bad_tests.append(unittest_name) qiime_test_data_dir = join(get_qiime_project_dir(), 'qiime_test_data') qiime_test_data_dir_exists = exists(qiime_test_data_dir) if not opts.suppress_script_usage_tests and qiime_test_data_dir_exists: if opts.script_usage_tests is not None: script_usage_tests = opts.script_usage_tests.split(',') else: script_usage_tests = None # Run the script usage testing functionality script_usage_result_summary, has_script_usage_example_failures = \ run_script_usage_tests( test_data_dir=qiime_test_data_dir, scripts_dir=get_qiime_scripts_dir(), working_dir=qiime_config['temp_dir'], verbose=True, tests=script_usage_tests, force_overwrite=True, timeout=240) print "==============\nResult summary\n==============" if not opts.suppress_unit_tests: print "\nUnit test result summary\n------------------------\n" if bad_tests: print "\nFailed the following unit tests.\n%s" % '\n'.join(bad_tests) if missing_application_tests: print "\nFailed the following unit tests, in part or whole due " +\ "to missing external applications.\nDepending on the QIIME features " +\ "you plan to use, this may not be critical.\n%s"\ % '\n'.join(missing_application_tests) if not (missing_application_tests or bad_tests): print "\nAll unit tests passed.\n\n" if not opts.suppress_script_usage_tests: if qiime_test_data_dir_exists: print "\nScript usage test result summary\n--------------------------------\n" print script_usage_result_summary else: print "\nCould not run script usage tests because the directory %s does not exist." % qiime_test_data_dir print "" # If script usage tests weren't suppressed, the qiime_test_data dir must # exist and we can't have any failures. script_usage_tests_success = (opts.suppress_script_usage_tests or (qiime_test_data_dir_exists and not has_script_usage_example_failures)) # If any of the unit tests or script usage tests fail, or if we have any # missing application errors, use return code 1 (as python's unittest # module does to indicate one or more failures). return_code = 1 if (len(bad_tests) == 0 and len(missing_application_tests) == 0 and script_usage_tests_success): return_code = 0 return return_code
def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) if (opts.suppress_unit_tests and opts.suppress_script_usage_tests): option_parser.error("You're suppressing both test types. Nothing to run.") test_dir = abspath(dirname(__file__)) unittest_good_pattern = re.compile('OK\s*$') application_not_found_pattern = re.compile('ApplicationNotFoundError') python_name = 'python' bad_tests = [] missing_application_tests = [] # Run through all of PICRUSt's unit tests, and keep track of any files which # fail unit tests. if not opts.suppress_unit_tests: unittest_names = [] if not opts.unittest_glob: for root, dirs, files in walk(test_dir): for name in files: if name.startswith('test_') and name.endswith('.py'): unittest_names.append(join(root,name)) else: for fp in glob(opts.unittest_glob): fn = split(fp)[1] if fn.startswith('test_') and fn.endswith('.py'): unittest_names.append(abspath(fp)) unittest_names.sort() for unittest_name in unittest_names: print "Testing %s:\n" % unittest_name command = '%s %s -v' % (python_name, unittest_name) stdout, stderr, return_value = system_call(command) print stderr if not unittest_good_pattern.search(stderr): if application_not_found_pattern.search(stderr): missing_application_tests.append(unittest_name) else: bad_tests.append(unittest_name) if not opts.suppress_script_usage_tests: try: from qiime.test import run_script_usage_tests except ImportError: print "QIIME not installed so not running script tests." opts.suppress_script_usage_tests=True else: test_data_dir = join(get_picrust_project_dir(),'picrust_test_data') scripts_dir = join(get_picrust_project_dir(),'scripts') if opts.script_usage_tests != None: script_usage_tests = opts.script_usage_tests.split(',') else: script_usage_tests = None # Run the script usage testing functionality script_usage_result_summary, num_script_usage_example_failures = \ run_script_usage_tests( qiime_test_data_dir=test_data_dir, qiime_scripts_dir=scripts_dir, working_dir='/tmp/', verbose=True, tests=script_usage_tests, failure_log_fp=None, force_overwrite=True) print "==============\nResult summary\n==============" if not opts.suppress_unit_tests: print "\nUnit test result summary\n------------------------\n" if bad_tests: print "\nFailed the following unit tests.\n%s" % '\n'.join(bad_tests) if missing_application_tests: print "\nFailed the following unit tests, in part or whole due "+\ "to missing external applications.\nDepending on the PICRUSt features "+\ "you plan to use, this may not be critical.\n%s"\ % '\n'.join(missing_application_tests) if not (missing_application_tests or bad_tests): print "\nAll unit tests passed.\n\n" if not opts.suppress_script_usage_tests: print "\nScript usage test result summary\n------------------------------------\n" print script_usage_result_summary print "" # If script usage tests weren't suppressed,we can't have any failures. script_usage_tests_success = (opts.suppress_script_usage_tests or num_script_usage_example_failures == 0) # If any of the unit tests or script usage tests fail, or if we have any # missing application errors, use return code 1 (as python's unittest # module does to indicate one or more failures). return_code = 1 if (len(bad_tests) == 0 and len(missing_application_tests) == 0 and script_usage_tests_success): return_code = 0 return return_code
def main(): option_parser, opts, args = parse_command_line_parameters(**script_info) unittest_glob = opts.unittest_glob temp_filepath = opts.temp_filepath script_usage_tests = opts.script_usage_tests suppress_unit_tests = opts.suppress_unit_tests suppress_script_usage_tests = opts.suppress_script_usage_tests # since the test data is in the tests folder just add scripts_test_data emperor_test_data_dir = join(abspath(dirname(__file__)), 'scripts_test_data/') # offer the option for the user to pass the scripts dir from the command # line since there is no other way to get the scripts dir. If not provided # the base structure of the repository will be assumed. Note that for both # cases we are using absolute paths, to avoid unwanted failures. if opts.emperor_scripts_dir == None: emperor_scripts_dir = abspath(join(get_emperor_project_dir(), 'scripts/')) else: emperor_scripts_dir = abspath(opts.emperor_scripts_dir) # make a sanity check if (suppress_unit_tests and suppress_script_usage_tests): option_parser.error("All tests have been suppresed. Nothing to run.") test_dir = abspath(dirname(__file__)) unittest_good_pattern = re.compile('OK\s*$') application_not_found_pattern = re.compile('ApplicationNotFoundError') python_name = 'python' bad_tests = [] missing_application_tests = [] # Run through all of Emperor's unit tests, and keep track of any files which # fail unit tests, note that these are the unit tests only if not suppress_unit_tests: unittest_names = [] if not unittest_glob: for root, dirs, files in walk(test_dir): for name in files: if name.startswith('test_') and name.endswith('.py'): unittest_names.append(join(root,name)) else: for fp in glob(unittest_glob): fn = split(fp)[1] if fn.startswith('test_') and fn.endswith('.py'): unittest_names.append(abspath(fp)) unittest_names.sort() for unittest_name in unittest_names: print "Testing %s:\n" % unittest_name command = '%s %s -v' % (python_name, unittest_name) stdout, stderr, return_value = qiime_system_call(command) print stderr if not unittest_good_pattern.search(stderr): if application_not_found_pattern.search(stderr): missing_application_tests.append(unittest_name) else: bad_tests.append(unittest_name) script_usage_failures = 0 # choose to run some of the script usage tests or all the available ones if not suppress_script_usage_tests and exists(emperor_test_data_dir) and\ exists(emperor_scripts_dir): if script_usage_tests != None: script_tests = script_usage_tests.split(',') else: script_tests = None # Run the script usage testing functionality script_usage_result_summary, script_usage_failures = \ run_script_usage_tests(qiime_test_data_dir=emperor_test_data_dir, qiime_scripts_dir=emperor_scripts_dir, working_dir=temp_filepath, verbose=True, tests=script_tests, failure_log_fp=None, force_overwrite=False) print "==============\nResult summary\n==============" if not suppress_unit_tests: print "\nUnit test result summary\n------------------------\n" if bad_tests: print "\nFailed the following unit tests.\n%s" %'\n'.join(bad_tests) if missing_application_tests: print "\nFailed the following unit tests, in part or whole due "+\ "to missing external applications.\nDepending on the Emperor "+\ "features you plan to use, this may not be critical.\n%s"\ % '\n'.join(missing_application_tests) if not(missing_application_tests or bad_tests): print "\nAll unit tests passed.\n\n" if not suppress_script_usage_tests: if exists(emperor_test_data_dir) and exists(emperor_scripts_dir): print "\nScript usage test result summary"+\ "\n------------------------------------\n" print script_usage_result_summary else: print ("\nCould not run script usage tests.\nThe Emperor scripts " "directory could not be automatically located, try supplying " " it manually using the --emperor_scripts_dir option.") # In case there were no failures of any type, exit with a return code of 0 return_code = 1 if (len(bad_tests) == 0 and len(missing_application_tests) == 0 and script_usage_failures == 0): return_code = 0 return return_code
def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) if (opts.suppress_unit_tests and \ opts.suppress_script_tests and \ opts.suppress_script_usage_tests): option_parser.error( "You're suppressing all three test types. Nothing to run.") test_dir = abspath(dirname(__file__)) unittest_good_pattern = re.compile('OK\s*$') application_not_found_pattern = re.compile('ApplicationNotFoundError') python_name = 'python' bad_tests = [] missing_application_tests = [] # Run through all of QIIME's unit tests, and keep track of any files which # fail unit tests. if not opts.suppress_unit_tests: unittest_names = [] if not opts.unittest_glob: for root, dirs, files in walk(test_dir): for name in files: if name.startswith('test_') and name.endswith('.py'): unittest_names.append(join(root, name)) else: for fp in glob(opts.unittest_glob): fn = split(fp)[1] if fn.startswith('test_') and fn.endswith('.py'): unittest_names.append(abspath(fp)) unittest_names.sort() for unittest_name in unittest_names: print "Testing %s:\n" % unittest_name command = '%s %s -v' % (python_name, unittest_name) stdout, stderr, return_value = qiime_system_call(command) print stderr if not unittest_good_pattern.search(stderr): if application_not_found_pattern.search(stderr): missing_application_tests.append(unittest_name) else: bad_tests.append(unittest_name) bad_scripts = [] if not opts.suppress_script_tests: # Run through all of QIIME's scripts, and pass -h to each one. If the # resulting stdout does not being with the Usage text, that is an # indicator of something being wrong with the script. Issues that would # cause that are bad import statements in the script, SyntaxErrors, or # other failures prior to running qiime.util.parse_command_line_parameters. try: scripts_dir = get_qiime_scripts_dir() script_directory_found = True except AssertionError: script_directory_found = False if script_directory_found: script_names = [] script_names = glob('%s/*py' % scripts_dir) script_names.sort() for script_name in script_names: script_good_pattern = re.compile('^Usage: %s' % split(script_name)[1]) print "Testing %s." % script_name command = '%s %s -h' % (python_name, script_name) stdout, stderr, return_value = qiime_system_call(command) if not script_good_pattern.search(stdout): bad_scripts.append(script_name) num_script_usage_example_failures = 0 qiime_test_data_dir = qiime_config['qiime_test_data_dir'] if not opts.suppress_script_usage_tests and qiime_test_data_dir != None: # Run the script usage testing functionality script_usage_result_summary, num_script_usage_example_failures = \ run_script_usage_tests( qiime_test_data_dir=qiime_test_data_dir, qiime_scripts_dir=qiime_config['qiime_scripts_dir'], working_dir=qiime_config['temp_dir'], verbose=True, tests=None, # runs all failure_log_fp=None, force_overwrite=True) print "==============\nResult summary\n==============" if not opts.suppress_unit_tests: print "\nUnit test result summary\n------------------------\n" if bad_tests: print "\nFailed the following unit tests.\n%s" % '\n'.join( bad_tests) if missing_application_tests: print "\nFailed the following unit tests, in part or whole due "+\ "to missing external applications.\nDepending on the QIIME features "+\ "you plan to use, this may not be critical.\n%s"\ % '\n'.join(missing_application_tests) if not (missing_application_tests or bad_tests): print "\nAll unit tests passed.\n\n" if not opts.suppress_script_tests: print "\nBasic script test result summary\n--------------------------------\n" if not script_directory_found: print "Critical error: Failed to test scripts because the script directory could not be found.\n The most likely explanation for this failure is that you've installed QIIME using setup.py, and forgot to specify the qiime_scripts_dir in your qiime_config file. This value shoud be set either to the directory you provided for --install-scripts, or /usr/local/bin if no value was provided to --install-scripts." else: if bad_scripts: print "Failed the following basic script tests.\n%s" % '\n'.join( bad_scripts) else: print "All basic script tests passed successfully.\n" qiime_test_data_dir_exists = True if not opts.suppress_script_usage_tests: if qiime_test_data_dir: print "\nScript usage test result summary\n------------------------------------\n" print script_usage_result_summary else: print "\nCould not run script usage tests because qiime_test_data_dir is not defined in your qiime_config." qiime_test_data_dir_exists = False print "" # If any of the unit tests, script tests, or script usage tests fail, or if # we have any missing application errors or a missing QIIME test data dir # if script usage tests weren't suppressed, use return code 1 (as python's # unittest module does to indicate one or more failures). return_code = 1 if (len(bad_tests) == 0 and len(missing_application_tests) == 0 and len(bad_scripts) == 0 and num_script_usage_example_failures == 0 and qiime_test_data_dir_exists): return_code = 0 return return_code