From 424a0b9c031ad4614f4e6842fd6edb3af7ed5d2e Mon Sep 17 00:00:00 2001 From: Ming Date: Wed, 26 Mar 2025 16:29:47 +1100 Subject: [PATCH] PIE-3522: print error message when API return non 2xx 3xx result --- src/buildkite_test_collector/collector/api.py | 12 +++++++----- .../collector/test_api.py | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/buildkite_test_collector/collector/api.py b/src/buildkite_test_collector/collector/api.py index eedbfdb..47e5085 100644 --- a/src/buildkite_test_collector/collector/api.py +++ b/src/buildkite_test_collector/collector/api.py @@ -5,7 +5,7 @@ from sys import stderr import traceback from requests import post, Response -from requests.exceptions import InvalidHeader +from requests.exceptions import InvalidHeader, HTTPError from .payload import Payload @@ -29,13 +29,15 @@ def submit(payload: Payload, batch_size=100) -> Optional[Response]: "Authorization": f"Token token=\"{token}\"" }, timeout=60) - if response.status_code >= 300: - return response + response.raise_for_status() + return response except InvalidHeader as error: print("Warning: Invalid `BUILDKITE_ANALYTICS_TOKEN` environment variable", file=stderr) print(error, file=stderr) + except HTTPError as err: + print("Warning: Failed to uploads test results to buildkite", file=stderr) + print(err, file=stderr) except Exception: # pylint: disable=broad-except error_message = traceback.format_exc() print(error_message, file=stderr) - - return response + return None diff --git a/tests/buildkite_test_collector/collector/test_api.py b/tests/buildkite_test_collector/collector/test_api.py index a428ab4..4db993d 100644 --- a/tests/buildkite_test_collector/collector/test_api.py +++ b/tests/buildkite_test_collector/collector/test_api.py @@ -93,6 +93,23 @@ def test_submit_with_payload_returns_an_api_response(successful_test): assert len(json["errors"]) == 0 assert json['queued'] == 1 +@responses.activate +def test_submit_with_bad_response(successful_test): + responses.add( + responses.POST, + "https://analytics-api.buildkite.com/v1/uploads", + json={'error': str(uuid4())}, + status=401) + + with mock.patch.dict(os.environ, {"CI": "true", "BUILDKITE_ANALYTICS_TOKEN": str(uuid4())}): + payload = Payload.init(detect_env()) + payload = Payload.started(payload) + + payload = payload.push_test_data(successful_test) + + result = submit(payload) + + assert result is None @responses.activate def test_submit_with_large_payload_batches_requests(successful_test, failed_test):