test_http.py 4.2 KB

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