diff env/lib/python3.9/site-packages/cwltool/tests/test_udocker.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/cwltool/tests/test_udocker.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,101 @@
+"""Test optional udocker feature."""
+import copy
+import os
+import subprocess
+import sys
+from pathlib import Path
+
+import pytest
+from _pytest.tmpdir import TempPathFactory
+
+from .util import get_data, get_main_output
+
+LINUX = sys.platform in ("linux", "linux2")
+
+
+@pytest.fixture(scope="session")
+def udocker(tmp_path_factory: TempPathFactory) -> str:
+    """Udocker fixture, returns the path to the udocker script."""
+    test_cwd = os.getcwd()
+    test_environ = copy.copy(os.environ)
+    docker_install_dir = str(tmp_path_factory.mktemp("udocker"))
+    os.chdir(docker_install_dir)
+
+    url = "https://raw.githubusercontent.com/jorge-lip/udocker-builds/master/tarballs/udocker-1.1.4.tar.gz"
+    install_cmds = [
+        ["curl", url, "-o", "./udocker-tarball.tgz"],
+        ["tar", "xzvf", "udocker-tarball.tgz", "udocker"],
+        [
+            "bash",
+            "-c",
+            "UDOCKER_TARBALL={}/udocker-tarball.tgz ./udocker install".format(
+                docker_install_dir
+            ),
+        ],
+    ]
+
+    test_environ["UDOCKER_DIR"] = os.path.join(docker_install_dir, ".udocker")
+    test_environ["HOME"] = docker_install_dir
+
+    results = []
+    for _ in range(3):
+        results = [subprocess.call(cmds, env=test_environ) for cmds in install_cmds]
+        if sum(results) == 0:
+            break
+        subprocess.call(["rm", "./udocker"])
+
+    assert sum(results) == 0
+
+    udocker_path = os.path.join(docker_install_dir, "udocker")
+    os.chdir(test_cwd)
+    return udocker_path
+
+
+@pytest.mark.skipif(not LINUX, reason="LINUX only")
+def test_udocker_usage_should_not_write_cid_file(udocker: str, tmp_path: Path) -> None:
+    """Confirm that no cidfile is made when udocker is used."""
+    cwd = Path.cwd()
+    os.chdir(tmp_path)
+
+    test_file = "tests/wf/wc-tool.cwl"
+    job_file = "tests/wf/wc-job.json"
+    error_code, stdout, stderr = get_main_output(
+        [
+            "--debug",
+            "--default-container",
+            "debian",
+            "--user-space-docker-cmd=" + udocker,
+            get_data(test_file),
+            get_data(job_file),
+        ]
+    )
+
+    cidfiles_count = sum(1 for _ in tmp_path.glob("*.cid"))
+    os.chdir(cwd)
+
+    assert "completed success" in stderr, stderr
+    assert cidfiles_count == 0
+
+
+@pytest.mark.skipif(
+    not LINUX or "GITHUB" in os.environ,
+    reason="Linux only",
+)
+def test_udocker_should_display_memory_usage(udocker: str, tmp_path: Path) -> None:
+    """Confirm that memory ussage is logged even with udocker."""
+    cwd = Path.cwd()
+    os.chdir(tmp_path)
+    error_code, stdout, stderr = get_main_output(
+        [
+            "--enable-ext",
+            "--default-container=debian",
+            "--user-space-docker-cmd=" + udocker,
+            get_data("tests/wf/timelimit.cwl"),
+            "--sleep_time",
+            "10",
+        ]
+    )
+    os.chdir(cwd)
+
+    assert "completed success" in stderr, stderr
+    assert "Max memory" in stderr, stderr