harden: per-item robustness + deadlines/caps across connectors; layered tests
Mail: _safe_decode + _iter_messages (per-mail try/except) -> eine kaputte Mail (charset x-unknown) bricht die Suche nicht mehr ab, findet so auch uralte Mails. Vollscan + Datum-Sort + MAX_SCAN/DEADLINE_S (Selbstheilung, kein 24h-Haenger mehr). Files: search_files mit SEARCH_DEADLINE_S + SEARCH_MAX_DIRS begrenzt (war unbegrenzte rekursive PROPFIND -> real 35s/449 Calls). Calendar/Contacts: PARSE_DEADLINE_S fuer client-seitiges vobject-Parsen; MAX_RESULTS-Output-Cap in get_events/get_tasks (war 10939 Zeilen bei 6000 Events); search Top-N + Hinweise. Tests: in Schichten getrennt -> Smoke (nightly), Edge + Stress (on-demand). Neu: test_smoke/test_edge/test_stress + conftest-Marker + run_full_tests.sh, nightly laeuft nur Smoke. Kontakt-Foto-Roundtrip-Test, Mail-Edge-Mails (x-unknown, kaputter Header, 2009er Alt-Mail). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
936ebc2f56
commit
c9ccb4392b
Vendored
+27
@@ -46,6 +46,33 @@ add("mcp-test-mail","INBOX", mail_with("voice@example.com","Sprachnachricht","Ku
|
||||
add("mcp-test-mail","INBOX", mail_with("projekt@example.com","Projektdateien","Archiv und Notizen.",["archive.zip","notes.txt","data.csv"]))
|
||||
add("mcp-test-mail","INBOX", mail_with("media@example.com","Praesentation + Clip","Folien und ein kurzes Video.",["slides.pptx","clip.mp4"]))
|
||||
|
||||
# --- Edge-Cases: Robustheit + uralte Mails (Fix 2026-06-24) ---
|
||||
def addraw(acct, folder, raw_bytes):
|
||||
path=os.path.join(BASE,acct,folder); os.makedirs(os.path.dirname(path),exist_ok=True)
|
||||
mailbox.Maildir(path,create=True).add(raw_bytes)
|
||||
|
||||
# Uralte Mail (2009) mit eindeutigem Token -> Suche muss alte Mails finden
|
||||
_old=simple("archiv@example.com","mcptest@local","Uralte Rechnung URALTMAIL2009","Sehr alte Mail aus 2009 zum Testen der Alt-Mail-Suche.")
|
||||
_old.replace_header("Date","Tue, 03 Mar 2009 08:15:00 +0100")
|
||||
add("mcp-test-mail","Archive",_old)
|
||||
|
||||
# Mail mit kaputtem Charset x-unknown -> darf die Suche NICHT killen, Token findbar
|
||||
addraw("mcp-test-mail","INBOX",
|
||||
b"From: weird@example.com\r\nTo: mcptest@local\r\n"
|
||||
b"Subject: Kaputtes Encoding XUNKNOWNTOKEN\r\n"
|
||||
b"Date: Wed, 10 Jan 2018 12:00:00 +0100\r\n"
|
||||
b'Content-Type: text/plain; charset="x-unknown"\r\n'
|
||||
b"Content-Transfer-Encoding: 8bit\r\n\r\n"
|
||||
b"Koerpertext mit kaputtem Charset XUNKNOWNTOKEN und Umlaut \xfc.\r\n")
|
||||
|
||||
# Mail mit kaputtem encoded-word-Header -> decode_hdr darf nicht crashen
|
||||
addraw("mcp-test-mail","INBOX",
|
||||
b"From: =?invalid-charset?Q?Br=F6tchen?= <bad@example.com>\r\nTo: mcptest@local\r\n"
|
||||
b"Subject: =?x-unknown?B?a2FwdXR0?= BADHEADERTOKEN\r\n"
|
||||
b"Date: Fri, 05 Jul 2013 09:00:00 +0200\r\n"
|
||||
b"Content-Type: text/plain; charset=utf-8\r\n\r\n"
|
||||
b"Body BADHEADERTOKEN.\r\n")
|
||||
|
||||
# new -> cur
|
||||
for r,d,f in os.walk(BASE):
|
||||
if r.endswith("new"):
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
From: archiv@example.com
|
||||
To: mcptest@local
|
||||
Subject: Uralte Rechnung URALTMAIL2009
|
||||
Date: Tue, 03 Mar 2009 08:15:00 +0100
|
||||
|
||||
U2VociBhbHRlIE1haWwgYXVzIDIwMDkgenVtIFRlc3RlbiBkZXIgQWx0LU1haWwtU3VjaGUu
|
||||
+5
-5
@@ -1,11 +1,11 @@
|
||||
Content-Type: multipart/mixed; boundary="===============3363393740883118962=="
|
||||
Content-Type: multipart/mixed; boundary="===============2801843982600110124=="
|
||||
MIME-Version: 1.0
|
||||
From: billing@example.com
|
||||
To: mcptest@local
|
||||
Subject: Ihre Rechnung Juni 2026
|
||||
Date: Tue, 17 Jun 2026 10:00:00 +0200
|
||||
|
||||
--===============3363393740883118962==
|
||||
--===============2801843982600110124==
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -13,7 +13,7 @@ Content-Transfer-Encoding: base64
|
||||
SW0gQW5oYW5nIGRpZSBSZWNobnVuZyAoVGV4dC1QREYpIHVuZCBkZXIgU2NhbiAoQmlsZC1QREYp
|
||||
Lg==
|
||||
|
||||
--===============3363393740883118962==
|
||||
--===============2801843982600110124==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -40,7 +40,7 @@ b290IDIgMCBSCi9JbmZvIDcgMCBSCi9JRCBbPDkzRTNFOTU5Q0U4RUI1RUZFRkRFMjQyNjRCQkIy
|
||||
NzIxPjw5M0UzRTk1OUNFOEVCNUVGRUZERTI0MjY0QkJCMjcyMT5dCj4+CnN0YXJ0eHJlZgo3NzkK
|
||||
JSVFT0YK
|
||||
|
||||
--===============3363393740883118962==
|
||||
--===============2801843982600110124==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -217,4 +217,4 @@ MDAwMCBuIAowMDAwMDA4NzI4IDAwMDAwIG4gCjAwMDAwMDg3NDcgMDAwMDAgbiAKMDAwMDAwODc2
|
||||
OSAwMDAwMCBuIAowMDAwMDA4Nzg4IDAwMDAwIG4gCnRyYWlsZXIKPDwKL1NpemUgMTgKL0luZm8g
|
||||
MTcgMCBSCi9Sb290IDEgMCBSCj4+CnN0YXJ0eHJlZgo5MjM3CiUlRU9GCg==
|
||||
|
||||
--===============3363393740883118962==--
|
||||
--===============2801843982600110124==--
|
||||
+5
-5
@@ -1,18 +1,18 @@
|
||||
Content-Type: multipart/mixed; boundary="===============4945638286946888290=="
|
||||
Content-Type: multipart/mixed; boundary="===============1039225266335026552=="
|
||||
MIME-Version: 1.0
|
||||
From: foto@example.com
|
||||
To: mcptest@local
|
||||
Subject: Fotos vom Wochenende
|
||||
Date: Tue, 17 Jun 2026 10:00:00 +0200
|
||||
|
||||
--===============4945638286946888290==
|
||||
--===============1039225266335026552==
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
QW5iZWkgendlaSBCaWxkZXIu
|
||||
|
||||
--===============4945638286946888290==
|
||||
--===============1039225266335026552==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -194,7 +194,7 @@ AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
|
||||
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
|
||||
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/2Q==
|
||||
|
||||
--===============4945638286946888290==
|
||||
--===============1039225266335026552==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -262,4 +262,4 @@ ABAgwAAQ0O1ULfTCQ1NP1VIA8P+eHTAABAgwAAQIMAAEfKjvgKc8suBU3QcAnFXsgAEgQIABIECA
|
||||
ASBAgAEgQIABIECAASBAgAEgQIABIECAASBAgAEgQIABIECAASBAgAEgQIABIECAASBAgAEgQIAB
|
||||
IECAASDgfwAcngvShI2jGAAAAABJRU5ErkJggg==
|
||||
|
||||
--===============4945638286946888290==--
|
||||
--===============1039225266335026552==--
|
||||
+5
-5
@@ -1,18 +1,18 @@
|
||||
Content-Type: multipart/mixed; boundary="===============8126427565043495650=="
|
||||
Content-Type: multipart/mixed; boundary="===============3148390453173742087=="
|
||||
MIME-Version: 1.0
|
||||
From: buero@example.com
|
||||
To: mcptest@local
|
||||
Subject: Quartalsbericht Q2
|
||||
Date: Tue, 17 Jun 2026 10:00:00 +0200
|
||||
|
||||
--===============8126427565043495650==
|
||||
--===============3148390453173742087==
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
QmVyaWNodCAoV29yZCkgdW5kIFphaGxlbiAoRXhjZWwpIGFuYmVpLg==
|
||||
|
||||
--===============8126427565043495650==
|
||||
--===============3148390453173742087==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -663,7 +663,7 @@ AIkVAAASAAAAAAAAAAAAAACAATmBAAB3b3JkL251bWJlcmluZy54bWxQSwECFAMUAAAACABvPtNc
|
||||
osjWZ70FAACEIAAAFwAAAAAAAAAAAAAAgAHUhAAAZG9jUHJvcHMvdGh1bWJuYWlsLmpwZWdQSwUG
|
||||
AAAAABEAEQBhBAAAxooAAAAA
|
||||
|
||||
--===============8126427565043495650==
|
||||
--===============3148390453173742087==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -756,4 +756,4 @@ AxQAAAAIAG8+01wkHpuirQAAAPgBAAAaAAAAAAAAAAAAAACAAZIOAAB4bC9fcmVscy93b3JrYm9v
|
||||
ay54bWwucmVsc1BLAQIUAxQAAAAIAG8+01xlkHmSGQEAAM8DAAATAAAAAAAAAAAAAACAAXcPAABb
|
||||
Q29udGVudF9UeXBlc10ueG1sUEsFBgAAAAAJAAkAPgIAAMEQAAAAAA==
|
||||
|
||||
--===============8126427565043495650==--
|
||||
--===============3148390453173742087==--
|
||||
+4
-4
@@ -1,18 +1,18 @@
|
||||
Content-Type: multipart/mixed; boundary="===============5981132086698869830=="
|
||||
Content-Type: multipart/mixed; boundary="===============2935331032460717163=="
|
||||
MIME-Version: 1.0
|
||||
From: voice@example.com
|
||||
To: mcptest@local
|
||||
Subject: Sprachnachricht
|
||||
Date: Tue, 17 Jun 2026 10:00:00 +0200
|
||||
|
||||
--===============5981132086698869830==
|
||||
--===============2935331032460717163==
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
S3VyemUgQXVkaW9uYWNocmljaHQgaW0gQW5oYW5nLg==
|
||||
|
||||
--===============5981132086698869830==
|
||||
--===============2935331032460717163==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -175,4 +175,4 @@ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xDE94AJeGVd+akgAAAANIOAAARV
|
||||
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
|
||||
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==
|
||||
|
||||
--===============5981132086698869830==--
|
||||
--===============2935331032460717163==--
|
||||
+6
-6
@@ -1,18 +1,18 @@
|
||||
Content-Type: multipart/mixed; boundary="===============1387712317359960679=="
|
||||
Content-Type: multipart/mixed; boundary="===============0315165645846539514=="
|
||||
MIME-Version: 1.0
|
||||
From: projekt@example.com
|
||||
To: mcptest@local
|
||||
Subject: Projektdateien
|
||||
Date: Tue, 17 Jun 2026 10:00:00 +0200
|
||||
|
||||
--===============1387712317359960679==
|
||||
--===============0315165645846539514==
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
QXJjaGl2IHVuZCBOb3RpemVuLg==
|
||||
|
||||
--===============1387712317359960679==
|
||||
--===============0315165645846539514==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -24,7 +24,7 @@ ZGF0YS5jc3ZuYW1lLHdlcnQKQWxwaGEsMQpCZXRhLDIKUEsBAhQDFAAAAAAAbz7TXE28oLEtAAAA
|
||||
LQAAAAkAAAAAAAAAAAAAALCBAAAAAG5vdGVzLnR4dFBLAQIUAxQAAAAAAG8+01wa5IaIGQAAABkA
|
||||
AAAIAAAAAAAAAAAAAACwgVQAAABkYXRhLmNzdlBLBQYAAAAAAgACAG0AAACTAAAAAAA=
|
||||
|
||||
--===============1387712317359960679==
|
||||
--===============0315165645846539514==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -32,7 +32,7 @@ Content-Disposition: attachment; filename="notes.txt"
|
||||
|
||||
RWluZmFjaGUgVGV4dGRhdGVpLgpaZWlsZSAyLgpVbWxhdXRlOiBhZW9ldWUK
|
||||
|
||||
--===============1387712317359960679==
|
||||
--===============0315165645846539514==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -40,4 +40,4 @@ Content-Disposition: attachment; filename="data.csv"
|
||||
|
||||
bmFtZSx3ZXJ0CkFscGhhLDEKQmV0YSwyCg==
|
||||
|
||||
--===============1387712317359960679==--
|
||||
--===============0315165645846539514==--
|
||||
+5
-5
@@ -1,18 +1,18 @@
|
||||
Content-Type: multipart/mixed; boundary="===============0497362329568289493=="
|
||||
Content-Type: multipart/mixed; boundary="===============4194720031885655663=="
|
||||
MIME-Version: 1.0
|
||||
From: media@example.com
|
||||
To: mcptest@local
|
||||
Subject: Praesentation + Clip
|
||||
Date: Tue, 17 Jun 2026 10:00:00 +0200
|
||||
|
||||
--===============0497362329568289493==
|
||||
--===============4194720031885655663==
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
Rm9saWVuIHVuZCBlaW4ga3VyemVzIFZpZGVvLg==
|
||||
|
||||
--===============0497362329568289493==
|
||||
--===============4194720031885655663==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -515,7 +515,7 @@ AAAANgEAACAAAAAAAAAAAAAAAIAB01sAAHBwdC9zbGlkZXMvX3JlbHMvc2xpZGUxLnhtbC5yZWxz
|
||||
UEsBAhQDFAAAAAgAbz7TXFqgDq2jBQAA4w8AABcAAAAAAAAAAAAAAIAByFwAAGRvY1Byb3BzL3Ro
|
||||
dW1ibmFpbC5qcGVnUEsFBgAAAAAmACYAowsAAKBiAAAAAA==
|
||||
|
||||
--===============0497362329568289493==
|
||||
--===============4194720031885655663==
|
||||
Content-Type: application/octet-stream
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: base64
|
||||
@@ -713,4 +713,4 @@ AX0AAAHtAAABgwAAAukAAADGAAAAUQAAAEYAAAJOAAAAvgAAAGYAAABfAAAAFHN0Y28AAAAAAAAA
|
||||
AQAAADAAAABhdWR0YQAAAFltZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAA
|
||||
AAAAACxpbHN0AAAAJKl0b28AAAAcZGF0YQAAAAEAAAAATGF2ZjYyLjMuMTAw
|
||||
|
||||
--===============0497362329568289493==--
|
||||
--===============4194720031885655663==--
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
From: weird@example.com
|
||||
To: mcptest@local
|
||||
Subject: Kaputtes Encoding XUNKNOWNTOKEN
|
||||
Date: Wed, 10 Jan 2018 12:00:00 +0100
|
||||
Content-Type: text/plain; charset="x-unknown"
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Koerpertext mit kaputtem Charset XUNKNOWNTOKEN und Umlaut ü.
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
From: =?invalid-charset?Q?Br=F6tchen?= <bad@example.com>
|
||||
To: mcptest@local
|
||||
Subject: =?x-unknown?B?a2FwdXR0?= BADHEADERTOKEN
|
||||
Date: Fri, 05 Jul 2013 09:00:00 +0200
|
||||
Content-Type: text/plain; charset=utf-8
|
||||
|
||||
Body BADHEADERTOKEN.
|
||||
Reference in New Issue
Block a user