This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 71314b86cf Yet another attempt to fix flakey `test_disable_logging`
test (#36455)
71314b86cf is described below
commit 71314b86cfb73478b929c5728c5b969f6b3caeae
Author: Andrey Anshin <[email protected]>
AuthorDate: Thu Dec 28 01:45:42 2023 +0400
Yet another attempt to fix flakey `test_disable_logging` test (#36455)
---
.../cloud/utils/test_credentials_provider.py | 40 ++++++++++++++++------
1 file changed, 30 insertions(+), 10 deletions(-)
diff --git a/tests/providers/google/cloud/utils/test_credentials_provider.py
b/tests/providers/google/cloud/utils/test_credentials_provider.py
index fedea26cd8..2ebc629130 100644
--- a/tests/providers/google/cloud/utils/test_credentials_provider.py
+++ b/tests/providers/google/cloud/utils/test_credentials_provider.py
@@ -20,6 +20,7 @@ import json
import logging
import os
import re
+from contextlib import contextmanager
from io import StringIO
from tempfile import NamedTemporaryFile
from unittest import mock
@@ -55,6 +56,31 @@ ANOTHER_PROJECT_ID = "another_project_id"
CRED_PROVIDER_LOGGER_NAME =
"airflow.providers.google.cloud.utils.credentials_provider._CredentialProvider"
[email protected]
+def assert_no_logs(caplog):
+ """
+ Helper fixture for assert if any log message for the specific logger
captured.
+
+ This is workaround for fix issue with asyncio in ``test_disable_logging``,
see:
+ - https://github.com/apache/airflow/pull/26871
+ - https://github.com/apache/airflow/pull/26973
+ - https://github.com/apache/airflow/pull/36453
+ """
+
+ @contextmanager
+ def wrapper(level: str, logger: str):
+ with caplog.at_level(level=level, logger=logger):
+ caplog.clear()
+ yield
+ if records := list(filter(lambda lr: lr[0] == logger,
caplog.record_tuples)):
+ msg = f"Did not expect any log message from logger={logger!r} but
got:"
+ for log_record in records:
+ msg += f"\n * logger name: {log_record[0]!r}, level:
{log_record[1]}, msg: {log_record[2]!r}"
+ raise AssertionError(msg)
+
+ return wrapper
+
+
class TestHelper:
def test_build_gcp_conn_path(self):
value = "test"
@@ -364,32 +390,26 @@ class TestGetGcpCredentialsAndProjectId:
@mock.patch(
"google.oauth2.service_account.Credentials.from_service_account_file",
)
- def test_disable_logging(self, mock_default, mock_info, mock_file, caplog):
+ def test_disable_logging(self, mock_default, mock_info, mock_file,
assert_no_logs):
"""Test disable logging in ``get_credentials_and_project_id``"""
# assert no logs
- with caplog.at_level(level=logging.DEBUG,
logger=CRED_PROVIDER_LOGGER_NAME):
- caplog.clear()
+ with assert_no_logs(level="DEBUG", logger=CRED_PROVIDER_LOGGER_NAME):
get_credentials_and_project_id(disable_logging=True)
- assert not caplog.record_tuples
# assert no debug logs emitted from get_credentials_and_project_id
- with caplog.at_level(level=logging.DEBUG,
logger=CRED_PROVIDER_LOGGER_NAME):
- caplog.clear()
+ with assert_no_logs(level="DEBUG", logger=CRED_PROVIDER_LOGGER_NAME):
get_credentials_and_project_id(
keyfile_dict={"private_key": "PRIVATE_KEY"},
disable_logging=True,
)
- assert not caplog.record_tuples
# assert no debug logs emitted from get_credentials_and_project_id
- with caplog.at_level(level=logging.DEBUG,
logger=CRED_PROVIDER_LOGGER_NAME):
- caplog.clear()
+ with assert_no_logs(level="DEBUG", logger=CRED_PROVIDER_LOGGER_NAME):
get_credentials_and_project_id(
key_path="KEY.json",
disable_logging=True,
)
- assert not caplog.record_tuples
class TestGetScopes: