comparison env/lib/python3.7/site-packages/planemo/commands/cmd_test.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:26e78fe6e8c4
1 """Module describing the planemo ``test`` command."""
2 import click
3
4 from planemo import options
5 from planemo.cli import command_function
6 from planemo.engine import (
7 engine_context,
8 )
9 from planemo.galaxy import galaxy_config
10 from planemo.galaxy.config import _find_test_data
11 from planemo.galaxy.test import (
12 handle_reports_and_summary,
13 run_in_config,
14 )
15 from planemo.io import temp_directory
16 from planemo.runnable import (
17 for_paths,
18 RunnableType,
19 )
20
21
22 @click.command('test')
23 @options.optional_tools_arg(multiple=True)
24 @click.option(
25 "--failed",
26 is_flag=True,
27 help="Re-run only failed tests. This command will read "
28 "tool_test_output.json to determine which tests failed so this "
29 "file must have been produced with the same set of tool ids "
30 "previously.",
31 default=False,
32 )
33 @click.option(
34 "--polling_backoff",
35 type=int,
36 help="Poll resources with an increasing interval between requests. "
37 "Useful when testing against remote and/or production "
38 "instances to limit generated traffic.",
39 default="0",
40 )
41 @click.option(
42 "--history_name",
43 help="Name for history (if a history is generated as part of testing.)"
44 )
45 @options.galaxy_target_options()
46 @options.galaxy_config_options()
47 @options.test_options()
48 @options.engine_options()
49 @command_function
50 def cli(ctx, paths, **kwds):
51 """Run specified tool's tests within Galaxy.
52
53 All referenced tools (by default all the tools in the current working
54 directory) will be tested and the results quickly summarized.
55
56 To run these tests planemo needs a Galaxy instance to utilize, planemo
57 will search parent directories to see if any is a Galaxy instance
58 - but one can pick the Galaxy instance to use with the --galaxy_root
59 option or force planemo to download a disposable instance with the
60 ``--install_galaxy`` flag.
61
62 In additon to to quick summary printed to the console - various detailed
63 output summaries can be configured. ``tool_test_output.html`` (settable
64 via ``--test_output``) will contain a human consumable HTML report
65 describing the test run. A JSON file (settable via ``--test_output_json``
66 and defaulting to ``tool_test_output.json``) will also be created. These
67 files can can be disabled by passing in empty arguments or globally by
68 setting the values ``default_test_output`` and/or
69 ``default_test_output_json`` in ``~/.planemo.yml`` to ``null``. For
70 continuous integration testing a xUnit-style report can be confiured using
71 the ``--test_output_xunit``.
72
73 planemo uses temporarily generated config files and environment variables
74 to attempt to shield this execution of Galaxy from manually launched runs
75 against that same Galaxy root - but this may not be bullet proof yet so
76 please careful and do not try this against production Galaxy instances.
77 """
78 with temp_directory(dir=ctx.planemo_directory) as temp_path:
79 # Create temp dir(s) outside of temp, docker can't mount $TEMPDIR on OSX
80 runnables = for_paths(paths, temp_path=temp_path)
81 is_cwl = all(r.type in {RunnableType.cwl_tool, RunnableType.cwl_workflow} for r in runnables)
82 if kwds.get("engine") is None:
83 kwds["engine"] = "galaxy" if not is_cwl else "cwltool"
84
85 engine_type = kwds["engine"]
86 test_engine_testable = {RunnableType.galaxy_tool, RunnableType.galaxy_datamanager, RunnableType.directory}
87 enable_test_engines = any(r.type not in test_engine_testable for r in runnables)
88 enable_test_engines = enable_test_engines or engine_type != "galaxy"
89 if enable_test_engines:
90 ctx.vlog("Using test engine type %s" % engine_type)
91 with engine_context(ctx, **kwds) as engine:
92 test_data = engine.test(runnables)
93 return_value = handle_reports_and_summary(ctx, test_data.structured_data, kwds=kwds)
94 else:
95 ctx.vlog("Running traditional Galaxy tool tests using run_tests.sh in Galaxy root %s" % engine_type)
96 kwds["for_tests"] = True
97 if kwds.get('update_test_data'):
98 non_copied_runnables = for_paths(paths)
99 kwds['test_data_target_dir'] = _find_test_data(non_copied_runnables, **kwds)
100 with galaxy_config(ctx, runnables, **kwds) as config:
101 return_value = run_in_config(ctx, config, **kwds)
102
103 ctx.exit(return_value)