summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Shchatko <mikhail.shchatko@mongodb.com>2022-12-15 15:15:20 +0200
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-12-16 10:33:14 +0000
commit16678eda6acdc3a0addab871638d7201f32ac49d (patch)
treed55bcb77ec1a4d293dd6dcc7c76a9f3301988af2
parent9f94dc82053cd44d30aa25db80f07a46024ee7c8 (diff)
downloadmongo-16678eda6acdc3a0addab871638d7201f32ac49d.tar.gz
SERVER-72137 Handle case when test stats are not available
-rw-r--r--buildscripts/tests/util/test_teststats.py53
-rw-r--r--buildscripts/util/teststats.py8
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 []