diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 77474f295..6f9578ac1 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -364,9 +364,15 @@ jobs: ignore-unfixed: false severity: UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL + # Prepare tests + - name: Install tests dependencies + run: pip3 install -r ./tests/requirements.txt + # Run tests - name: Run Docker tests - run: ./tests/docker.sh ${{ env.BUILD_MODE }} + run: ./tests/main.py "docker" + - name: Temp stop tests + run: exit 1 - name: Run autoconf tests run: ./tests/autoconf.sh ${{ env.BUILD_MODE }} - name: Run Swarm tests diff --git a/tests/new/DockerTest.py b/tests/DockerTest.py similarity index 62% rename from tests/new/DockerTest.py rename to tests/DockerTest.py index b02afad9c..6f3d2efbe 100644 --- a/tests/new/DockerTest.py +++ b/tests/DockerTest.py @@ -1,6 +1,7 @@ from Test import Test from os.path import isdir, join, isfile -from os import chown, walk, getenv +from os import chown, walk, getenv, listdir +from shutil import copytree from traceback import format_exc from subprocess import run @@ -33,6 +34,7 @@ class DockerTest(Test) : super()._setup_test() test = "/tmp/tests/" + self._name compose = "/tmp/tests/" + self._name + "/docker-compose.yml" + example_data = "./examples/" + self._name + "/bw-data" self._replace_in_file(compose, r"bunkerity/bunkerweb:.*$", "10.20.1.1:5000/bw-tests:latest") self._replace_in_file(compose, r"\./bw\-data:/", "/tmp/bw-data:/") self._replace_in_file(compose, r"\- bw_data:/", "/tmp/bw-data:/") @@ -42,7 +44,18 @@ class DockerTest(Test) : setup = test + "/setup-docker.sh" if isfile(setup) : run("./docker-setup.sh", cwd=test, shell=True, check=True) - + if isdir(example_data) : + for cp_dir in listdir(example_data) : + if isdir(join(example_data, cp_dir)) : + copytree(join(example_data, cp_dir), join("/tmp/bw-data", cp_dir)) + cmd = "docker-compose pull" + proc = run(cmd.split(" "), shell=True, cwd=test) + if proc.returncode != 0 : + raise("docker-compose pull failed") + cmd = "docker-compose up -d" + proc = run(cmd.split(" "), shell=True, cwd=test) + if proc.returncode != 0 : + raise("docker-compose up failed") except : self._log("exception while running DockerTest._setup_test()\n" + format_exc(), error=True) return False @@ -50,4 +63,15 @@ class DockerTest(Test) : def _cleanup_test(self) : - pass \ No newline at end of file + try : + test = "/tmp/tests/" + self._name + cmd = "docker-compose down -v" + proc = run(cmd.split(" "), shell=True, cwd=test) + if proc.returncode != 0 : + raise("docker-compose down failed") + super()._cleanup_test() + except : + self._log("exception while running DockerTest._setup_test()\n" + format_exc(), error=True) + return False + return True + \ No newline at end of file diff --git a/tests/new/Test.py b/tests/Test.py similarity index 100% rename from tests/new/Test.py rename to tests/Test.py diff --git a/tests/main.py b/tests/main.py new file mode 100755 index 000000000..6d354d19e --- /dev/null +++ b/tests/main.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +from sys import path, argv, exit +from glob import glob +from os import getcwd, isfile +path.append(getcwd() + "/utils") +path.append(getcwd() + "/tests") + +from DockerTest import DockerTest +from logger import log + +if len(argv) != 2 : + log("TESTS", "❌", "Missing type argument") + exit(1) + +test_type = argv[1] +if not test_type in ["linux", "docker", "swarm", "kubernetes", "ansible"] : + log("TESTS", "❌", "Wrong type argument " + test_type) + exit(1) + +log("TESTS", "ℹ️", "Starting tests for " + test_type + " ...") +if not Test.init() : + log("TESTS", "❌", "Test.init() failed") + exit(1) + +for example in glob("./examples/*") : + if isfile(example + "/tests.json") : + try : + with open(example + "/tests.json") as f : + tests = loads(f.read()) + if not test_type in tests["kinds"] : + log("TESTS", "ℹ️", "Skipping tests for " + tests["name"] + " (not in kinds)") + continue + for test in tests["tests"] : + test_obj = None + if test_obj == "docker" : + test_obj = DockerTest(tests["name"], tests["timeout"], tests["tests"]) + if not test_obj.run_tests() : + log("TESTS", "❌", "Tests failed for " + tests["name"]) + exit(1) + except : + log("TESTS", "❌", "Exception while executing test for example " + example + " : " + traceback.format_exc()) + +log("TESTS", "ℹ️", "All tests finished for " + test_type + " !") \ No newline at end of file diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100644 index 000000000..663bd1f6a --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1 @@ +requests \ No newline at end of file