test_http.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import os
  2. import pytest
  3. def test_arbitrary_headers_are_passed_on(docker_compose, nginxproxy):
  4. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'Foo': 'Bar'})
  5. assert r.status_code == 200
  6. assert "Foo: Bar\n" in r.text
  7. ##### Testing the handling of X-Forwarded-For #####
  8. def test_X_Forwarded_For_is_generated(docker_compose, nginxproxy):
  9. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  10. assert r.status_code == 200
  11. assert "X-Forwarded-For:" in r.text
  12. def test_X_Forwarded_For_is_passed_on(docker_compose, nginxproxy):
  13. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'X-Forwarded-For': '1.2.3.4'})
  14. assert r.status_code == 200
  15. assert "X-Forwarded-For: 1.2.3.4, " in r.text
  16. ##### Testing the handling of X-Forwarded-Proto #####
  17. def test_X_Forwarded_Proto_is_generated(docker_compose, nginxproxy):
  18. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  19. assert r.status_code == 200
  20. assert "X-Forwarded-Proto: http" in r.text
  21. def test_X_Forwarded_Proto_is_passed_on(docker_compose, nginxproxy):
  22. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'X-Forwarded-Proto': 'f00'})
  23. assert r.status_code == 200
  24. assert "X-Forwarded-Proto: f00\n" in r.text
  25. ##### Testing the handling of X-Forwarded-Host #####
  26. def test_X_Forwarded_Host_is_generated(docker_compose, nginxproxy):
  27. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  28. assert r.status_code == 200
  29. assert "X-Forwarded-Host: web.nginx-proxy.tld\n" in r.text
  30. def test_X_Forwarded_Host_is_passed_on(docker_compose, nginxproxy):
  31. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'X-Forwarded-Host': 'example.com'})
  32. assert r.status_code == 200
  33. assert "X-Forwarded-Host: example.com\n" in r.text
  34. ##### Testing the handling of X-Forwarded-Port #####
  35. def test_X_Forwarded_Port_is_generated(docker_compose, nginxproxy):
  36. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  37. assert r.status_code == 200
  38. assert "X-Forwarded-Port: 80\n" in r.text
  39. def test_X_Forwarded_Port_is_passed_on(docker_compose, nginxproxy):
  40. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'X-Forwarded-Port': '1234'})
  41. assert r.status_code == 200
  42. assert "X-Forwarded-Port: 1234\n" in r.text
  43. ##### Testing the handling of X-Forwarded-Ssl #####
  44. def test_X_Forwarded_Ssl_is_generated(docker_compose, nginxproxy):
  45. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  46. assert r.status_code == 200
  47. assert "X-Forwarded-Ssl: off\n" in r.text
  48. def test_X_Forwarded_Ssl_is_overwritten(docker_compose, nginxproxy):
  49. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'X-Forwarded-Ssl': 'f00'})
  50. assert r.status_code == 200
  51. assert "X-Forwarded-Ssl: off\n" in r.text
  52. ##### Other headers
  53. def test_X_Real_IP_is_generated(docker_compose, nginxproxy):
  54. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  55. assert r.status_code == 200
  56. assert "X-Real-IP: " in r.text
  57. def test_Host_is_passed_on(docker_compose, nginxproxy):
  58. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  59. assert r.status_code == 200
  60. assert "Host: web.nginx-proxy.tld" in r.text
  61. def test_httpoxy_safe(docker_compose, nginxproxy):
  62. """
  63. See https://httpoxy.org/
  64. nginx-proxy should suppress the `Proxy` header
  65. """
  66. r = nginxproxy.get("http://web.nginx-proxy.tld/headers", headers={'Proxy': 'tcp://some.hacker.com'})
  67. assert r.status_code == 200
  68. assert "Proxy:" not in r.text
  69. @pytest.mark.xfail(
  70. condition = os.environ.get("COMPOSE_PROFILES") == "separateContainers",
  71. reason = "This test is expected to fail when using separate containers",
  72. )
  73. def test_no_host_server_tokens_off(docker_compose, nginxproxy):
  74. ip = nginxproxy.get_ip()
  75. r = nginxproxy.get(f"http://{ip}/headers", expected_status_code=503)
  76. assert r.status_code == 503
  77. assert r.headers["Server"] == "nginx"
  78. def test_server_tokens_on(docker_compose, nginxproxy):
  79. r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
  80. assert r.status_code == 200
  81. assert "Host: web.nginx-proxy.tld" in r.text
  82. assert r.headers["Server"].startswith("nginx/")
  83. def test_server_tokens_off(docker_compose, nginxproxy):
  84. r = nginxproxy.get("http://web-server-tokens-off.nginx-proxy.tld/headers")
  85. assert r.status_code == 200
  86. assert "Host: web-server-tokens-off.nginx-proxy.tld" in r.text
  87. assert r.headers["Server"] == "nginx"