test_resources.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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_automatically_add_cpu(mock_values):
  14. mock_values["resources"] = {"limits": {"cpus": 1.0}}
  15. render = Render(mock_values)
  16. c1 = render.add_container("test_container", "test_image")
  17. c1.healthcheck.disable()
  18. output = render.render()
  19. assert output["services"]["test_container"]["deploy"]["resources"]["limits"]["cpus"] == "1.0"
  20. def test_invalid_cpu(mock_values):
  21. mock_values["resources"] = {"limits": {"cpus": "invalid"}}
  22. render = Render(mock_values)
  23. with pytest.raises(Exception):
  24. render.add_container("test_container", "test_image")
  25. def test_automatically_add_memory(mock_values):
  26. mock_values["resources"] = {"limits": {"memory": 1024}}
  27. render = Render(mock_values)
  28. c1 = render.add_container("test_container", "test_image")
  29. c1.healthcheck.disable()
  30. output = render.render()
  31. assert output["services"]["test_container"]["deploy"]["resources"]["limits"]["memory"] == "1024M"
  32. def test_invalid_memory(mock_values):
  33. mock_values["resources"] = {"limits": {"memory": "invalid"}}
  34. render = Render(mock_values)
  35. with pytest.raises(Exception):
  36. render.add_container("test_container", "test_image")
  37. def test_automatically_add_gpus(mock_values):
  38. mock_values["resources"] = {
  39. "gpus": {
  40. "nvidia_gpu_selection": {
  41. "pci_slot_0": {"uuid": "uuid_0", "use_gpu": True},
  42. "pci_slot_1": {"uuid": "uuid_1", "use_gpu": True},
  43. },
  44. }
  45. }
  46. render = Render(mock_values)
  47. c1 = render.add_container("test_container", "test_image")
  48. c1.healthcheck.disable()
  49. output = render.render()
  50. devices = output["services"]["test_container"]["deploy"]["resources"]["reservations"]["devices"]
  51. assert len(devices) == 1
  52. assert devices[0] == {
  53. "capabilities": ["gpu"],
  54. "driver": "nvidia",
  55. "device_ids": ["uuid_0", "uuid_1"],
  56. }
  57. assert output["services"]["test_container"]["group_add"] == [44, 107, 568]
  58. def test_gpu_without_uuid(mock_values):
  59. mock_values["resources"] = {
  60. "gpus": {
  61. "nvidia_gpu_selection": {
  62. "pci_slot_0": {"uuid": "", "use_gpu": True},
  63. "pci_slot_1": {"uuid": "uuid_1", "use_gpu": True},
  64. },
  65. }
  66. }
  67. render = Render(mock_values)
  68. with pytest.raises(Exception):
  69. render.add_container("test_container", "test_image")
  70. def test_remove_cpus_and_memory_with_gpus(mock_values):
  71. mock_values["resources"] = {"gpus": {"nvidia_gpu_selection": {"pci_slot_0": {"uuid": "uuid_1", "use_gpu": True}}}}
  72. render = Render(mock_values)
  73. c1 = render.add_container("test_container", "test_image")
  74. c1.healthcheck.disable()
  75. c1.deploy.resources.remove_cpus_and_memory()
  76. output = render.render()
  77. assert "limits" not in output["services"]["test_container"]["deploy"]["resources"]
  78. devices = output["services"]["test_container"]["deploy"]["resources"]["reservations"]["devices"]
  79. assert len(devices) == 1
  80. assert devices[0] == {
  81. "capabilities": ["gpu"],
  82. "driver": "nvidia",
  83. "device_ids": ["uuid_1"],
  84. }
  85. def test_remove_cpus_and_memory(mock_values):
  86. render = Render(mock_values)
  87. c1 = render.add_container("test_container", "test_image")
  88. c1.healthcheck.disable()
  89. c1.deploy.resources.remove_cpus_and_memory()
  90. output = render.render()
  91. assert "deploy" not in output["services"]["test_container"]
  92. def test_remove_devices(mock_values):
  93. mock_values["resources"] = {"gpus": {"nvidia_gpu_selection": {"pci_slot_0": {"uuid": "uuid_0", "use_gpu": True}}}}
  94. render = Render(mock_values)
  95. c1 = render.add_container("test_container", "test_image")
  96. c1.healthcheck.disable()
  97. c1.deploy.resources.remove_devices()
  98. output = render.render()
  99. assert "reservations" not in output["services"]["test_container"]["deploy"]["resources"]
  100. assert output["services"]["test_container"]["group_add"] == [568]
  101. def test_set_profile(mock_values):
  102. render = Render(mock_values)
  103. c1 = render.add_container("test_container", "test_image")
  104. c1.healthcheck.disable()
  105. c1.deploy.resources.set_profile("low")
  106. output = render.render()
  107. assert output["services"]["test_container"]["deploy"]["resources"]["limits"]["cpus"] == "1"
  108. assert output["services"]["test_container"]["deploy"]["resources"]["limits"]["memory"] == "512M"
  109. def test_set_profile_invalid_profile(mock_values):
  110. render = Render(mock_values)
  111. c1 = render.add_container("test_container", "test_image")
  112. c1.healthcheck.disable()
  113. with pytest.raises(Exception):
  114. c1.deploy.resources.set_profile("invalid_profile")