123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- """
- Test that nginx-proxy-tester can build successfully
- """
- import pathlib
- import re
- import docker
- import pytest
- client = docker.from_env()
- @pytest.fixture(scope = "session")
- def docker_build(request):
- # Define Dockerfile path
- current_file_path = pathlib.Path(__file__)
- dockerfile_path = current_file_path.parent.parent.joinpath("requirements")
- dockerfile_name = "Dockerfile-nginx-proxy-tester"
- # Build the Docker image
- image, logs = client.images.build(
- path = dockerfile_path.as_posix(),
- 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,
- )
- # 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)
|