This is an automated email from the ASF dual-hosted git repository.
vincbeck 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 af2c3efed7b Remove unused FAB test log assertion helpers (#75876)
af2c3efed7b is described below
commit af2c3efed7b422cb0fd08412e234a5042d289d8d
Author: Hussein Awala <[email protected]>
AuthorDate: Wed Oct 28 20:58:51 2026 +0100
Remove unused FAB test log assertion helpers (#75876)
The FAB log assertion helpers have no callers; active view tests import
only the retained login and content helpers.
---
providers/fab/tests/unit/fab/utils.py | 109 ----------------------------------
1 file changed, 109 deletions(-)
diff --git a/providers/fab/tests/unit/fab/utils.py
b/providers/fab/tests/unit/fab/utils.py
index ad8f9791a6b..ec7835a7922 100644
--- a/providers/fab/tests/unit/fab/utils.py
+++ b/providers/fab/tests/unit/fab/utils.py
@@ -16,8 +16,6 @@
# under the License.
from __future__ import annotations
-import ast
-import json
from collections.abc import Generator
from contextlib import contextmanager
from typing import TYPE_CHECKING, Any, NamedTuple
@@ -25,16 +23,6 @@ from unittest import mock
import flask
import pytest
-from sqlalchemy import delete, select
-
-from airflow.models import Log
-
-try:
- from airflow.sdk._shared.secrets_masker import DEFAULT_SENSITIVE_FIELDS
-except ImportError:
- from airflow.sdk.execution_time.secrets_masker import
DEFAULT_SENSITIVE_FIELDS # type:ignore[no-redef]
-
-sensitive_fields = DEFAULT_SENSITIVE_FIELDS
if TYPE_CHECKING:
import jinja2
@@ -84,103 +72,6 @@ def check_content_not_in_response(text, resp,
resp_code=200):
assert text not in resp_html
-def _masked_value_check(data, sensitive_fields):
- """
- Recursively check if sensitive fields are properly masked.
-
- :param data: JSON object (dict, list, or value)
- :param sensitive_fields: Set of sensitive field names
- """
- if isinstance(data, dict):
- for key, value in data.items():
- if key in sensitive_fields:
- assert value == "***", f"Expected masked value for {key}, but
got {value}"
- else:
- _masked_value_check(value, sensitive_fields)
- elif isinstance(data, list):
- for item in data:
- _masked_value_check(item, sensitive_fields)
-
-
-def _check_last_log(session, dag_id, event, logical_date, expected_extra=None,
check_masked=False):
- logs = session.execute(
- select(
- Log.dag_id,
- Log.task_id,
- Log.event,
- Log.logical_date,
- Log.owner,
- Log.extra,
- )
- .filter(
- Log.dag_id == dag_id,
- Log.event == event,
- Log.logical_date == logical_date,
- )
- .order_by(Log.dttm.desc())
- .limit(5)
- ).all()
- assert len(logs) >= 1
- assert logs[0].extra
- if expected_extra:
- assert json.loads(logs[0].extra) == expected_extra
- if check_masked:
- extra_json = json.loads(logs[0].extra)
- _masked_value_check(extra_json, sensitive_fields)
-
- session.execute(delete(Log))
-
-
-def _check_last_log_masked_connection(session, dag_id, event, logical_date):
- logs = session.execute(
- select(Log.dag_id, Log.task_id, Log.event, Log.logical_date,
Log.owner, Log.extra)
- .where(Log.dag_id == dag_id, Log.event == event, Log.logical_date ==
logical_date)
- .order_by(Log.dttm.desc())
- .limit(5)
- ).all()
-
- assert len(logs) >= 1
- extra = ast.literal_eval(logs[0].extra)
- assert extra == {
- "conn_id": "test_conn",
- "conn_type": "http",
- "description": "description",
- "host": "localhost",
- "port": "8080",
- "username": "root",
- "password": "***",
- "extra": {"x_secret": "***", "y_secret": "***"},
- }
-
-
-def _check_last_log_masked_variable(
- session,
- dag_id,
- event,
- logical_date,
-):
- logs = session.execute(
- select(
- Log.dag_id,
- Log.task_id,
- Log.event,
- Log.logical_date,
- Log.owner,
- Log.extra,
- )
- .where(
- Log.dag_id == dag_id,
- Log.event == event,
- Log.logical_date == logical_date,
- )
- .order_by(Log.dttm.desc())
- .limit(5)
- ).all()
- assert len(logs) >= 1
- extra_dict = ast.literal_eval(logs[0].extra)
- assert extra_dict == {"key": "x_secret", "val": "***"}
-
-
class _TemplateWithContext(NamedTuple):
template: jinja2.environment.Template
context: dict[str, Any]