Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/cwltool/tests/test_examples.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/cwltool/tests/test_examples.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1048 +0,0 @@ -import json -import logging -import os -import stat -import sys -from io import BytesIO, StringIO -import pytest -from typing_extensions import Text - -import schema_salad.validate - -import cwltool.checker -import cwltool.expression as expr -import cwltool.factory -import cwltool.pathmapper -import cwltool.process -import cwltool.workflow -from cwltool.context import RuntimeContext -from cwltool.errors import WorkflowException -from cwltool.main import main -from cwltool.utils import onWindows -from cwltool.resolver import Path -from cwltool.process import CWL_IANA -from cwltool.sandboxjs import JavascriptException -from .util import (get_data, get_main_output, get_windows_safe_factory, subprocess, - needs_docker, working_directory, needs_singularity, temp_dir, windows_needs_docker) - -import six - -try: - reload -except: # pylint: disable=bare-except - try: - from imp import reload - except: - from importlib import reload - -sys.argv = [''] - -expression_match = [ - ("(foo)", True), - ("(foo.bar)", True), - ("(foo['bar'])", True), - ("(foo[\"bar\"])", True), - ("(foo.bar.baz)", True), - ("(foo['bar'].baz)", True), - ("(foo['bar']['baz'])", True), - ("(foo['b\\'ar']['baz'])", True), - ("(foo['b ar']['baz'])", True), - ("(foo_bar)", True), - - ("(foo.[\"bar\"])", False), - ("(.foo[\"bar\"])", False), - ("(foo [\"bar\"])", False), - ("( foo[\"bar\"])", False), - ("(foo[bar].baz)", False), - ("(foo['bar\"].baz)", False), - ("(foo['bar].baz)", False), - ("{foo}", False), - ("(foo.bar", False), - ("foo.bar)", False), - ("foo.b ar)", False), - ("foo.b\'ar)", False), - ("(foo+bar", False), - ("(foo bar", False) -] - - -@pytest.mark.parametrize('expression,expected', expression_match) -def test_expression_match(expression, expected): - match = expr.param_re.match(expression) - assert (match is not None) == expected - - -interpolate_input = { - "foo": { - "bar": { - "baz": "zab1" - }, - "b ar": { - "baz": 2 - }, - "b'ar": { - "baz": True - }, - 'b"ar': { - "baz": None - } - }, - "lst": ["A", "B"] -} - -interpolate_parameters = [ - ("$(foo)", interpolate_input["foo"]), - - ("$(foo.bar)", interpolate_input["foo"]["bar"]), - ("$(foo['bar'])", interpolate_input["foo"]["bar"]), - ("$(foo[\"bar\"])", interpolate_input["foo"]["bar"]), - - ("$(foo.bar.baz)", interpolate_input['foo']['bar']['baz']), - ("$(foo['bar'].baz)", interpolate_input['foo']['bar']['baz']), - ("$(foo['bar'][\"baz\"])", interpolate_input['foo']['bar']['baz']), - ("$(foo.bar['baz'])", interpolate_input['foo']['bar']['baz']), - - ("$(foo['b\\'ar'].baz)", True), - ("$(foo[\"b'ar\"].baz)", True), - ("$(foo['b\\\"ar'].baz)", None), - - ("$(lst[0])", "A"), - ("$(lst[1])", "B"), - ("$(lst.length)", 2), - ("$(lst['length'])", 2), - - ("-$(foo.bar)", """-{"baz": "zab1"}"""), - ("-$(foo['bar'])", """-{"baz": "zab1"}"""), - ("-$(foo[\"bar\"])", """-{"baz": "zab1"}"""), - - ("-$(foo.bar.baz)", "-zab1"), - ("-$(foo['bar'].baz)", "-zab1"), - ("-$(foo['bar'][\"baz\"])", "-zab1"), - ("-$(foo.bar['baz'])", "-zab1"), - - ("-$(foo['b ar'].baz)", "-2"), - ("-$(foo['b\\'ar'].baz)", "-true"), - ("-$(foo[\"b\\'ar\"].baz)", "-true"), - ("-$(foo['b\\\"ar'].baz)", "-null"), - - ("$(foo.bar) $(foo.bar)", """{"baz": "zab1"} {"baz": "zab1"}"""), - ("$(foo['bar']) $(foo['bar'])", """{"baz": "zab1"} {"baz": "zab1"}"""), - ("$(foo[\"bar\"]) $(foo[\"bar\"])", """{"baz": "zab1"} {"baz": "zab1"}"""), - - ("$(foo.bar.baz) $(foo.bar.baz)", "zab1 zab1"), - ("$(foo['bar'].baz) $(foo['bar'].baz)", "zab1 zab1"), - ("$(foo['bar'][\"baz\"]) $(foo['bar'][\"baz\"])", "zab1 zab1"), - ("$(foo.bar['baz']) $(foo.bar['baz'])", "zab1 zab1"), - - ("$(foo['b ar'].baz) $(foo['b ar'].baz)", "2 2"), - ("$(foo['b\\'ar'].baz) $(foo['b\\'ar'].baz)", "true true"), - ("$(foo[\"b\\'ar\"].baz) $(foo[\"b\\'ar\"].baz)", "true true"), - ("$(foo['b\\\"ar'].baz) $(foo['b\\\"ar'].baz)", "null null") -] - - -@pytest.mark.parametrize('pattern,expected', interpolate_parameters) -def test_expression_interpolate(pattern, expected): - assert expr.interpolate(pattern, interpolate_input) == expected - -interpolate_bad_parameters = [ - ("$(fooz)"), - ("$(foo.barz)"), - ("$(foo['barz'])"), - ("$(foo[\"barz\"])"), - - ("$(foo.bar.bazz)"), - ("$(foo['bar'].bazz)"), - ("$(foo['bar'][\"bazz\"])"), - ("$(foo.bar['bazz'])"), - - ("$(foo['b\\'ar'].bazz)"), - ("$(foo[\"b'ar\"].bazz)"), - ("$(foo['b\\\"ar'].bazz)"), - - ("$(lst[O])"), # not "0" the number, but the letter O - ("$(lst[2])"), - ("$(lst.lengthz)"), - ("$(lst['lengthz'])"), - - ("-$(foo.barz)"), - ("-$(foo['barz'])"), - ("-$(foo[\"barz\"])"), - - ("-$(foo.bar.bazz)"), - ("-$(foo['bar'].bazz)"), - ("-$(foo['bar'][\"bazz\"])"), - ("-$(foo.bar['bazz'])"), - - ("-$(foo['b ar'].bazz)"), - ("-$(foo['b\\'ar'].bazz)"), - ("-$(foo[\"b\\'ar\"].bazz)"), - ("-$(foo['b\\\"ar'].bazz)"), -] - -@pytest.mark.parametrize('pattern', interpolate_bad_parameters) -def test_expression_interpolate_failures(pattern): - result = None - try: - result = expr.interpolate(pattern, interpolate_input) - except JavascriptException: - return - assert false, 'Should have produced a JavascriptException, got "{}".'.format(result) - - -@windows_needs_docker -def test_factory(): - factory = get_windows_safe_factory() - echo = factory.make(get_data("tests/echo.cwl")) - - assert echo(inp="foo") == {"out": "foo\n"} - - -def test_factory_bad_outputs(): - factory = cwltool.factory.Factory() - - with pytest.raises(schema_salad.validate.ValidationException): - factory.make(get_data("tests/echo_broken_outputs.cwl")) - - -def test_factory_default_args(): - factory = cwltool.factory.Factory() - - assert factory.runtime_context.use_container is True - assert factory.runtime_context.on_error == "stop" - - -def test_factory_redefined_args(): - runtime_context = RuntimeContext() - runtime_context.use_container = False - runtime_context.on_error = "continue" - factory = cwltool.factory.Factory(runtime_context=runtime_context) - - assert factory.runtime_context.use_container is False - assert factory.runtime_context.on_error == "continue" - - -def test_factory_partial_scatter(): - runtime_context = RuntimeContext() - runtime_context.on_error = "continue" - factory = cwltool.factory.Factory(runtime_context=runtime_context) - - with pytest.raises(cwltool.factory.WorkflowStatus) as err_info: - factory.make(get_data("tests/wf/scatterfail.cwl"))() - - err = err_info.value - assert err.out["out"][0]["checksum"] == 'sha1$e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e' - assert err.out["out"][1] is None - assert err.out["out"][2]["checksum"] == 'sha1$a3db5c13ff90a36963278c6a39e4ee3c22e2a436' - - -def test_factory_partial_output(): - runtime_context = RuntimeContext() - runtime_context.on_error = "continue" - factory = cwltool.factory.Factory(runtime_context=runtime_context) - - with pytest.raises(cwltool.factory.WorkflowStatus) as err_info: - factory.make(get_data("tests/wf/wffail.cwl"))() - - err = err_info.value - assert err.out["out1"]["checksum"] == 'sha1$e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e' - assert err.out["out2"] is None - - -def test_scandeps(): - obj = { - "id": "file:///example/foo.cwl", - "steps": [ - { - "id": "file:///example/foo.cwl#step1", - "inputs": [{ - "id": "file:///example/foo.cwl#input1", - "default": { - "class": "File", - "location": "file:///example/data.txt" - } - }], - "run": { - "id": "file:///example/bar.cwl", - "inputs": [{ - "id": "file:///example/bar.cwl#input2", - "default": { - "class": "Directory", - "location": "file:///example/data2", - "listing": [{ - "class": "File", - "location": "file:///example/data3.txt", - "secondaryFiles": [{ - "class": "File", - "location": "file:///example/data5.txt" - }] - }] - }, - }, { - "id": "file:///example/bar.cwl#input3", - "default": { - "class": "Directory", - "listing": [{ - "class": "File", - "location": "file:///example/data4.txt" - }] - } - }, { - "id": "file:///example/bar.cwl#input4", - "default": { - "class": "File", - "contents": "file literal" - } - }] - } - } - ] - } - - def loadref(base, p): - if isinstance(p, dict): - return p - raise Exception("test case can't load things") - - scanned_deps = cwltool.process.scandeps( - obj["id"], obj, - {"$import", "run"}, - {"$include", "$schemas", "location"}, - loadref) - - scanned_deps.sort(key=lambda k: k["basename"]) - - expected_deps = [ - {"basename": "bar.cwl", - "nameroot": "bar", - "class": "File", - "format": CWL_IANA, - "nameext": ".cwl", - "location": "file:///example/bar.cwl"}, - {"basename": "data.txt", - "nameroot": "data", - "class": "File", - "nameext": ".txt", - "location": "file:///example/data.txt"}, - {"basename": "data2", - "class": "Directory", - "location": "file:///example/data2", - "listing": [ - {"basename": "data3.txt", - "nameroot": "data3", - "class": "File", - "nameext": ".txt", - "location": "file:///example/data3.txt", - "secondaryFiles": [ - {"class": "File", - "basename": "data5.txt", - "location": "file:///example/data5.txt", - "nameext": ".txt", - "nameroot": "data5" - }] - }] - }, { - "basename": "data4.txt", - "nameroot": "data4", - "class": "File", - "nameext": ".txt", - "location": "file:///example/data4.txt" - }] - - assert scanned_deps == expected_deps - - scanned_deps = cwltool.process.scandeps( - obj["id"], obj, - set(("run"), ), - set(), loadref) - - scanned_deps.sort(key=lambda k: k["basename"]) - - expected_deps = [{ - "basename": "bar.cwl", - "nameroot": "bar", - "format": CWL_IANA, - "class": "File", - "nameext": ".cwl", - "location": "file:///example/bar.cwl" - }] - - assert scanned_deps == expected_deps - -def test_trick_scandeps(): - if sys.version_info[0] < 3: - stream = BytesIO() - else: - stream = StringIO() - - main(["--print-deps", "--debug", get_data("tests/wf/trick_defaults.cwl")], stdout=stream) - assert json.loads(stream.getvalue())["secondaryFiles"][0]["location"][:2] != "_:" - - -def test_input_deps(): - if sys.version_info[0] < 3: - stream = BytesIO() - else: - stream = StringIO() - - main(["--print-input-deps", get_data("tests/wf/count-lines1-wf.cwl"), - get_data("tests/wf/wc-job.json")], stdout=stream) - - expected = {"class": "File", - "location": "wc-job.json", - "format": CWL_IANA, - "secondaryFiles": [{"class": "File", - "location": "whale.txt", - "basename": "whale.txt", - "nameroot": "whale", - "nameext": ".txt"}]} - assert json.loads(stream.getvalue()) == expected - - -def test_input_deps_cmdline_opts(): - if sys.version_info[0] < 3: - stream = BytesIO() - else: - stream = StringIO() - - main(["--print-input-deps", - get_data("tests/wf/count-lines1-wf.cwl"), - "--file1", get_data("tests/wf/whale.txt")], stdout=stream) - expected = {"class": "File", - "location": "", - "format": CWL_IANA, - "secondaryFiles": [{"class": "File", - "location": "whale.txt", - "basename": "whale.txt", - "nameroot": "whale", - "nameext": ".txt"}]} - assert json.loads(stream.getvalue()) == expected - - -def test_input_deps_cmdline_opts_relative_deps_cwd(): - if sys.version_info[0] < 3: - stream = BytesIO() - else: - stream = StringIO() - - data_path = get_data("tests/wf/whale.txt") - main(["--print-input-deps", "--relative-deps", "cwd", - get_data("tests/wf/count-lines1-wf.cwl"), - "--file1", data_path], stdout=stream) - - goal = {"class": "File", - "location": "", - "format": CWL_IANA, - "secondaryFiles": [{"class": "File", - "location": str( - Path(os.path.relpath( - data_path, os.path.curdir))), - "basename": "whale.txt", - "nameroot": "whale", - "nameext": ".txt"}]} - assert json.loads(stream.getvalue()) == goal - - -def test_dedupe(): - not_deduped = [ - {"class": "File", - "location": "file:///example/a"}, - {"class": "File", - "location": "file:///example/a"}, - {"class": "File", - "location": "file:///example/d"}, - {"class": "Directory", - "location": "file:///example/c", - "listing": [ - {"class": "File", - "location": "file:///example/d"} - ]} - ] - - expected = [ - {"class": "File", - "location": "file:///example/a"}, - {"class": "Directory", - "location": "file:///example/c", - "listing": [ - {"class": "File", - "location": "file:///example/d"} - ]} - ] - - assert cwltool.pathmapper.dedup(not_deduped) == expected - - -record = { - 'fields': [ - {'type': {'items': 'string', 'type': 'array'}, - 'name': u'file:///home/chapmanb/drive/work/cwl/test_bcbio_cwl/run_info-cwl-workflow/wf-variantcall.cwl#vc_rec/vc_rec/description' - }, - {'type': {'items': 'File', 'type': 'array'}, - 'name': u'file:///home/chapmanb/drive/work/cwl/test_bcbio_cwl/run_info-cwl-workflow/wf-variantcall.cwl#vc_rec/vc_rec/vrn_file' - }], - 'type': 'record', - 'name': u'file:///home/chapmanb/drive/work/cwl/test_bcbio_cwl/run_info-cwl-workflow/wf-variantcall.cwl#vc_rec/vc_rec' -} - -source_to_sink = [ - ('0', - {'items': ['string', 'null'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - True - ), - ('1', - {'items': ['string'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - True - ), - ('2', - {'items': ['string', 'null'], 'type': 'array'}, - {'items': ['string'], 'type': 'array'}, - True - ), - ('3', - {'items': ['string'], 'type': 'array'}, - {'items': ['int'], 'type': 'array'}, - False - ), - ('record 0', - record, record, - True - ), - ('record 1', - record, {'items': 'string', 'type': 'array'}, - False - ) -] - - -@pytest.mark.parametrize('name, source, sink, expected', source_to_sink) -def test_compare_types(name, source, sink, expected): - assert cwltool.workflow.can_assign_src_to_sink(source, sink) == expected, name - - -source_to_sink_strict = [ - ('0', - ['string', 'null'], ['string', 'null'], - True - ), - ('1', - ['string'], ['string', 'null'], - True - ), - ('2', - ['string', 'int'], ['string', 'null'], - False - ), - ('3', - {'items': ['string'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - True - ), - ('4', - {'items': ['string', 'int'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - False - ) -] - - -@pytest.mark.parametrize('name, source, sink, expected', source_to_sink_strict) -def test_compare_types_strict(name, source, sink, expected): - assert cwltool.workflow.can_assign_src_to_sink(source, sink, strict=True) == expected, name - - -typechecks = [ - (['string', 'int'], ['string', 'int', 'null'], - None, None, - "pass" - ), - (['string', 'int'], ['string', 'null'], - None, None, - "warning" - ), - (['File', 'int'], ['string', 'null'], - None, None, - "exception" - ), - ({'items': ['string', 'int'], 'type': 'array'}, - {'items': ['string', 'int', 'null'], 'type': 'array'}, - None, None, - "pass" - ), - ({'items': ['string', 'int'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - None, None, - "warning" - ), - ({'items': ['File', 'int'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - None, None, - "exception" - ), - # check linkMerge when sinktype is not an array - (['string', 'int'], ['string', 'int', 'null'], - "merge_nested", None, - "exception" - ), - # check linkMerge: merge_nested - (['string', 'int'], - {'items': ['string', 'int', 'null'], 'type': 'array'}, - "merge_nested", None, - "pass" - ), - (['string', 'int'], - {'items': ['string', 'null'], 'type': 'array'}, - "merge_nested", None, - "warning" - ), - (['File', 'int'], - {'items': ['string', 'null'], 'type': 'array'}, - "merge_nested", None, - "exception" - ), - # check linkMerge: merge_nested and sinktype is "Any" - (['string', 'int'], "Any", - "merge_nested", None, - "pass" - ), - # check linkMerge: merge_flattened - (['string', 'int'], - {'items': ['string', 'int', 'null'], 'type': 'array'}, - "merge_flattened", None, - "pass" - ), - (['string', 'int'], - {'items': ['string', 'null'], 'type': 'array'}, - "merge_flattened", None, - "warning" - ), - (['File', 'int'], - {'items': ['string', 'null'], 'type': 'array'}, - "merge_flattened", None, - "exception" - ), - ({'items': ['string', 'int'], 'type': 'array'}, - {'items': ['string', 'int', 'null'], 'type': 'array'}, - "merge_flattened", None, - "pass" - ), - ({'items': ['string', 'int'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - "merge_flattened", None, - "warning" - ), - ({'items': ['File', 'int'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - "merge_flattened", None, - "exception"), - # check linkMerge: merge_flattened and sinktype is "Any" - (['string', 'int'], "Any", - "merge_flattened", None, - "pass" - ), - ({'items': ['string', 'int'], 'type': 'array'}, "Any", - "merge_flattened", None, - "pass" - ), - # check linkMerge: merge_flattened when srctype is a list - ([{'items': 'string', 'type': 'array'}], - {'items': 'string', 'type': 'array'}, - "merge_flattened", None, - "pass" - ), - # check valueFrom - ({'items': ['File', 'int'], 'type': 'array'}, - {'items': ['string', 'null'], 'type': 'array'}, - "merge_flattened", "special value", - "pass" - ) -] - - -@pytest.mark.parametrize('src_type,sink_type,link_merge,value_from,expected_type', typechecks) -def test_typechecking(src_type, sink_type, link_merge, value_from, expected_type): - assert cwltool.checker.check_types( - src_type, sink_type, linkMerge=link_merge, valueFrom=value_from - ) == expected_type - - -def test_lifting(): - # check that lifting the types of the process outputs to the workflow step - # fails if the step 'out' doesn't match. - factory = cwltool.factory.Factory() - with pytest.raises(schema_salad.validate.ValidationException): - echo = factory.make(get_data("tests/test_bad_outputs_wf.cwl")) - assert echo(inp="foo") == {"out": "foo\n"} - - -def test_malformed_outputs(): - # check that tool validation fails if one of the outputs is not a valid CWL type - factory = cwltool.factory.Factory() - with pytest.raises(schema_salad.validate.ValidationException): - factory.make(get_data("tests/wf/malformed_outputs.cwl"))() - - -def test_separate_without_prefix(): - # check that setting 'separate = false' on an inputBinding without prefix fails the workflow - factory = cwltool.factory.Factory() - with pytest.raises(WorkflowException): - factory.make(get_data("tests/wf/separate_without_prefix.cwl"))() - - -def test_static_checker(): - # check that the static checker raises exception when a source type - # mismatches its sink type. - factory = cwltool.factory.Factory() - - with pytest.raises(schema_salad.validate.ValidationException): - factory.make(get_data("tests/checker_wf/broken-wf.cwl")) - - with pytest.raises(schema_salad.validate.ValidationException): - factory.make(get_data("tests/checker_wf/broken-wf2.cwl")) - - with pytest.raises(schema_salad.validate.ValidationException): - factory.make(get_data("tests/checker_wf/broken-wf3.cwl")) - - -def test_var_spool_cwl_checker1(): - """Confirm that references to /var/spool/cwl are caught.""" - stream = StringIO() - streamhandler = logging.StreamHandler(stream) - _logger = logging.getLogger("cwltool") - _logger.addHandler(streamhandler) - - factory = cwltool.factory.Factory() - try: - factory.make(get_data("tests/non_portable.cwl")) - assert "non_portable.cwl:18:4: Non-portable reference to /var/spool/cwl detected" in stream.getvalue() - finally: - _logger.removeHandler(streamhandler) - - -def test_var_spool_cwl_checker2(): - """Confirm that references to /var/spool/cwl are caught.""" - stream = StringIO() - streamhandler = logging.StreamHandler(stream) - _logger = logging.getLogger("cwltool") - _logger.addHandler(streamhandler) - - factory = cwltool.factory.Factory() - try: - factory.make(get_data("tests/non_portable2.cwl")) - assert "non_portable2.cwl:19:4: Non-portable reference to /var/spool/cwl detected" in stream.getvalue() - finally: - _logger.removeHandler(streamhandler) - - -def test_var_spool_cwl_checker3(): - """Confirm that references to /var/spool/cwl are caught.""" - stream = StringIO() - streamhandler = logging.StreamHandler(stream) - _logger = logging.getLogger("cwltool") - _logger.addHandler(streamhandler) - - factory = cwltool.factory.Factory() - try: - factory.make(get_data("tests/portable.cwl")) - assert "Non-portable reference to /var/spool/cwl detected" not in stream.getvalue() - finally: - _logger.removeHandler(streamhandler) - - -def test_print_dot(): - assert main(["--print-dot", get_data('tests/wf/revsort.cwl')]) == 0 - -test_factors = [(""), ("--parallel"), ("--debug"), ("--parallel --debug")] - -@pytest.mark.parametrize("factor", test_factors) -def test_js_console_cmd_line_tool(factor): - for test_file in ("js_output.cwl", "js_output_workflow.cwl"): - commands = factor.split() - commands.extend(["--js-console", "--no-container", get_data("tests/wf/" + test_file)]) - error_code, _, stderr = get_main_output(commands) - - assert "[log] Log message" in stderr - assert "[err] Error message" in stderr - - assert error_code == 0, stderr - -@pytest.mark.parametrize("factor", test_factors) -def test_no_js_console(factor): - for test_file in ("js_output.cwl", "js_output_workflow.cwl"): - commands = factor.split() - commands.extend(["--no-container", get_data("tests/wf/" + test_file)]) - _, _, stderr = get_main_output(commands) - - assert "[log] Log message" not in stderr - assert "[err] Error message" not in stderr - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_cid_file_dir(tmpdir, factor): - test_file = "cache_test_workflow.cwl" - cwd = tmpdir.chdir() - commands = factor.split() - commands.extend(["--cidfile-dir", str(tmpdir), get_data("tests/wf/" + test_file)]) - error_code, stdout, stderr = get_main_output(commands) - assert "completed success" in stderr - assert error_code == 0 - cidfiles_count = sum(1 for _ in tmpdir.visit(fil="*")) - assert cidfiles_count == 2 - cwd.chdir() - tmpdir.remove(ignore_errors=True) - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_cid_file_dir_arg_is_file_instead_of_dir(tmpdir, factor): - test_file = "cache_test_workflow.cwl" - bad_cidfile_dir = Text(tmpdir.ensure("cidfile-dir-actually-a-file")) - commands = factor.split() - commands.extend(["--cidfile-dir", bad_cidfile_dir, - get_data("tests/wf/" + test_file)]) - error_code, _, stderr = get_main_output(commands) - assert "is not a directory, please check it first" in stderr, stderr - assert error_code == 2 or error_code == 1, stderr - tmpdir.remove(ignore_errors=True) - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_cid_file_non_existing_dir(tmpdir, factor): - test_file = "cache_test_workflow.cwl" - bad_cidfile_dir = Text(tmpdir.join("cidfile-dir-badpath")) - commands = factor.split() - commands.extend(['--record-container-id',"--cidfile-dir", bad_cidfile_dir, - get_data("tests/wf/" + test_file)]) - error_code, _, stderr = get_main_output(commands) - assert "directory doesn't exist, please create it first" in stderr, stderr - assert error_code == 2 or error_code == 1, stderr - tmpdir.remove(ignore_errors=True) - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_cid_file_w_prefix(tmpdir, factor): - test_file = "cache_test_workflow.cwl" - cwd = tmpdir.chdir() - try: - commands = factor.split() - commands.extend(['--record-container-id', '--cidfile-prefix=pytestcid', - get_data("tests/wf/" + test_file)]) - error_code, stdout, stderr = get_main_output(commands) - finally: - listing = tmpdir.listdir() - cwd.chdir() - cidfiles_count = sum(1 for _ in tmpdir.visit(fil="pytestcid*")) - tmpdir.remove(ignore_errors=True) - assert "completed success" in stderr - assert error_code == 0 - assert cidfiles_count == 2, '{}/n{}'.format(listing, stderr) - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_secondary_files_v1_1(factor): - test_file = "secondary-files.cwl" - test_job_file = "secondary-files-job.yml" - try: - old_umask = os.umask(stat.S_IWOTH) # test run with umask 002 - commands = factor.split() - commands.extend(["--enable-dev", - get_data(os.path.join("tests", test_file)), - get_data(os.path.join("tests", test_job_file))]) - error_code, _, stderr = get_main_output(commands) - finally: - assert stat.S_IMODE(os.stat('lsout').st_mode) == 436 # 664 in octal, '-rw-rw-r--' - os.umask(old_umask) # revert back to original umask - assert "completed success" in stderr - assert error_code == 0 - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_secondary_files_v1_0(factor): - test_file = "secondary-files-string-v1.cwl" - test_job_file = "secondary-files-job.yml" - try: - old_umask = os.umask(stat.S_IWOTH) # test run with umask 002 - commands = factor.split() - commands.extend([ - get_data(os.path.join("tests", test_file)), - get_data(os.path.join("tests", test_job_file)) - ]) - error_code, _, stderr = get_main_output(commands) - finally: - assert stat.S_IMODE(os.stat('lsout').st_mode) == 436 # 664 in octal, '-rw-rw-r--' - os.umask(old_umask) # revert back to original umask - assert "completed success" in stderr - assert error_code == 0 - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_wf_without_container(tmpdir, factor): - test_file = "hello-workflow.cwl" - with temp_dir("cwltool_cache") as cache_dir: - commands = factor.split() - commands.extend(["--cachedir", cache_dir, "--outdir", str(tmpdir), - get_data("tests/wf/" + test_file), - "--usermessage", - "hello"]) - error_code, _, stderr = get_main_output(commands) - - assert "completed success" in stderr - assert error_code == 0 - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_issue_740_fixed(factor): - test_file = "cache_test_workflow.cwl" - with temp_dir("cwltool_cache") as cache_dir: - commands = factor.split() - commands.extend(["--cachedir", cache_dir, get_data("tests/wf/" + test_file)]) - error_code, _, stderr = get_main_output(commands) - - assert "completed success" in stderr - assert error_code == 0 - - commands = factor.split() - commands.extend(["--cachedir", cache_dir, get_data("tests/wf/" + test_file)]) - error_code, _, stderr = get_main_output(commands) - - assert "Output of job will be cached in" not in stderr - assert error_code == 0, stderr - - -@needs_docker -def test_compute_checksum(): - runtime_context = RuntimeContext() - runtime_context.compute_checksum = True - runtime_context.use_container = onWindows() - factory = cwltool.factory.Factory(runtime_context=runtime_context) - echo = factory.make(get_data("tests/wf/cat-tool.cwl")) - output = echo( - file1={"class": "File", - "location": get_data("tests/wf/whale.txt")}, - reverse=False) - assert output['output']["checksum"] == "sha1$327fc7aedf4f6b69a42a7c8b808dc5a7aff61376" - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_no_compute_chcksum(tmpdir, factor): - test_file = "tests/wf/wc-tool.cwl" - job_file = "tests/wf/wc-job.json" - commands = factor.split() - commands.extend(["--no-compute-checksum", "--outdir", str(tmpdir), - get_data(test_file), get_data(job_file)]) - error_code, stdout, stderr = get_main_output(commands) - assert "completed success" in stderr - assert error_code == 0 - assert "checksum" not in stdout - - -@pytest.mark.parametrize("factor", test_factors) -def test_bad_userspace_runtime(factor): - test_file = "tests/wf/wc-tool.cwl" - job_file = "tests/wf/wc-job.json" - commands = factor.split() - commands.extend([ - "--user-space-docker-cmd=quaquioN", "--default-container=debian", - get_data(test_file), get_data(job_file)]) - error_code, stdout, stderr = get_main_output(commands) - assert "or quaquioN is missing or broken" in stderr, stderr - assert error_code == 1 - -@windows_needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_bad_basecommand(factor): - test_file = "tests/wf/missing-tool.cwl" - commands = factor.split() - commands.extend([get_data(test_file)]) - error_code, stdout, stderr = get_main_output(commands) - assert "'neenooGo' not found" in stderr, stderr - assert error_code == 1 - - -@needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_bad_basecommand_docker(factor): - test_file = "tests/wf/missing-tool.cwl" - commands = factor.split() - commands.extend( - ["--debug", "--default-container", "debian", get_data(test_file)]) - error_code, stdout, stderr = get_main_output(commands) - assert "permanentFail" in stderr, stderr - assert error_code == 1 - -@pytest.mark.parametrize("factor", test_factors) -def test_v1_0_position_expression(factor): - test_file = "tests/echo-position-expr.cwl" - test_job = "tests/echo-position-expr-job.yml" - commands = factor.split() - commands.extend( - ['--debug', get_data(test_file), get_data(test_job)]) - error_code, stdout, stderr = get_main_output(commands) - assert "is not int" in stderr, stderr - assert error_code == 1 - - -@windows_needs_docker -@pytest.mark.parametrize("factor", test_factors) -def test_optional_numeric_output_0(factor): - test_file = "tests/wf/optional-numerical-output-0.cwl" - commands = factor.split() - commands.extend([get_data(test_file)]) - error_code, stdout, stderr = get_main_output(commands) - - assert "completed success" in stderr - assert error_code == 0 - assert json.loads(stdout)['out'] == 0 - -@pytest.mark.parametrize("factor", test_factors) -@windows_needs_docker -def test_env_filtering(factor): - test_file = "tests/env.cwl" - commands = factor.split() - commands.extend([get_data(test_file)]) - error_code, stdout, stderr = get_main_output(commands) - - process = subprocess.Popen(["sh", "-c", r"""getTrueShellExeName() { - local trueExe nextTarget 2>/dev/null - trueExe=$(ps -o comm= $$) || return 1 - [ "${trueExe#-}" = "$trueExe" ] || trueExe=${trueExe#-} - [ "${trueExe#/}" != "$trueExe" ] || trueExe=$([ -n "$ZSH_VERSION" ] && which -p "$trueExe" || which "$trueExe") - while nextTarget=$(readlink "$trueExe"); do trueExe=$nextTarget; done - printf '%s\n' "$(basename "$trueExe")" -} ; getTrueShellExeName"""], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=None) - sh_name, sh_name_err = process.communicate() - sh_name = sh_name.decode('utf-8').strip() - - assert "completed success" in stderr, (error_code, stdout, stderr) - assert error_code == 0, (error_code, stdout, stderr) - if onWindows(): - target = 5 - elif sh_name == "dash": - target = 4 - else: # bash adds "SHLVL" and "_" environment variables - target = 6 - result = json.loads(stdout)['env_count'] - details = '' - if result != target: - _, details, _ = get_main_output(["--quiet", get_data("tests/env2.cwl")]) - print(sh_name) - print(sh_name_err) - print(details) - assert result == target, (error_code, sh_name, sh_name_err, details, stdout, stderr) - -@windows_needs_docker -def test_v1_0_arg_empty_prefix_separate_false(): - test_file = "tests/arg-empty-prefix-separate-false.cwl" - error_code, stdout, stderr = get_main_output( - ['--debug', get_data(test_file), "--echo"]) - assert "completed success" in stderr - assert error_code == 0
