elastic / elastic/apm-agent-python

flaky test test_send_remote_failover_sync_non_transport_exception_error

Offen
#1,988 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
agent-python community triage
Vorherrschende Sprache
Python
Sterne
431
Forks
239
Ø Merge
5 T. 10 Std.
Gemergte PRs (30 T.)
7

Beschreibung

**Describe the bug**:

Cannot reproduce reliably still may be useful to fix:

```
=================================== FAILURES ===================================
_________ test_send_remote_failover_sync_non_transport_exception_error _________

should_try =
http_send =
caplog = <_pytest.logging.LogCaptureFixture object at 0x7f943c8a5c90>

@mock.patch("elasticapm.transport.http.Transport.send")
@mock.patch("elasticapm.transport.base.TransportState.should_try")
def test_send_remote_failover_sync_non_transport_exception_error(should_try, http_send, caplog):
should_try.return_value = True

client = Client(
server_url="http://example.com",
service_name="app_name",
secret_token="secret",
transport_class="elasticapm.transport.http.Transport",
metrics_interval="0ms",
metrics_sets=[],
)
# test error
http_send.side_effect = ValueError("oopsie")
with caplog.at_level("ERROR", "elasticapm.transport"):
client.capture_message("foo", handled=False)
client._transport.flush()
assert client._transport.state.did_fail()
assert_any_record_contains(caplog.records, "oopsie", "elasticapm.transport")

# test recovery
http_send.side_effect = None
client.capture_message("foo", handled=False)
client.close()
> assert not client._transport.state.did_fail()
E assert not True
E + where True = >()
E + where > = .did_fail
E + where = .state
E + where = ._transport

tests/client/client_tests.py:288: AssertionError
----------------------------- Captured stderr call -----------------------------
{"@timestamp":"2024-03-06T16:09:14.917Z","log.level":"error","message":"Failed to submit message: 'oopsie'","ecs":{"version":"1.6.0"},"log":{"logger":"elasticapm.transport","origin":{"file":{"line":318,"name":"base.py"},"function":"handle_transport_fail"},"original":"Failed to submit message: 'oopsie'"},"process":{"name":"MainProcess","pid":905083,"thread":{"id":140274711856704,"name":"eapm event processor thread"}},"service":{"name":"app_name"}}
{"@timestamp":"2024-03-06T16:09:14.917Z","log.level":"error","message":"Failed to submit message: 'oopsie'","ecs":{"version":"1.6.0"},"log":{"logger":"elasticapm.transport","origin":{"file":{"line":318,"name":"base.py"},"function":"handle_transport_fail"},"original":"Failed to submit message: 'oopsie'"},"process":{"name":"MainProcess","pid":905083,"thread":{"id":140274711856704,"name":"eapm event processor thread"}},"service":{"name":"app_name"}}
------------------------------ Captured log call -------------------------------
{"@timestamp":"2024-03-06T16:09:14.917Z","log.level":"error","message":"Failed to submit message: 'oopsie'","ecs":{"version":"1.6.0"},"log":{"logger":"elasticapm.transport","origin":{"file":{"line":318,"name":"base.py"},"function":"handle_transport_fail"},"original":"Failed to submit message: 'oopsie'"},"process":{"name":"MainProcess","pid":905083,"thread":{"id":140274711856704,"name":"eapm event processor thread"}},"service":{"name":"app_name"}}
=============================== warnings summary ===============================
```

**To Reproduce**

1. pytest

**Environment (please complete the following information)**
- OS: [e.g. Linux] Linux
- Python version: 3.10.12
- Framework and version [e.g. Django 2.1]:
- APM Server version:
- Agent version:

**Additional context**

None

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit tests/client/client_tests.py, insbesondere mit test_send_remote_failover_sync_non_transport_exception_error, und untersuche die in base.py referenzierte Behandlung von Transportfehlern. Führe den benannten Test wiederholt aus, um den zeitabhängigen Fehler zu verstehen. Als abgeschlossen gilt die Aufgabe, wenn der Test zuverlässig besteht und weiterhin das fehlgeschlagene Senden, die protokollierte Exception und die anschließende Wiederherstellung überprüft.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend, testing-qa
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.