-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrun_unit_tests.py
More file actions
52 lines (43 loc) · 2.13 KB
/
run_unit_tests.py
File metadata and controls
52 lines (43 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import os
from typing import Any
import render_machine.render_utils as render_utils
from plain2code_console import console
from render_machine.actions.base_action import BaseAction
from render_machine.render_context import RenderContext
from render_machine.render_types import RenderError
UNRECOVERABLE_ERROR_EXIT_CODES = [69]
class RunUnitTests(BaseAction):
SUCCESSFUL_OUTCOME = "unit_tests_succeeded"
FAILED_OUTCOME = "unit_tests_failed"
UNRECOVERABLE_ERROR_OUTCOME = "unrecoverable_error_occurred"
def execute(self, render_context: RenderContext, _previous_action_payload: Any | None):
unittests_script = os.path.normpath(render_context.unittests_script)
if render_context.verbose:
console.info(
f"Running unit tests script {unittests_script}. (attempt: {render_context.unit_tests_running_context.fix_attempts + 1})"
)
exit_code, unittests_issue, unittests_temp_file_path = render_utils.execute_script(
unittests_script,
[render_context.build_folder],
render_context.verbose,
"Unit Tests",
timeout=render_context.test_script_timeout,
stop_event=render_context.stop_event,
)
render_context.script_execution_history.latest_unit_test_output_path = unittests_temp_file_path
render_context.script_execution_history.should_update_script_outputs = True
if exit_code == 0:
return self.SUCCESSFUL_OUTCOME, None
elif exit_code in UNRECOVERABLE_ERROR_EXIT_CODES:
console.error(unittests_issue)
return (
self.UNRECOVERABLE_ERROR_OUTCOME,
RenderError.encode(
message="Unit tests script failed due to problems in the environment setup. Please check your environment or update the script for running unittests.",
error_type="ENVIRONMENT_ERROR",
script=unittests_script,
issue=unittests_issue,
).to_payload(),
)
else:
return self.FAILED_OUTCOME, {"previous_unittests_issue": unittests_issue}