diff --git a/.github/workflows/on_pull_request.yaml b/.github/workflows/on_pull_request.yaml index 54d0180..9b24ff0 100644 --- a/.github/workflows/on_pull_request.yaml +++ b/.github/workflows/on_pull_request.yaml @@ -11,3 +11,8 @@ jobs: permissions: pull-requests: read secrets: inherit + with: + rockcraft-channel: latest/stable + microk8s-channel: 1.26-strict/stable + juju-channel: 3.1/stable + python-version: "3.8" diff --git a/.github/workflows/on_push.yaml b/.github/workflows/on_push.yaml index 9704e46..99b1416 100644 --- a/.github/workflows/on_push.yaml +++ b/.github/workflows/on_push.yaml @@ -14,3 +14,8 @@ jobs: permissions: pull-requests: read secrets: inherit + with: + rockcraft-channel: latest/stable + microk8s-channel: 1.26-strict/stable + juju-channel: 3.1/stable + python-version: "3.8" diff --git a/dex/tests/test_rock.py b/dex/tests/test_rock.py new file mode 100644 index 0000000..e62145a --- /dev/null +++ b/dex/tests/test_rock.py @@ -0,0 +1,41 @@ +# Copyright 2022 Canonical Ltd. +# See LICENSE file for licensing details. +# +# + +from pathlib import Path + +import os +import logging +import random +import pytest +import string +import subprocess +import yaml + +from charmed_kubeflow_chisme.rock import CheckRock + +@pytest.fixture() +def rock_test_env(tmpdir): + """Yields a temporary directory and random docker container name, then cleans them up after.""" + container_name = "".join([str(i) for i in random.choices(string.ascii_lowercase, k=8)]) + yield tmpdir, container_name + + try: + subprocess.run(["docker", "rm", container_name]) + except Exception: + pass + # tmpdir fixture we use here should clean up the other files for us + +@pytest.mark.abort_on_fail +def test_rock(rock_test_env): + """Test rock.""" + temp_dir, container_name = rock_test_env + check_rock = CheckRock("rockcraft.yaml") + rock_image = check_rock.get_name() + rock_version = check_rock.get_version() + LOCAL_ROCK_IMAGE = f"{rock_image}:{rock_version}" + + # create ROCK filesystem + subprocess.run(["docker", "run", LOCAL_ROCK_IMAGE, "exec", "ls", "-la", "/usr/local/bin/docker-entrypoint"], check=True) + subprocess.run(["docker", "run", LOCAL_ROCK_IMAGE, "exec", "ls", "-la", "/usr/local/bin/dex"], check=True) \ No newline at end of file diff --git a/dex/tox.ini b/dex/tox.ini new file mode 100644 index 0000000..c51e20b --- /dev/null +++ b/dex/tox.ini @@ -0,0 +1,62 @@ +# Copyright 2023 Canonical Ltd. +# See LICENSE file for licensing details. +[tox] +skipsdist = True +skip_missing_interpreters = True +envlist = pack, export-to-docker, sanity, integration + +[testenv] +setenv = + PYTHONPATH={toxinidir} + PYTHONBREAKPOINT=ipdb.set_trace + +[testenv:pack] +passenv = * +allowlist_externals = + rockcraft +commands = + rockcraft pack + +[testenv:export-to-docker] +passenv = * +allowlist_externals = + bash + skopeo + yq +commands = + # export already packed rock to docker + bash -c 'NAME=$(yq eval .name rockcraft.yaml) && \ + VERSION=$(yq eval .version rockcraft.yaml) && \ + ARCH=$(yq eval ".platforms | keys | .[0]" rockcraft.yaml) && \ + ROCK="$\{NAME\}_$\{VERSION\}_$\{ARCH\}.rock" && \ + DOCKER_IMAGE=$NAME:$VERSION && \\ + echo "Exporting $ROCK to docker as $DOCKER_IMAGE" && \ + skopeo --insecure-policy copy oci-archive:$ROCK docker-daemon:$DOCKER_IMAGE' + +[testenv:sanity] +passenv = * +deps = + pytest + charmed-kubeflow-chisme +allowlist_externals = + echo +commands = + # run rock tests + pytest -v --tb native --show-capture=all --log-cli-level=INFO {posargs} {toxinidir}/tests + + +[testenv:integration] +passenv = * +allowlist_externals = + echo + bash + git + rm + tox +deps = + juju<4.0 + pytest + pytest-operator + ops +commands = + echo "WARNING: This is a placeholder test - no test is implemented here."