1
0
mirror of https://github.com/thib8956/nginx-proxy synced 2024-11-22 11:56:31 +00:00
nginx-proxy/test2
2017-02-16 21:40:54 +01:00
..
certs TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
requirements TESTS: add script to run the test suite from a docker container 2017-02-16 21:40:54 +01:00
test_custom TESTS: add test for custom proxy-wide configuration 2017-02-16 21:40:54 +01:00
conftest.py TESTS: add support for compose syntax v2 2017-02-16 21:40:54 +01:00
Makefile TESTS: add verbosity 2017-02-16 21:40:54 +01:00
nginx-proxy-tester.sh TESTS: fix passing pytests args to nginx-proxy-tester script 2017-02-16 21:40:54 +01:00
README.md TESTS: add script to run the test suite from a docker container 2017-02-16 21:40:54 +01:00
test_composev2.py TESTS: add support for compose syntax v2 2017-02-16 21:40:54 +01:00
test_composev2.yml TESTS: add support for compose syntax v2 2017-02-16 21:40:54 +01:00
test_default-host.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_default-host.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_DOCKER_HOST_unix_socket.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_DOCKER_HOST_unix_socket.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_headers_http.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_headers_http.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_headers_https.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_headers_https.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-hosts.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-hosts.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-ports-default-80.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-ports-default-80.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-ports-single-port-not-80.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-ports-single-port-not-80.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-ports-VIRTUAL_PORT.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_multiple-ports-VIRTUAL_PORT.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_nominal.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_nominal.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_ssl_nohttp.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_ssl_nohttp.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_ssl_nohttps.py TESTS: port tests for #590 to docker-compose test 2017-02-16 21:40:54 +01:00
test_ssl_nohttps.yml TESTS: port tests for #590 to docker-compose test 2017-02-16 21:40:54 +01:00
test_ssl_noredirect.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_ssl_noredirect.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_ssl_wildcard.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_ssl_wildcard.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_wildcard_host.py TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00
test_wildcard_host.yml TESTS: rewrite tests using pytest and docker-compose 2017-02-16 21:40:54 +01:00

Nginx proxy test suite

Install requirements

You need python 2.7 and pip installed. Then run the commands:

requirements/build.sh
pip install -r requirements/python-requirements.txt

If you can't install those requirements on your computer, you can alternatively use the nginx-proxy-tester.sh script which will run the tests from a Docker container which has those requirements.

Prepare the nginx-proxy test image

docker build -t jwilder/nginx-proxy:test ..

make sure to tag that test image exactly jwilder/nginx-proxy:test or the test suite won't work.

Run the test suite

pytest

need more verbosity ?

pytest -s

Run one single test module

pytest test_nominal.py

Write a test module

This test suite uses pytest. The conftest.py file will be automatically loaded by pytest and will provide you with two useful pytest fixtures:

  • docker_compose
  • nginxproxy

Also conftest.py alters the way the python interpreter resolves domain names to IP addresses in such a way that any domain name containing the substring nginx-proxy will resolve to the IP address of the container that was created from the jwilder/nginx-proxy:test image.

So all the following domain names will resolve to the nginx-proxy container in tests:

  • nginx-proxy
  • nginx-proxy.com
  • www.nginx-proxy.com
  • www.nginx-proxy.test
  • www.nginx-proxy
  • whatever.nginx-proxyooooooo
  • ...

docker_compose fixture

When using the docker_compose fixture in a test, pytest will try to find a yml file named after your test module filename. For instance, if your test module is test_example.py, then the docker_compose fixture will try to load a test_example.yml docker compose file.

The only requirement within that compose file is to have a container declared from the docker image jwilder/nginx-proxy:test.

Once the docker compose file found, the fixture will remove all containers, run docker-compose up, and finally your test will be executed.

The fixture will run the docker-compose command with the -f option to load the given compose file. So you can test your docker compose file syntax by running it yourself with:

docker-compose -f test_example.yml up -d

nginxproxy fixture

The nginxproxy fixture will provide you with a replacement for the python requests module. This replacement will just repeat up to 30 times a requests if it receives the HTTP error 404 or 502. This error occurs when you try to send queries to nginx-proxy too early after the container creation.

Also this requests replacement is preconfigured to use the Certificate Authority root certificate certs/ca-root.crt to validate https connections.

The web docker image

When you ran the requirements/build.sh script earlier, you built a web docker image which is convenient for running a small web server in a container. This image can produce containers that listens on multiple ports at the same time.

Testing TLS

If you need to create server certificates, use the certs/create_server_certificate.sh script. Pytest will be able to validate any certificate issued from this script.