test_submission_manager.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. # Copyright 2021-2024 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. from datetime import datetime
  12. from time import sleep
  13. import pytest
  14. from taipy.core._version._version_manager_factory import _VersionManagerFactory
  15. from taipy.core.exceptions.exceptions import SubmissionNotDeletedException
  16. from taipy.core.submission._submission_manager_factory import _SubmissionManagerFactory
  17. from taipy.core.submission.submission import Submission
  18. from taipy.core.submission.submission_status import SubmissionStatus
  19. from taipy.core.task.task import Task
  20. def test_create_submission(scenario):
  21. submission_1 = _SubmissionManagerFactory._build_manager()._create(
  22. scenario.id, scenario._ID_PREFIX, scenario.config_id
  23. )
  24. assert submission_1.id is not None
  25. assert submission_1.entity_id == scenario.id
  26. assert submission_1.jobs == []
  27. assert isinstance(submission_1.creation_date, datetime)
  28. assert submission_1._submission_status == SubmissionStatus.SUBMITTED
  29. def test_get_submission():
  30. submission_manager = _SubmissionManagerFactory._build_manager()
  31. assert submission_manager._get("random_submission_id") is None
  32. submission_1 = submission_manager._create("entity_id", "ENTITY_TYPE", "entity_config_id")
  33. submission_2 = submission_manager._get(submission_1.id)
  34. assert submission_1.id == submission_2.id
  35. assert submission_1.entity_id == submission_2.entity_id == "entity_id"
  36. assert submission_1.jobs == submission_2.jobs
  37. assert submission_1.creation_date == submission_2.creation_date
  38. assert submission_1.submission_status == submission_2.submission_status
  39. def test_get_all_submission():
  40. submission_manager = _SubmissionManagerFactory._build_manager()
  41. version_manager = _VersionManagerFactory._build_manager()
  42. submission_manager._set(
  43. Submission("entity_id", "submission_id", "entity_config_id", version=version_manager._get_latest_version())
  44. )
  45. for version_name in ["abc", "xyz"]:
  46. for i in range(10):
  47. submission_manager._set(
  48. Submission("entity_id", f"submission_{version_name}_{i}", "entity_config_id", version=f"{version_name}")
  49. )
  50. assert len(submission_manager._get_all()) == 1
  51. version_manager._set_experiment_version("xyz")
  52. version_manager._set_experiment_version("abc")
  53. assert len(submission_manager._get_all()) == 10
  54. assert len(submission_manager._get_all("abc")) == 10
  55. assert len(submission_manager._get_all("xyz")) == 10
  56. def test_get_latest_submission():
  57. task_1 = Task("task_config_1", {}, print, id="task_id_1")
  58. task_2 = Task("task_config_2", {}, print, id="task_id_2")
  59. submission_manager = _SubmissionManagerFactory._build_manager()
  60. submission_1 = submission_manager._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
  61. assert submission_manager._get_latest(task_1) == submission_1
  62. assert submission_manager._get_latest(task_2) is None
  63. sleep(0.01) # Comparison is based on time, precision on Windows is not enough important
  64. submission_2 = submission_manager._create(task_2.id, task_2._ID_PREFIX, task_2.config_id)
  65. assert submission_manager._get_latest(task_1) == submission_1
  66. assert submission_manager._get_latest(task_2) == submission_2
  67. sleep(0.01) # Comparison is based on time, precision on Windows is not enough important
  68. submission_3 = submission_manager._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
  69. assert submission_manager._get_latest(task_1) == submission_3
  70. assert submission_manager._get_latest(task_2) == submission_2
  71. sleep(0.01) # Comparison is based on time, precision on Windows is not enough important
  72. submission_4 = submission_manager._create(task_2.id, task_2._ID_PREFIX, task_2.config_id)
  73. assert submission_manager._get_latest(task_1) == submission_3
  74. assert submission_manager._get_latest(task_2) == submission_4
  75. def test_delete_submission():
  76. submission_manager = _SubmissionManagerFactory._build_manager()
  77. submission = Submission("entity_id", "submission_id", "entity_config_id")
  78. submission_manager._set(submission)
  79. with pytest.raises(SubmissionNotDeletedException):
  80. submission_manager._delete(submission.id)
  81. submission.submission_status = SubmissionStatus.COMPLETED
  82. for i in range(10):
  83. submission_manager._set(Submission("entity_id", f"submission_{i}", "entity_config_id"))
  84. assert len(submission_manager._get_all()) == 11
  85. assert isinstance(submission_manager._get(submission.id), Submission)
  86. submission_manager._delete(submission.id)
  87. assert len(submission_manager._get_all()) == 10
  88. assert submission_manager._get(submission.id) is None
  89. submission_manager._delete_all()
  90. assert len(submission_manager._get_all()) == 0
  91. def test_is_deletable():
  92. submission_manager = _SubmissionManagerFactory._build_manager()
  93. submission = Submission("entity_id", "submission_id", "entity_config_id")
  94. submission_manager._set(submission)
  95. assert len(submission_manager._get_all()) == 1
  96. assert submission._submission_status == SubmissionStatus.SUBMITTED
  97. assert not submission.is_deletable()
  98. assert not submission_manager._is_deletable(submission)
  99. assert not submission_manager._is_deletable(submission.id)
  100. submission.submission_status = SubmissionStatus.UNDEFINED
  101. assert submission.submission_status == SubmissionStatus.UNDEFINED
  102. assert submission.is_deletable()
  103. assert submission_manager._is_deletable(submission)
  104. assert submission_manager._is_deletable(submission.id)
  105. submission.submission_status = SubmissionStatus.CANCELED
  106. assert submission.submission_status == SubmissionStatus.CANCELED
  107. assert submission.is_deletable()
  108. assert submission_manager._is_deletable(submission)
  109. assert submission_manager._is_deletable(submission.id)
  110. submission.submission_status = SubmissionStatus.FAILED
  111. assert submission.submission_status == SubmissionStatus.FAILED
  112. assert submission.is_deletable()
  113. assert submission_manager._is_deletable(submission)
  114. assert submission_manager._is_deletable(submission.id)
  115. submission.submission_status = SubmissionStatus.BLOCKED
  116. assert submission.submission_status == SubmissionStatus.BLOCKED
  117. assert not submission.is_deletable()
  118. assert not submission_manager._is_deletable(submission)
  119. assert not submission_manager._is_deletable(submission.id)
  120. submission.submission_status = SubmissionStatus.RUNNING
  121. assert submission.submission_status == SubmissionStatus.RUNNING
  122. assert not submission.is_deletable()
  123. assert not submission_manager._is_deletable(submission)
  124. assert not submission_manager._is_deletable(submission.id)
  125. submission.submission_status = SubmissionStatus.PENDING
  126. assert submission.submission_status == SubmissionStatus.PENDING
  127. assert not submission.is_deletable()
  128. assert not submission_manager._is_deletable(submission)
  129. assert not submission_manager._is_deletable(submission.id)
  130. submission.submission_status = SubmissionStatus.COMPLETED
  131. assert submission.submission_status == SubmissionStatus.COMPLETED
  132. assert submission.is_deletable()
  133. assert submission_manager._is_deletable(submission)
  134. assert submission_manager._is_deletable(submission.id)