test_environment.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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_auto_add_vars(mock_values):
  14. mock_values["TZ"] = "Etc/UTC"
  15. mock_values["run_as"] = {"user": "1000", "group": "1000"}
  16. mock_values["resources"] = {
  17. "gpus": {
  18. "nvidia_gpu_selection": {
  19. "pci_slot_0": {"uuid": "uuid_0", "use_gpu": True},
  20. "pci_slot_1": {"uuid": "uuid_1", "use_gpu": True},
  21. },
  22. }
  23. }
  24. render = Render(mock_values)
  25. c1 = render.add_container("test_container", "test_image")
  26. c1.healthcheck.disable()
  27. output = render.render()
  28. envs = output["services"]["test_container"]["environment"]
  29. assert len(envs) == 11
  30. assert envs["TZ"] == "Etc/UTC"
  31. assert envs["PUID"] == "1000"
  32. assert envs["UID"] == "1000"
  33. assert envs["USER_ID"] == "1000"
  34. assert envs["PGID"] == "1000"
  35. assert envs["GID"] == "1000"
  36. assert envs["GROUP_ID"] == "1000"
  37. assert envs["UMASK"] == "002"
  38. assert envs["UMASK_SET"] == "002"
  39. assert envs["NVIDIA_DRIVER_CAPABILITIES"] == "all"
  40. assert envs["NVIDIA_VISIBLE_DEVICES"] == "uuid_0,uuid_1"
  41. def test_skip_generic_variables(mock_values):
  42. mock_values["skip_generic_variables"] = True
  43. render = Render(mock_values)
  44. c1 = render.add_container("test_container", "test_image")
  45. c1.healthcheck.disable()
  46. output = render.render()
  47. envs = output["services"]["test_container"]["environment"]
  48. assert len(envs) == 1
  49. assert envs["NVIDIA_VISIBLE_DEVICES"] == "void"
  50. def test_add_from_all_sources(mock_values):
  51. mock_values["TZ"] = "Etc/UTC"
  52. render = Render(mock_values)
  53. c1 = render.add_container("test_container", "test_image")
  54. c1.healthcheck.disable()
  55. c1.environment.add_env("APP_ENV", "test_value")
  56. c1.environment.add_user_envs(
  57. [
  58. {"name": "USER_ENV", "value": "test_value2"},
  59. ]
  60. )
  61. output = render.render()
  62. envs = output["services"]["test_container"]["environment"]
  63. assert envs["APP_ENV"] == "test_value"
  64. assert envs["USER_ENV"] == "test_value2"
  65. assert envs["TZ"] == "Etc/UTC"
  66. def test_user_add_vars(mock_values):
  67. render = Render(mock_values)
  68. c1 = render.add_container("test_container", "test_image")
  69. c1.healthcheck.disable()
  70. c1.environment.add_user_envs(
  71. [
  72. {"name": "MY_ENV", "value": "test_value"},
  73. {"name": "MY_ENV2", "value": "test_value2"},
  74. ]
  75. )
  76. output = render.render()
  77. envs = output["services"]["test_container"]["environment"]
  78. assert envs["MY_ENV"] == "test_value"
  79. assert envs["MY_ENV2"] == "test_value2"
  80. def test_user_add_duplicate_vars(mock_values):
  81. render = Render(mock_values)
  82. c1 = render.add_container("test_container", "test_image")
  83. c1.healthcheck.disable()
  84. with pytest.raises(Exception):
  85. c1.environment.add_user_envs(
  86. [
  87. {"name": "MY_ENV", "value": "test_value"},
  88. {"name": "MY_ENV", "value": "test_value2"},
  89. ]
  90. )
  91. def test_user_env_without_name(mock_values):
  92. render = Render(mock_values)
  93. c1 = render.add_container("test_container", "test_image")
  94. c1.healthcheck.disable()
  95. with pytest.raises(Exception):
  96. c1.environment.add_user_envs(
  97. [
  98. {"name": "", "value": "test_value"},
  99. ]
  100. )
  101. def test_user_env_try_to_overwrite_auto_vars(mock_values):
  102. mock_values["TZ"] = "Etc/UTC"
  103. render = Render(mock_values)
  104. c1 = render.add_container("test_container", "test_image")
  105. c1.healthcheck.disable()
  106. c1.environment.add_user_envs(
  107. [
  108. {"name": "TZ", "value": "test_value"},
  109. ]
  110. )
  111. with pytest.raises(Exception):
  112. render.render()
  113. def test_user_env_try_to_overwrite_app_dev_vars(mock_values):
  114. render = Render(mock_values)
  115. c1 = render.add_container("test_container", "test_image")
  116. c1.healthcheck.disable()
  117. c1.environment.add_user_envs(
  118. [
  119. {"name": "PORT", "value": "test_value"},
  120. ]
  121. )
  122. c1.environment.add_env("PORT", "test_value2")
  123. with pytest.raises(Exception):
  124. render.render()
  125. def test_app_dev_vars_try_to_overwrite_auto_vars(mock_values):
  126. mock_values["TZ"] = "Etc/UTC"
  127. render = Render(mock_values)
  128. c1 = render.add_container("test_container", "test_image")
  129. c1.healthcheck.disable()
  130. c1.environment.add_env("TZ", "test_value")
  131. with pytest.raises(Exception):
  132. render.render()
  133. def test_app_dev_no_name(mock_values):
  134. render = Render(mock_values)
  135. c1 = render.add_container("test_container", "test_image")
  136. c1.healthcheck.disable()
  137. with pytest.raises(Exception):
  138. c1.environment.add_env("", "test_value")
  139. def test_app_dev_duplicate_vars(mock_values):
  140. render = Render(mock_values)
  141. c1 = render.add_container("test_container", "test_image")
  142. c1.healthcheck.disable()
  143. c1.environment.add_env("PORT", "test_value")
  144. with pytest.raises(Exception):
  145. c1.environment.add_env("PORT", "test_value2")
  146. def test_format_vars(mock_values):
  147. render = Render(mock_values)
  148. c1 = render.add_container("test_container", "test_image")
  149. c1.healthcheck.disable()
  150. c1.environment.add_env("APP_ENV", "test_$value")
  151. c1.environment.add_env("APP_ENV_BOOL", True)
  152. c1.environment.add_env("APP_ENV_INT", 10)
  153. c1.environment.add_env("APP_ENV_FLOAT", 10.5)
  154. c1.environment.add_user_envs(
  155. [
  156. {"name": "USER_ENV", "value": "test_$value2"},
  157. ]
  158. )
  159. output = render.render()
  160. envs = output["services"]["test_container"]["environment"]
  161. assert envs["APP_ENV"] == "test_$$value"
  162. assert envs["USER_ENV"] == "test_$$value2"
  163. assert envs["APP_ENV_BOOL"] == "true"
  164. assert envs["APP_ENV_INT"] == "10"
  165. assert envs["APP_ENV_FLOAT"] == "10.5"