diff --git a/test/test_build.py b/test/test_build.py new file mode 100644 index 0000000..3371f80 --- /dev/null +++ b/test/test_build.py @@ -0,0 +1,63 @@ +""" +Test that nginx-proxy-tester can build successfully +""" +import pytest +import docker +import re + +client = docker.from_env() + +@pytest.fixture(scope="session") +def docker_build(request): + # Define Dockerfile path + dockerfile_path = "requirements/" + dockerfile_name="Dockerfile-nginx-proxy-tester" + + # Build the Docker image + image, logs = client.images.build( + path=dockerfile_path, + dockerfile=dockerfile_name, + rm=True, # Remove intermediate containers + tag="nginx-proxy-tester-ci", # Tag for the built image + ) + + # Check for build success + for log in logs: + if "stream" in log: + print(log["stream"].strip()) + if "error" in log: + raise Exception(log["error"]) + + def teardown(): + # Clean up after teardown + client.images.remove(image.id, force=True) + + request.addfinalizer(teardown) + + # Return the image name + return "nginx-proxy-tester-ci" + +def test_build_nginx_proxy_tester(docker_build): + assert docker_build == "nginx-proxy-tester-ci" + +def test_run_nginx_proxy_tester(docker_build): + # Run the container with 'pytest -v' command to output version info + container = client.containers.run("nginx-proxy-tester-ci", + command="pytest -V", + detach=True, + # auto_remove=True + ) + + # Wait for the container to finish and get the exit code + result = container.wait() + exit_code = result.get("StatusCode", 1) # Default to 1 (error) if not found + + # Get the output logs from the container + output = container.logs().decode("utf-8").strip() + + # Clean up: Remove the container + container.remove() + + # Assertions + assert exit_code == 0, "Container exited with a non-zero exit code" + assert re.search(r"pytest\s\d+\.\d+\.\d+", output)