From a1caa69b38057db7f6679b0ec62aec5040e83e0d Mon Sep 17 00:00:00 2001 From: Denys Fedoryshchenko Date: Thu, 18 Jun 2026 09:21:44 +0300 Subject: [PATCH] fix: Fix dashboard retry backoff import Fix the NameError i spotted when retry backoff calls time.sleep. Import time for dashboard retry backoff. Cover retryable 504 responses with a focused unit test. Signed-off-by: Denys Fedoryshchenko --- kcidev/libs/dashboard.py | 1 + tests/test_dashboard.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 tests/test_dashboard.py diff --git a/kcidev/libs/dashboard.py b/kcidev/libs/dashboard.py index f558c9a..909f4b2 100644 --- a/kcidev/libs/dashboard.py +++ b/kcidev/libs/dashboard.py @@ -1,5 +1,6 @@ import json import logging +import time import urllib from datetime import datetime, timedelta from functools import wraps diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py new file mode 100644 index 0000000..130eac6 --- /dev/null +++ b/tests/test_dashboard.py @@ -0,0 +1,21 @@ +from unittest.mock import Mock + +from kcidev.libs import dashboard + + +def test_dashboard_api_fetch_retries_retryable_status(monkeypatch): + retry_response = Mock(status_code=504) + success_response = Mock(status_code=200) + success_response.json.return_value = {"ok": True} + + get = Mock(side_effect=[retry_response, success_response]) + sleep = Mock() + + monkeypatch.setattr(dashboard.kcidev_session, "get", get) + monkeypatch.setattr(dashboard.time, "sleep", sleep) + + result = dashboard.dashboard_api_fetch("hardware/", {}, False, max_retries=1) + + assert result == {"ok": True} + assert get.call_count == 2 + sleep.assert_called_once_with(2)