From f16bd5e2b99fd10ac0293545b1fefbeed8d1efb4 Mon Sep 17 00:00:00 2001 From: Alok Saldanha Date: Sun, 4 Apr 2021 19:48:13 -0400 Subject: [PATCH] added test for SubprocessBackend.launch --- .github/workflows/pr-checks.yaml | 2 +- tests/test_subprocess_backend.py | 42 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 tests/test_subprocess_backend.py diff --git a/.github/workflows/pr-checks.yaml b/.github/workflows/pr-checks.yaml index 68539ce..26c867e 100644 --- a/.github/workflows/pr-checks.yaml +++ b/.github/workflows/pr-checks.yaml @@ -51,7 +51,7 @@ jobs: run: | eval "$(conda shell.bash hook)" conda activate cellxgene-gateway - coverage report --fail-under 41 + coverage report --fail-under 47 coverage xml -i - name: "Upload coverage to Codecov" diff --git a/tests/test_subprocess_backend.py b/tests/test_subprocess_backend.py new file mode 100644 index 0000000..5c22dbf --- /dev/null +++ b/tests/test_subprocess_backend.py @@ -0,0 +1,42 @@ +import unittest +from unittest.mock import MagicMock, patch + +from cellxgene_gateway.backend_cache import BackendCache +from cellxgene_gateway.cache_entry import CacheEntry +from cellxgene_gateway.cache_key import CacheKey +from cellxgene_gateway.items.file.fileitem import FileItem +from cellxgene_gateway.items.file.fileitem_source import FileItemSource +from cellxgene_gateway.items.item import ItemType +from cellxgene_gateway.process_exception import ProcessException + + +class TestSubprocessBackend(unittest.TestCase): + @patch("subprocess.Popen") + def test_launch_GIVEN_no_stdout_THEN_throw_ProcessException(self, popen): + subprocess = MagicMock() + subprocess.stdout.readline().decode.return_value = "" + subprocess.stderr.read().decode.return_value = "An unexpected error" + popen.return_value = subprocess + + key = CacheKey( + FileItem("/czi/", name="pbmc3k.h5ad", type=ItemType.h5ad), + FileItemSource("/tmp", "local"), + ) + entry = CacheEntry.for_key(key, 8000) + from cellxgene_gateway.subprocess_backend import SubprocessBackend + + backend = SubprocessBackend() + cellxgene_loc = "/some/cellxgene" + scripts = ["http://example.com/script.js", "http://example.com/script2.js"] + + with self.assertRaises(ProcessException) as context: + backend.launch(cellxgene_loc, scripts, entry) + popen.assert_called_once_with( + [ + "yes | /some/cellxgene launch /tmp/czi/pbmc3k.h5ad --port 8000 --host 127.0.0.1 --disable-annotations --scripts http://example.com/script.js --scripts http://example.com/script2.js" + ], + shell=True, + stderr=-1, + stdout=-1, + ) + self.assertEqual("An unexpected error", context.exception.stderr)