diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ea9b343..b63bb40 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,3 +28,29 @@ jobs: export PATH="/usr/share/miniconda/bin:$PATH" source activate black pyflakes spython/oci spython/image spython/instance spython/main + + pytest: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: [3.7, 3.8, 3.9] + + steps: + - uses: actions/checkout@v2 + - uses: eWaterCycle/setup-singularity@1631b12cf3878381179be0eab9624219bc12979e # v6 release + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + sudo ln -s $SINGULARITY_ROOT/bin/singularity /usr/bin/ + python -m pip install --upgrade pip + pip install pytest semver pytest-runner requests + + - name: Run unit tests + run: | + pytest diff --git a/spython/tests/test_client.py b/spython/tests/test_client.py index 5a5e352..7b2aba5 100644 --- a/spython/tests/test_client.py +++ b/spython/tests/test_client.py @@ -43,12 +43,16 @@ def test_docker_pull(docker_container): def test_execute(docker_container): result = Client.execute(docker_container[1], "ls /") print(result) + if isinstance(result, list): + result = "".join(result) assert "tmp\nusr\nvar" in result def test_execute_with_return_code(docker_container): result = Client.execute(docker_container[1], "ls /", return_result=True) print(result) + if isinstance(result["message"], list): + result["message"] = "".join(result["message"]) assert "tmp\nusr\nvar" in result["message"] assert result["return_code"] == 0 diff --git a/spython/tests/test_instances.py b/spython/tests/test_instances.py index d2c9fa0..558ade9 100644 --- a/spython/tests/test_instances.py +++ b/spython/tests/test_instances.py @@ -9,6 +9,15 @@ import pytest from spython.main import Client +# name instance based on Python version in case running in parallel +import sys + +version_string = "%s_%s_%s" % ( + sys.version_info[0], + sys.version_info[1], + sys.version_info[2], +) + def test_instance_class(): instance = Client.instance("docker://ubuntu", start=False) @@ -28,13 +37,10 @@ def test_has_no_instances(): class TestInstanceFuncs(object): @pytest.fixture(autouse=True) - def cleanup(self): - yield - Client.instance_stopall() - def test_instance_cmds(self, docker_container): image = docker_container[1] - myinstance = Client.instance(image) + instance_name = "instance1_" + version_string + myinstance = Client.instance(image, name=instance_name) assert myinstance.get_uri().startswith("instance://") print("...Case 2: List instances") @@ -58,12 +64,13 @@ def test_instance_cmds(self, docker_container): myinstance.stop() instances = Client.instances() assert instances == [] - myinstance1 = Client.instance(image) - myinstance2 = Client.instance(image) + myinstance1 = Client.instance(image, name="instance1_" + version_string) + myinstance2 = Client.instance(image, name="instance2_" + version_string) assert myinstance1 is not None assert myinstance2 is not None instances = Client.instances() assert len(instances) == 2 - Client.instance_stopall() + myinstance1.stop() + myinstance2.stop() instances = Client.instances() assert instances == []