Mesa (main): ci/lava: Add an integration test for LAVA jobs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 7 00:55:35 UTC 2022


Module: Mesa
Branch: main
Commit: 466917ea4c5766b42c306fa5c24bd4ee9284f50a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=466917ea4c5766b42c306fa5c24bd4ee9284f50a

Author: Guilherme Gallo <guilherme.gallo at collabora.com>
Date:   Thu Jun 30 18:16:51 2022 -0300

ci/lava: Add an integration test for LAVA jobs

test_full_yaml_log is a test that will look for a LAVA log YAML file at
`/tmp/log.yaml` and consume it as it was a realtime CI job.
It is useful for debugging issues related with LAVA.

Let's keep it skipped by default, to avoid introducing entire logs into
the codebase.

Signed-off-by: Guilherme Gallo <guilherme.gallo at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16323>

---

 .gitlab-ci/tests/test_lava_job_submitter.py | 58 +++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/.gitlab-ci/tests/test_lava_job_submitter.py b/.gitlab-ci/tests/test_lava_job_submitter.py
index e7d5b020604..482de6dd5c4 100644
--- a/.gitlab-ci/tests/test_lava_job_submitter.py
+++ b/.gitlab-ci/tests/test_lava_job_submitter.py
@@ -302,3 +302,61 @@ def test_filter_debug_messages(message, expectation, mock_proxy):
     job.parse_job_result_from_log([message])
 
     assert job.status == expectation
+
+
+ at pytest.mark.skip(reason="Integration test. Needs a LAVA log raw file at /tmp/log.yaml")
+def test_full_yaml_log(mock_proxy, frozen_time):
+    import itertools
+    import random
+    from datetime import datetime
+
+    import yaml
+
+    def time_travel_from_log_chunk(data_chunk):
+        if not data_chunk:
+            return
+
+        first_log_time = data_chunk[0]["dt"]
+        frozen_time.move_to(first_log_time)
+        yield
+
+        last_log_time = data_chunk[-1]["dt"]
+        frozen_time.move_to(last_log_time)
+        return
+
+    def time_travel_to_test_time():
+        # Suppose that the first message timestamp of the entire LAVA job log is
+        # the same of from the job submitter execution
+        with open("/tmp/log.yaml", "r") as f:
+            first_log = f.readline()
+            first_log_time = yaml.safe_load(first_log)[0]["dt"]
+            frozen_time.move_to(first_log_time)
+
+    def load_lines() -> list:
+        with open("/tmp/log.yaml", "r") as f:
+            data = yaml.safe_load(f)
+            chain = itertools.chain(data)
+            try:
+                while True:
+                    data_chunk = [next(chain) for _ in range(random.randint(0, 50))]
+                    # Suppose that the first message timestamp is the same of
+                    # log fetch RPC call
+                    time_travel_from_log_chunk(data_chunk)
+                    yield False, []
+                    # Travel to the same datetime of the last fetched log line
+                    # in the chunk
+                    time_travel_from_log_chunk(data_chunk)
+                    yield False, data_chunk
+            except StopIteration:
+                yield True, data_chunk
+                return
+
+    proxy = mock_proxy()
+
+    def reset_logs(*args):
+        proxy.scheduler.jobs.logs.side_effect = load_lines()
+
+    proxy.scheduler.jobs.submit = reset_logs
+    with pytest.raises(MesaCIRetryError):
+        time_travel_to_test_time()
+        retriable_follow_job(proxy, "")



More information about the mesa-commit mailing list