Mercurial > repos > bcclaywell > argo_navis
diff venv/lib/python2.7/site-packages/planemo/galaxy_test/actions.py @ 0:d67268158946 draft
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
author | bcclaywell |
---|---|
date | Mon, 12 Oct 2015 17:43:33 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/venv/lib/python2.7/site-packages/planemo/galaxy_test/actions.py Mon Oct 12 17:43:33 2015 -0400 @@ -0,0 +1,214 @@ +import os + +import click + +from . import structures as test_structures +from planemo.io import info, warn +from planemo import galaxy_run +from planemo.reports import build_report + + +from galaxy.tools.deps.commands import shell + +XUNIT_UPGRADE_MESSAGE = ("This version of Galaxy does not support xUnit - " + "please update to newest development brach.") +NO_XUNIT_MESSAGE = ("Cannot locate xUnit report option for tests - update " + "Galaxy for more detailed breakdown.") +NO_JSON_MESSAGE = ("Cannot locate json report option for tests - update " + "Galaxy for more detailed breakdown.") +NO_TESTS_MESSAGE = "No tests were executed - see Galaxy output for details." +ALL_TESTS_PASSED_MESSAGE = "All %d test(s) executed passed." +PROBLEM_COUNT_MESSAGE = ("There were problems with %d test(s) - out of %d " + "test(s) executed. See %s for detailed breakdown.") +GENERIC_PROBLEMS_MESSAGE = ("One or more tests failed. See %s for detailed " + "breakdown.") +GENERIC_TESTS_PASSED_MESSAGE = "No failing tests encountered." + + +def run_in_config(ctx, config, **kwds): + config_directory = config.config_directory + html_report_file = kwds["test_output"] + + job_output_files = kwds.get("job_output_files", None) + if job_output_files is None: + job_output_files = os.path.join(config_directory, "jobfiles") + + xunit_supported, xunit_report_file = __xunit_state(kwds, config) + structured_report_file = __structured_report_file(kwds, config) + + info("Testing using galaxy_root %s", config.galaxy_root) + # TODO: Allow running dockerized Galaxy here instead. + server_ini = os.path.join(config_directory, "galaxy.ini") + config.env["GALAXY_CONFIG_FILE"] = server_ini + config.env["GALAXY_TEST_VERBOSE_ERRORS"] = "true" + config.env["GALAXY_TEST_SAVE"] = job_output_files + + cd_to_galaxy_command = "cd %s" % config.galaxy_root + test_cmd = test_structures.GalaxyTestCommand( + html_report_file, + xunit_report_file, + structured_report_file, + failed=kwds.get("failed", False), + installed=kwds.get("installed", False), + ).build() + cmd = "; ".join([ + cd_to_galaxy_command, + galaxy_run.ACTIVATE_COMMAND, # TODO: this should be moved to + # run_tests.sh to match run.sh. + test_cmd, + ]) + action = "Testing tools" + return_code = galaxy_run.run_galaxy_command( + ctx, + cmd, + config.env, + action + ) + if kwds.get('update_test_data', False): + update_cp_args = (job_output_files, config.test_data_dir) + shell('cp -r "%s"/* "%s"' % update_cp_args) + + if xunit_report_file and (not os.path.exists(xunit_report_file)): + warn(NO_XUNIT_MESSAGE) + xunit_report_file = None + + test_results = test_structures.GalaxyTestResults( + structured_report_file, + xunit_report_file, + html_report_file, + return_code, + ) + + try: + test_data = test_results.structured_data + + if 'test_output' in kwds: + with open(kwds['test_output'], 'w') as handle: + handle.write(build_report.build_report(test_data)) + + for kw_name in ('markdown', 'text'): + if 'test_output_%s' % kw_name in kwds: + with open(kwds['test_output_%s' % kw_name], 'w') as handle: + handle.write(build_report.build_report(test_data, report_type=kw_name)) + + except Exception: + pass + + __handle_summary( + test_results, + **kwds + ) + + return return_code + + +def __handle_summary( + test_results, + **kwds +): + summary_style = kwds.get("summary") + if summary_style == "none": + return + + if test_results.has_details: + __summarize_tests_full( + test_results, + **kwds + ) + else: + if test_results.exit_code: + warn(GENERIC_PROBLEMS_MESSAGE % test_results.output_html_path) + else: + info(GENERIC_TESTS_PASSED_MESSAGE) + + +def __summarize_tests_full( + test_results, + **kwds +): + num_tests = test_results.num_tests + num_problems = test_results.num_problems + + if num_tests == 0: + warn(NO_TESTS_MESSAGE) + return + + if num_problems == 0: + info(ALL_TESTS_PASSED_MESSAGE % num_tests) + + if num_problems: + html_report_file = test_results.output_html_path + message_args = (num_problems, num_tests, html_report_file) + message = PROBLEM_COUNT_MESSAGE % message_args + warn(message) + + for testcase_el in test_results.xunit_testcase_elements: + structured_data_tests = test_results.structured_data_tests + __summarize_test_case(structured_data_tests, testcase_el, **kwds) + + +def __summarize_test_case(structured_data, testcase_el, **kwds): + summary_style = kwds.get("summary") + test_id = test_structures.case_id(testcase_el) + passed = len(list(testcase_el)) == 0 + if not passed: + state = click.style("failed", bold=True, fg='red') + else: + state = click.style("passed", bold=True, fg='green') + click.echo(test_id.label + ": " + state) + if summary_style != "minimal": + __print_command_line(structured_data, test_id) + + +def __print_command_line(structured_data, test_id): + try: + test = [d for d in structured_data if d["id"] == test_id.id][0]["data"] + except (KeyError, IndexError): + # Failed to find structured data for this test - likely targetting + # and older Galaxy version. + return + + execution_problem = test.get("execution_problem", None) + if execution_problem: + click.echo("| command: *could not execute job, no command generated* ") + return + + try: + command = test["job"]["command_line"] + except (KeyError, IndexError): + click.echo("| command: *failed to determine command for job* ") + return + + click.echo("| command: %s" % command) + + +def __xunit_state(kwds, config): + xunit_supported = True + if shell("grep -q xunit '%s'/run_tests.sh" % config.galaxy_root): + xunit_supported = False + + xunit_report_file = kwds.get("test_output_xunit", None) + if xunit_report_file is None and xunit_supported: + xunit_report_file = os.path.join(config.config_directory, "xunit.xml") + elif xunit_report_file is not None and not xunit_supported: + warn(XUNIT_UPGRADE_MESSAGE) + xunit_report_file = None + + return xunit_supported, xunit_report_file + + +def __structured_report_file(kwds, config): + structured_data_supported = True + if shell("grep -q structured_data '%s'/run_tests.sh" % config.galaxy_root): + structured_data_supported = False + + structured_report_file = None + structured_report_file = kwds.get("test_output_json", None) + if structured_report_file is None and structured_data_supported: + conf_dir = config.config_directory + structured_report_file = os.path.join(conf_dir, "structured_data.json") + elif structured_report_file is not None and not structured_data_supported: + warn(NO_JSON_MESSAGE) + structured_report_file = None + + return structured_report_file