Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/cwltool/tests/test_tmpdir.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
| author | shellac |
|---|---|
| date | Mon, 22 Mar 2021 18:12:50 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4f3585e2f14b |
|---|---|
| 1 """Test that all temporary directories respect the --tmpdir-prefix and --tmp-outdir-prefix options.""" | |
| 2 import subprocess | |
| 3 import sys | |
| 4 from pathlib import Path | |
| 5 from typing import List, cast | |
| 6 | |
| 7 from _pytest.monkeypatch import MonkeyPatch | |
| 8 from ruamel.yaml.comments import CommentedMap | |
| 9 from schema_salad.avro import schema | |
| 10 from schema_salad.sourceline import cmap | |
| 11 | |
| 12 from cwltool.builder import Builder | |
| 13 from cwltool.command_line_tool import CommandLineTool | |
| 14 from cwltool.context import LoadingContext, RuntimeContext | |
| 15 from cwltool.docker import DockerCommandLineJob | |
| 16 from cwltool.job import JobBase | |
| 17 from cwltool.pathmapper import MapperEnt, PathMapper | |
| 18 from cwltool.stdfsaccess import StdFsAccess | |
| 19 from cwltool.update import INTERNAL_VERSION | |
| 20 from cwltool.utils import create_tmp_dir | |
| 21 | |
| 22 from .util import get_data, needs_docker | |
| 23 | |
| 24 | |
| 25 def test_docker_commandLineTool_job_tmpdir_prefix(tmp_path: Path) -> None: | |
| 26 """Test that docker enabled CommandLineTool respects temp directory directives.""" | |
| 27 loading_context = LoadingContext( | |
| 28 { | |
| 29 "metadata": { | |
| 30 "cwlVersion": INTERNAL_VERSION, | |
| 31 "http://commonwl.org/cwltool#original_cwlVersion": INTERNAL_VERSION, | |
| 32 } | |
| 33 } | |
| 34 ) | |
| 35 clt = CommandLineTool( | |
| 36 cast( | |
| 37 CommentedMap, | |
| 38 cmap( | |
| 39 { | |
| 40 "cwlVersion": INTERNAL_VERSION, | |
| 41 "class": "CommandLineTool", | |
| 42 "inputs": [], | |
| 43 "outputs": [], | |
| 44 "requirements": [ | |
| 45 {"class": "DockerRequirement", "dockerPull": "debian:stable"} | |
| 46 ], | |
| 47 } | |
| 48 ), | |
| 49 ), | |
| 50 loading_context, | |
| 51 ) | |
| 52 tmpdir_prefix = str(tmp_path / "1") | |
| 53 tmp_outdir_prefix = str(tmp_path / "2") | |
| 54 runtime_context = RuntimeContext( | |
| 55 { | |
| 56 "tmpdir_prefix": tmpdir_prefix, | |
| 57 "tmp_outdir_prefix": tmp_outdir_prefix, | |
| 58 } | |
| 59 ) | |
| 60 job = next(clt.job({}, None, runtime_context)) | |
| 61 assert isinstance(job, JobBase) | |
| 62 assert job.stagedir and job.stagedir.startswith(tmpdir_prefix) | |
| 63 assert job.tmpdir and job.tmpdir.startswith(tmpdir_prefix) | |
| 64 assert job.outdir and job.outdir.startswith(tmp_outdir_prefix) | |
| 65 | |
| 66 | |
| 67 def test_commandLineTool_job_tmpdir_prefix(tmp_path: Path) -> None: | |
| 68 """Test that non-docker enabled CommandLineTool respects temp directory directives.""" | |
| 69 loading_context = LoadingContext( | |
| 70 { | |
| 71 "metadata": { | |
| 72 "cwlVersion": INTERNAL_VERSION, | |
| 73 "http://commonwl.org/cwltool#original_cwlVersion": INTERNAL_VERSION, | |
| 74 } | |
| 75 } | |
| 76 ) | |
| 77 clt = CommandLineTool( | |
| 78 cast( | |
| 79 CommentedMap, | |
| 80 cmap( | |
| 81 { | |
| 82 "cwlVersion": INTERNAL_VERSION, | |
| 83 "class": "CommandLineTool", | |
| 84 "inputs": [], | |
| 85 "outputs": [], | |
| 86 "requirements": [], | |
| 87 } | |
| 88 ), | |
| 89 ), | |
| 90 loading_context, | |
| 91 ) | |
| 92 tmpdir_prefix = str(tmp_path / "1") | |
| 93 tmp_outdir_prefix = str(tmp_path / "2") | |
| 94 runtime_context = RuntimeContext( | |
| 95 { | |
| 96 "tmpdir_prefix": tmpdir_prefix, | |
| 97 "tmp_outdir_prefix": tmp_outdir_prefix, | |
| 98 } | |
| 99 ) | |
| 100 job = next(clt.job({}, None, runtime_context)) | |
| 101 assert isinstance(job, JobBase) | |
| 102 assert job.stagedir and job.stagedir.startswith(tmpdir_prefix) | |
| 103 assert job.tmpdir and job.tmpdir.startswith(tmpdir_prefix) | |
| 104 assert job.outdir and job.outdir.startswith(tmp_outdir_prefix) | |
| 105 | |
| 106 | |
| 107 @needs_docker | |
| 108 def test_dockerfile_tmpdir_prefix(tmp_path: Path, monkeypatch: MonkeyPatch) -> None: | |
| 109 """Test that DockerCommandLineJob.get_image respects temp directory directives.""" | |
| 110 monkeypatch.setattr( | |
| 111 target=subprocess, name="check_call", value=lambda *args, **kwargs: True | |
| 112 ) | |
| 113 tmp_outdir_prefix = tmp_path / "1" | |
| 114 assert DockerCommandLineJob.get_image( | |
| 115 { | |
| 116 "class": "DockerRequirement", | |
| 117 "dockerFile": "FROM debian:stable", | |
| 118 "dockerImageId": sys._getframe().f_code.co_name, | |
| 119 }, | |
| 120 pull_image=True, | |
| 121 force_pull=True, | |
| 122 tmp_outdir_prefix=str(tmp_outdir_prefix), | |
| 123 ) | |
| 124 children = sorted(tmp_outdir_prefix.parent.glob("*")) | |
| 125 assert len(children) == 1 | |
| 126 subdir = tmp_path / children[0] | |
| 127 assert len(sorted(subdir.glob("*"))) == 1 | |
| 128 assert (subdir / "Dockerfile").exists() | |
| 129 | |
| 130 | |
| 131 def test_docker_tmpdir_prefix(tmp_path: Path) -> None: | |
| 132 """Test that DockerCommandLineJob respects temp directory directives.""" | |
| 133 (tmp_path / "3").mkdir() | |
| 134 tmpdir_prefix = str(tmp_path / "3" / "ttmp") | |
| 135 runtime_context = RuntimeContext( | |
| 136 {"tmpdir_prefix": tmpdir_prefix, "user_space_docker_cmd": None} | |
| 137 ) | |
| 138 builder = Builder( | |
| 139 {}, | |
| 140 [], | |
| 141 [], | |
| 142 {}, | |
| 143 schema.Names(), | |
| 144 [], | |
| 145 [], | |
| 146 {}, | |
| 147 None, | |
| 148 None, | |
| 149 StdFsAccess, | |
| 150 StdFsAccess(""), | |
| 151 None, | |
| 152 0.1, | |
| 153 False, | |
| 154 False, | |
| 155 False, | |
| 156 "", | |
| 157 runtime_context.get_outdir(), | |
| 158 runtime_context.get_tmpdir(), | |
| 159 runtime_context.get_stagedir(), | |
| 160 INTERNAL_VERSION, | |
| 161 ) | |
| 162 job = DockerCommandLineJob(builder, {}, PathMapper, [], [], "") | |
| 163 runtime: List[str] = [] | |
| 164 | |
| 165 volume_writable_file = MapperEnt( | |
| 166 resolved=get_data("tests/2.fastq"), target="foo", type=None, staged=None | |
| 167 ) | |
| 168 (tmp_path / "1").mkdir() | |
| 169 job.add_writable_file_volume( | |
| 170 runtime, volume_writable_file, None, str(tmp_path / "1" / "writable_file") | |
| 171 ) | |
| 172 children = sorted((tmp_path / "1").glob("*")) | |
| 173 assert len(children) == 1 | |
| 174 subdir = tmp_path / children[0] | |
| 175 assert subdir.name.startswith("writable_file") | |
| 176 assert len(sorted(subdir.glob("*"))) == 1 | |
| 177 assert (subdir / "2.fastq").exists() | |
| 178 | |
| 179 resolved_writable_dir = tmp_path / "data_orig" | |
| 180 resolved_writable_dir.mkdir(parents=True) | |
| 181 volume_dir = MapperEnt( | |
| 182 resolved=str(resolved_writable_dir), target="bar", type=None, staged=None | |
| 183 ) | |
| 184 (tmp_path / "2").mkdir() | |
| 185 job.add_writable_directory_volume( | |
| 186 runtime, volume_dir, None, str(tmp_path / "2" / "dir") | |
| 187 ) | |
| 188 children = sorted((tmp_path / "2").glob("*")) | |
| 189 assert len(children) == 1 | |
| 190 subdir = tmp_path / "2" / children[0] | |
| 191 assert subdir.name.startswith("dir") | |
| 192 assert len(sorted(subdir.glob("*"))) == 1 | |
| 193 assert (subdir / "data_orig").exists() | |
| 194 | |
| 195 cidfile = job.create_runtime({}, runtime_context)[1] | |
| 196 assert cidfile and cidfile.startswith(tmpdir_prefix) | |
| 197 | |
| 198 volume_file = MapperEnt(resolved="Hoopla!", target="baz", type=None, staged=None) | |
| 199 (tmp_path / "4").mkdir() | |
| 200 job.create_file_and_add_volume( | |
| 201 runtime, volume_file, None, None, str(tmp_path / "4" / "file") | |
| 202 ) | |
| 203 children = sorted((tmp_path / "4").glob("*")) | |
| 204 assert len(children) == 1 | |
| 205 subdir = tmp_path / "4" / children[0] | |
| 206 assert subdir.name.startswith("file") | |
| 207 assert len(sorted(subdir.glob("*"))) == 1 | |
| 208 assert (subdir / "baz").exists() | |
| 209 | |
| 210 | |
| 211 def test_runtimeContext_respects_tmpdir_prefix(tmp_path: Path) -> None: | |
| 212 """Test that RuntimeContext helper methods respects tmpdir_prefix.""" | |
| 213 tmpdir_prefix = str(tmp_path / "foo") | |
| 214 runtime_context = RuntimeContext({"tmpdir_prefix": tmpdir_prefix}) | |
| 215 assert runtime_context.get_tmpdir().startswith(tmpdir_prefix) | |
| 216 assert runtime_context.get_stagedir().startswith(tmpdir_prefix) | |
| 217 assert runtime_context.create_tmpdir().startswith(tmpdir_prefix) | |
| 218 assert create_tmp_dir(tmpdir_prefix).startswith(tmpdir_prefix) | |
| 219 | |
| 220 | |
| 221 def test_runtimeContext_respects_tmp_outdir_prefix(tmp_path: Path) -> None: | |
| 222 """Test that RuntimeContext helper methods respects tmp_outdir_prefix.""" | |
| 223 tmpdir_prefix = str(tmp_path / "foo") | |
| 224 runtime_context = RuntimeContext({"tmp_outdir_prefix": tmpdir_prefix}) | |
| 225 assert runtime_context.get_outdir().startswith(tmpdir_prefix) | |
| 226 assert runtime_context.create_outdir().startswith(tmpdir_prefix) |
