ci/lava: Add a simple Structural Logger into submitter
Refactor some pieces of the submitter to improve the clarity of the functions and create a simple dictionary with aggregated data from the submitter execution which will be dumped to a file when the script exits. Add support for the AutoSaveDict based structured logger as well, which will come in a follow-up commit. Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22500>
This commit is contained in:
committed by
Marge Bot
parent
41f29c5333
commit
0ac3824922
@@ -1,3 +1,4 @@
|
||||
from collections import defaultdict
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
@@ -32,7 +33,7 @@ RESULT_GET_TESTJOB_RESULTS = [{"metadata": {"result": "test"}}]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_proxy():
|
||||
def mock_proxy(frozen_time):
|
||||
def create_proxy_mock(
|
||||
job_results=RESULT_GET_TESTJOB_RESULTS,
|
||||
testsuite_results=[generate_testsuite_result()],
|
||||
@@ -51,6 +52,20 @@ def mock_proxy():
|
||||
proxy_logs_mock = proxy_mock.scheduler.jobs.logs
|
||||
proxy_logs_mock.return_value = jobs_logs_response()
|
||||
|
||||
proxy_job_state = proxy_mock.scheduler.job_state
|
||||
proxy_job_state.return_value = {"job_state": "Running"}
|
||||
proxy_job_state.side_effect = frozen_time.tick(1)
|
||||
|
||||
proxy_show_mock = proxy_mock.scheduler.jobs.show
|
||||
proxy_show_mock.return_value = defaultdict(
|
||||
str,
|
||||
{
|
||||
"device_type": "test_device",
|
||||
"device": "test_device-cbg-1",
|
||||
"state": "created",
|
||||
},
|
||||
)
|
||||
|
||||
for key, value in kwargs.items():
|
||||
setattr(proxy_logs_mock, key, value)
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import xmlrpc.client
|
||||
from contextlib import nullcontext as does_not_raise
|
||||
from datetime import datetime
|
||||
from itertools import chain, repeat
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from lava.exceptions import MesaCIException, MesaCIRetryError
|
||||
@@ -16,6 +17,7 @@ from lava.lava_job_submitter import (
|
||||
DEVICE_HANGING_TIMEOUT_SEC,
|
||||
NUMBER_OF_RETRIES_TIMEOUT_DETECTION,
|
||||
LAVAJob,
|
||||
LAVAJobSubmitter,
|
||||
bootstrap_log_follower,
|
||||
follow_job_execution,
|
||||
retriable_follow_job,
|
||||
@@ -299,7 +301,7 @@ def test_parse_job_result_from_log(message, expectation, mock_proxy):
|
||||
@pytest.mark.slow(
|
||||
reason="Slow and sketchy test. Needs a LAVA log raw file at /tmp/log.yaml"
|
||||
)
|
||||
def test_full_yaml_log(mock_proxy, frozen_time):
|
||||
def test_full_yaml_log(mock_proxy, frozen_time, tmp_path):
|
||||
import random
|
||||
|
||||
from lavacli.utils import flow_yaml as lava_yaml
|
||||
@@ -350,7 +352,10 @@ def test_full_yaml_log(mock_proxy, frozen_time):
|
||||
def reset_logs(*args):
|
||||
proxy.scheduler.jobs.logs.side_effect = load_lines()
|
||||
|
||||
tmp_file = Path(tmp_path) / "log.json"
|
||||
LAVAJobSubmitter(structured_log_file=tmp_file)
|
||||
proxy.scheduler.jobs.submit = reset_logs
|
||||
with pytest.raises(MesaCIRetryError):
|
||||
time_travel_to_test_time()
|
||||
retriable_follow_job(proxy, "")
|
||||
print(tmp_file.read_text())
|
||||
|
||||
Reference in New Issue
Block a user