diff options
author | Mikhail Shchatko <mikhail.shchatko@mongodb.com> | 2022-12-15 15:15:20 +0200 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-12-16 10:33:14 +0000 |
commit | 16678eda6acdc3a0addab871638d7201f32ac49d (patch) | |
tree | d55bcb77ec1a4d293dd6dcc7c76a9f3301988af2 | |
parent | 9f94dc82053cd44d30aa25db80f07a46024ee7c8 (diff) | |
download | mongo-16678eda6acdc3a0addab871638d7201f32ac49d.tar.gz |
SERVER-72137 Handle case when test stats are not available
-rw-r--r-- | buildscripts/tests/util/test_teststats.py | 53 | ||||
-rw-r--r-- | buildscripts/util/teststats.py | 8 |
2 files changed, 59 insertions, 2 deletions
diff --git a/buildscripts/tests/util/test_teststats.py b/buildscripts/tests/util/test_teststats.py index 8a9c273d7e2..2fff95eca4a 100644 --- a/buildscripts/tests/util/test_teststats.py +++ b/buildscripts/tests/util/test_teststats.py @@ -1,7 +1,12 @@ """Unit tests for the util.teststats module.""" import datetime +from json import JSONDecodeError import unittest +from unittest.mock import patch + +from mock.mock import MagicMock +from requests import Session import buildscripts.util.teststats as teststats_utils @@ -87,3 +92,51 @@ class TestTestStats(unittest.TestCase): num_pass=num_pass, num_fail=0, ) + + +class TestGetStatsFromS3(unittest.TestCase): + @patch.object(Session, 'get') + def test_get_stats_from_s3_returns_data(self, mock_get): + mock_response = MagicMock() + mock_response.json.return_value = [ + { + "test_name": "jstests/noPassthroughWithMongod/geo_near_random1.js", + "num_pass": 74, + "num_fail": 0, + "avg_duration_pass": 23.16216216216216, + }, + { + "test_name": "shell_advance_cluster_time:ValidateCollections", + "num_pass": 74, + "num_fail": 0, + "avg_duration_pass": 1.662162162162162, + }, + ] + mock_get.return_value = mock_response + + result = teststats_utils.get_stats_from_s3("project", "task", "variant") + + self.assertEqual(result, [ + teststats_utils.HistoricalTestInformation( + test_name="jstests/noPassthroughWithMongod/geo_near_random1.js", + num_pass=74, + num_fail=0, + avg_duration_pass=23.16216216216216, + ), + teststats_utils.HistoricalTestInformation( + test_name="shell_advance_cluster_time:ValidateCollections", + num_pass=74, + num_fail=0, + avg_duration_pass=1.662162162162162, + ), + ]) + + @patch.object(Session, 'get') + def test_get_stats_from_s3_json_decode_error(self, mock_get): + mock_response = MagicMock() + mock_response.json.side_effect = JSONDecodeError("msg", "doc", 0) + mock_get.return_value = mock_response + + result = teststats_utils.get_stats_from_s3("project", "task", "variant") + + self.assertEqual(result, []) diff --git a/buildscripts/util/teststats.py b/buildscripts/util/teststats.py index 985fa50a30f..f38eda49f4a 100644 --- a/buildscripts/util/teststats.py +++ b/buildscripts/util/teststats.py @@ -2,6 +2,7 @@ from collections import defaultdict from collections import namedtuple +from json import JSONDecodeError from typing import NamedTuple, List import requests @@ -118,6 +119,9 @@ def get_stats_from_s3(project: str, task: str, variant: str) -> List[HistoricalT session.mount('https://', HTTPAdapter(max_retries=retries)) response = session.get(f"{TESTS_STATS_S3_LOCATION}/{project}/{variant}/{task}") - data = response.json() - return [HistoricalTestInformation(**item) for item in data] + try: + data = response.json() + return [HistoricalTestInformation(**item) for item in data] + except JSONDecodeError: + return [] |