blob: ac61ac2919354252f3852b5cd7d9800670c6ae09 [file] [log] [blame]
# Copyright 2025 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for fetch_all_subtest_logs.py."""
from pathlib import Path
import subprocess
import unittest
from unittest import mock
# Rename this, since its original name (& function names) lead to lines that're
# too long.
from bot_tools import fetch_all_subtest_logs as main
class Test(unittest.TestCase):
"""Tests for fetch_all_subtest_logs."""
@mock.patch.object(subprocess, "run")
def test_log_downloading_doesnt_crash(self, subprocess_run_mock):
main.download_gs_logs_to(
Path("/path/does/not/exist"), gs_logs=["gs://foo", "gs://bar"]
)
subprocess_run_mock.assert_called_once()
@mock.patch.object(main, "get_bb_json_output")
def test_find_cros_test_platform_raises_if_none_found(
self, get_bb_json_output_mock
):
get_bb_json_output_mock.return_value = {"steps": []}
with self.assertRaisesRegex(ValueError, "No `check test results`.*"):
main.find_cros_test_platform_child_of_cq_orchestrator(
cq_orchestrator_id=1
)
@mock.patch.object(main, "get_bb_json_output")
def test_find_cros_test_platform_works(self, get_bb_json_output_mock):
summary_md = "[foo](https://cr-buildbucket.appspot.com/build/123)"
get_bb_json_output_mock.return_value = {
"steps": [
{
"name": "foo",
},
{
"name": "check test results",
"summaryMarkdown": summary_md,
},
]
}
result = main.find_cros_test_platform_child_of_cq_orchestrator(
cq_orchestrator_id=1
)
self.assertEqual(result, 123)
def test_gs_link_finding_fails_if_none_found(self):
with self.assertRaisesRegex(ValueError, "No gs_urls.*"):
main.find_gs_links_in_test_log({})
def test_gs_link_finding_finds_links(self):
results = main.find_gs_links_in_test_log(
{
"suite-name-1": [
{
"Results": {
"log_data": {
"gs_url": "gs_url_1",
}
}
},
{},
{"Results": {}},
{"Results": {"log_data": {}}},
],
"suite-name-2": [
{
"Results": {
"log_data": {
"gs_url": "gs_url_2",
}
}
},
],
}
)
self.assertEqual(results, ["gs_url_1", "gs_url_2"])