test_portal.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import pytest
  2. from render import Render
  3. @pytest.fixture
  4. def mock_values():
  5. return {
  6. "images": {
  7. "test_image": {
  8. "repository": "nginx",
  9. "tag": "latest",
  10. }
  11. },
  12. }
  13. def test_no_portals(mock_values):
  14. render = Render(mock_values)
  15. c1 = render.add_container("test_container", "test_image")
  16. c1.healthcheck.disable()
  17. output = render.render()
  18. assert output["x-portals"] == []
  19. def test_add_portal_with_host_ips(mock_values):
  20. render = Render(mock_values)
  21. c1 = render.add_container("test_container", "test_image")
  22. c1.healthcheck.disable()
  23. port1 = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  24. port2 = {"bind_mode": "published", "port_number": 8081, "host_ips": ["::", "0.0.0.0"]}
  25. port3 = {"bind_mode": "published", "port_number": 8081, "host_ips": ["1.2.3.4"]}
  26. port3 = {"bind_mode": "published", "port_number": 8081, "host_ips": ["1.2.3.4"]}
  27. port4 = {"bind_mode": "exposed", "port_number": 1234, "host_ips": ["1.2.3.4"]}
  28. render.portals.add(port1)
  29. render.portals.add(port1, {"name": "test1", "host": "my-host.com"})
  30. render.portals.add(port2, {"name": "test2"})
  31. render.portals.add(port3, {"name": "test3", "port": None})
  32. render.portals.add(port3, {"name": "test4", "port": 1234})
  33. render.portals.add(port4, {"name": "test5", "port": 1234})
  34. output = render.render()
  35. assert output["x-portals"] == [
  36. {"name": "Web UI", "scheme": "http", "host": "1.2.3.4", "port": 8080, "path": "/"},
  37. {"name": "test1", "scheme": "http", "host": "my-host.com", "port": 8080, "path": "/"},
  38. {"name": "test2", "scheme": "http", "host": "0.0.0.0", "port": 8081, "path": "/"},
  39. {"name": "test3", "scheme": "http", "host": "1.2.3.4", "port": 8081, "path": "/"},
  40. {"name": "test4", "scheme": "http", "host": "1.2.3.4", "port": 1234, "path": "/"},
  41. ]
  42. def test_add_duplicate_portal(mock_values):
  43. render = Render(mock_values)
  44. port = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  45. render.portals.add(port)
  46. with pytest.raises(Exception):
  47. render.portals.add(port)
  48. def test_add_duplicate_portal_with_explicit_name(mock_values):
  49. render = Render(mock_values)
  50. port = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  51. render.portals.add(port, {"name": "Some Portal"})
  52. with pytest.raises(Exception):
  53. render.portals.add(port, {"name": "Some Portal"})
  54. def test_add_portal_with_invalid_scheme(mock_values):
  55. render = Render(mock_values)
  56. port = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  57. with pytest.raises(Exception):
  58. render.portals.add(port, {"scheme": "invalid_scheme"})
  59. def test_add_portal_with_invalid_path(mock_values):
  60. render = Render(mock_values)
  61. port = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  62. with pytest.raises(Exception):
  63. render.portals.add(port, {"path": "invalid_path"})
  64. def test_add_portal_with_invalid_path_double_slash(mock_values):
  65. render = Render(mock_values)
  66. port = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  67. with pytest.raises(Exception):
  68. render.portals.add(port, {"path": "/some//path"})
  69. def test_add_portal_with_invalid_port(mock_values):
  70. render = Render(mock_values)
  71. port = {"bind_mode": "published", "port_number": 8080, "host_ips": ["1.2.3.4", "5.6.7.8"]}
  72. with pytest.raises(Exception):
  73. render.portals.add(port, {"port": -1})