Skip to content

Commit 0979414

Browse files
committed
Add integration and unit tests for Elasticsearch error detail formatting
1 parent 1737196 commit 0979414

2 files changed

Lines changed: 68 additions & 1 deletion

File tree

providers/elasticsearch/tests/integration/elasticsearch/log/test_es_remote_log_io.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import elasticsearch
2525
import pytest
2626

27-
from airflow.providers.elasticsearch.log.es_task_handler import ElasticsearchRemoteLogIO
27+
from airflow.providers.elasticsearch.log.es_task_handler import ElasticsearchRemoteLogIO, _render_log_id
2828

2929
# The ES service hostname as defined in scripts/ci/docker-compose/integration-elasticsearch.yml
3030
ES_HOST = "http://elasticsearch:9200"
@@ -118,3 +118,31 @@ def test_read_missing_log(self, ti):
118118
assert log_source_info == []
119119
assert len(log_messages) == 1
120120
assert "not found in Elasticsearch" in log_messages[0]
121+
122+
def test_read_error_detail_integration(self, ti):
123+
"""Verify that error_detail is correctly retrieved and formatted in integration tests."""
124+
# Manually index a log entry with error_detail
125+
error_detail = [
126+
{
127+
"is_cause": False,
128+
"frames": [{"filename": "/opt/airflow/dags/fail.py", "lineno": 13, "name": "log_and_raise"}],
129+
"exc_type": "RuntimeError",
130+
"exc_value": "Woopsie. Something went wrong.",
131+
}
132+
]
133+
body = {
134+
"event": "Task failed with exception",
135+
"log_id": _render_log_id(self.elasticsearch_io.log_id_template, ti, ti.try_number),
136+
"offset": 1,
137+
"error_detail": error_detail,
138+
}
139+
self.elasticsearch_io.client.index(index=self.target_index, body=body)
140+
self.elasticsearch_io.client.indices.refresh(index=self.target_index)
141+
142+
log_source_info, log_messages = self.elasticsearch_io.read("", ti)
143+
144+
assert len(log_messages) == 1
145+
log_entry = json.loads(log_messages[0])
146+
assert "error_detail" in log_entry
147+
assert "RuntimeError: Woopsie. Something went wrong." in log_entry["error_detail"]
148+
assert 'File "/opt/airflow/dags/fail.py", line 13, in log_and_raise' in log_entry["error_detail"]

providers/elasticsearch/tests/unit/elasticsearch/log/test_es_task_handler.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,45 @@ def test_read_with_missing_log(self, mocked_count, ti):
10611061
assert f"*** Log {log_id} not found in Elasticsearch" in log_messages[0]
10621062
mocked_count.assert_called_once()
10631063

1064+
def test_read_error_detail(self, ti):
1065+
"""Verify that error_detail is correctly retrieved and formatted."""
1066+
error_detail = [
1067+
{
1068+
"is_cause": False,
1069+
"frames": [{"filename": "/opt/airflow/dags/fail.py", "lineno": 13, "name": "log_and_raise"}],
1070+
"exc_type": "RuntimeError",
1071+
"exc_value": "Woopsie. Something went wrong.",
1072+
}
1073+
]
1074+
body = {
1075+
"event": "Task failed with exception",
1076+
"log_id": _render_log_id(self.elasticsearch_io.log_id_template, ti, ti.try_number),
1077+
"offset": 1,
1078+
"error_detail": error_detail,
1079+
}
1080+
1081+
from airflow.providers.elasticsearch.log.es_response import Hit
1082+
1083+
mock_hit = Hit({"_source": body})
1084+
with (
1085+
patch.object(self.elasticsearch_io, "_es_read") as mock_es_read,
1086+
patch.object(
1087+
self.elasticsearch_io,
1088+
"_group_logs_by_host",
1089+
return_value={"http://localhost:9200": [mock_hit]},
1090+
),
1091+
):
1092+
mock_es_read.return_value = mock.MagicMock()
1093+
mock_es_read.return_value.hits = [mock_hit]
1094+
1095+
log_source_info, log_messages = self.elasticsearch_io.read("", ti)
1096+
1097+
assert len(log_messages) == 1
1098+
log_entry = json.loads(log_messages[0])
1099+
assert "error_detail" in log_entry
1100+
assert "RuntimeError: Woopsie. Something went wrong." in log_entry["error_detail"]
1101+
assert 'File "/opt/airflow/dags/fail.py", line 13, in log_and_raise' in log_entry["error_detail"]
1102+
10641103

10651104
# ---------------------------------------------------------------------------
10661105
# Tests for the error_detail helpers (issue #63736)

0 commit comments

Comments
 (0)