diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 36e6273..598f139 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -36,6 +36,9 @@ jobs: pip install -r python-requirements.txt working-directory: test/requirements + - name: Pull nginx:alpine image + run: docker pull nginx:alpine + - name: Build Docker web server image run: make build-webserver diff --git a/test/test_ipv6.py b/test/test_ipv6/test_ipv6.py similarity index 100% rename from test/test_ipv6.py rename to test/test_ipv6/test_ipv6.py diff --git a/test/test_ipv6.yml b/test/test_ipv6/test_ipv6.yml similarity index 100% rename from test/test_ipv6.yml rename to test/test_ipv6/test_ipv6.yml diff --git a/test/test_ipv6/test_ipv6_prefer_ipv4_network.py b/test/test_ipv6/test_ipv6_prefer_ipv4_network.py new file mode 100644 index 0000000..9a11fac --- /dev/null +++ b/test/test_ipv6/test_ipv6_prefer_ipv4_network.py @@ -0,0 +1,19 @@ +import pytest + + +def test_forwards_to_ipv4_only_network(docker_compose, nginxproxy): + r = nginxproxy.get("http://ipv4only.nginx-proxy.tld/port") + assert r.status_code == 200 + assert r.text == "answer from port 80\n" + + +def test_forwards_to_dualstack_network(docker_compose, nginxproxy): + r = nginxproxy.get("http://dualstack.nginx-proxy.tld") + assert r.status_code == 200 + assert "Welcome to nginx!" in r.text + + +def test_dualstack_network_prefer_ipv4_config(docker_compose, nginxproxy): + conf = nginxproxy.get_conf().decode('ASCII') + assert "IPv6 address: fd00:cafe:face:feed::2 (ignored; reachable but IPv4 prefered)" in conf + assert "server 172.16.20.2:80;" in conf diff --git a/test/test_ipv6/test_ipv6_prefer_ipv4_network.yml b/test/test_ipv6/test_ipv6_prefer_ipv4_network.yml new file mode 100644 index 0000000..8c36dc5 --- /dev/null +++ b/test/test_ipv6/test_ipv6_prefer_ipv4_network.yml @@ -0,0 +1,45 @@ +version: "2" + +networks: + ipv4net: + ipam: + config: + - subnet: 172.16.10.0/24 + dualstacknet: + enable_ipv6: true + ipam: + config: + - subnet: 172.16.20.0/24 + - subnet: fd00:cafe:face:feed::/64 + +services: + ipv4only: + image: web + expose: + - "80" + environment: + WEB_PORTS: 80 + VIRTUAL_HOST: ipv4only.nginx-proxy.tld + networks: + ipv4net: + ipv4_address: 172.16.10.2 + + dualstack: + image: nginx:alpine + environment: + VIRTUAL_HOST: dualstack.nginx-proxy.tld + networks: + dualstacknet: + ipv4_address: 172.16.20.2 + ipv6_address: fd00:cafe:face:feed::2 + + sut: + image: nginxproxy/nginx-proxy:test + volumes: + - /var/run/docker.sock:/tmp/docker.sock:ro + networks: + ipv4net: + ipv4_address: 172.16.10.3 + dualstacknet: + ipv4_address: 172.16.20.3 + ipv6_address: fd00:cafe:face:feed::3 diff --git a/test/test_ipv6/test_ipv6_prefer_ipv6_network.py b/test/test_ipv6/test_ipv6_prefer_ipv6_network.py new file mode 100644 index 0000000..09a8dde --- /dev/null +++ b/test/test_ipv6/test_ipv6_prefer_ipv6_network.py @@ -0,0 +1,19 @@ +import pytest + + +def test_forwards_to_ipv4_only_network(docker_compose, nginxproxy): + r = nginxproxy.get("http://ipv4only.nginx-proxy.tld/port") + assert r.status_code == 200 + assert r.text == "answer from port 80\n" + + +def test_forwards_to_dualstack_network(docker_compose, nginxproxy): + r = nginxproxy.get("http://dualstack.nginx-proxy.tld") + assert r.status_code == 200 + assert "Welcome to nginx!" in r.text + + +def test_dualstack_network_prefer_ipv6_config(docker_compose, nginxproxy): + conf = nginxproxy.get_conf().decode('ASCII') + assert "IPv4 address: 172.16.20.2 (ignored; reachable but IPv6 prefered)" in conf + assert "server [fd00:cafe:face:feed::2]:80;" in conf diff --git a/test/test_ipv6/test_ipv6_prefer_ipv6_network.yml b/test/test_ipv6/test_ipv6_prefer_ipv6_network.yml new file mode 100644 index 0000000..236d8d8 --- /dev/null +++ b/test/test_ipv6/test_ipv6_prefer_ipv6_network.yml @@ -0,0 +1,47 @@ +version: "2" + +networks: + ipv4net: + ipam: + config: + - subnet: 172.16.10.0/24 + dualstacknet: + enable_ipv6: true + ipam: + config: + - subnet: 172.16.20.0/24 + - subnet: fd00:cafe:face:feed::/64 + +services: + ipv4only: + image: web + expose: + - "80" + environment: + WEB_PORTS: 80 + VIRTUAL_HOST: ipv4only.nginx-proxy.tld + networks: + ipv4net: + ipv4_address: 172.16.10.2 + + dualstack: + image: nginx:alpine + environment: + VIRTUAL_HOST: dualstack.nginx-proxy.tld + networks: + dualstacknet: + ipv4_address: 172.16.20.2 + ipv6_address: fd00:cafe:face:feed::2 + + sut: + image: nginxproxy/nginx-proxy:test + volumes: + - /var/run/docker.sock:/tmp/docker.sock:ro + environment: + PREFER_IPV6_NETWORK: "true" + networks: + ipv4net: + ipv4_address: 172.16.10.3 + dualstacknet: + ipv4_address: 172.16.20.3 + ipv6_address: fd00:cafe:face:feed::3