EN · DE · RU · FR · ES

#1865: CarddavTestClient.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CarddavTestClient.kt Testwerkzeug / Entwicklungswerkzeug — Paket org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CarddavTestClient.kt 468 Zeilen · 372 Code · 60 Kommentare · 36 leer
Eigenständiger CardDAV-Testclient mit einer main()-Funktion und einer HTTP-Client-Klasse. Wird für manuelle Tests und das Debuggen des CardDAV-Servers verwendet. Unterstützt OPTIONS/PROPFIND/GET/REPORT-Anfragen, Sync-Token-Sammlung, VCard-Abruf mit PHOTO-Analyse und den Batch-Export aller Kontakte. Enthält umfangreiche auskommentierte Testsequenzen, die die iterative Entwicklung der CardDAV-Protokollunterstützung zeigen.

Architektur

Dies ist ein Entwicklungs-Debugging-Werkzeug, kein Komponententest. Es hat einen main()-Einstiegspunkt und fungiert als eigenständiger CardDAV-Client zum Testen der Serverimplementierung. Die Datei enthält umfangreichen auskommentierten Code, der die Entwicklung der CardDAV-Protokolltests zeigt.

Importe und Abhängigkeiten

ImportZweck
org.apache.hc.client5.http.*Apache HttpClient 5 für die HTTP-Kommunikation (HttpGet, CloseableHttpClient, HttpClients, ClassicHttpResponse, ContentType, HttpEntity, HttpClientResponseHandler, StringEntity, ClassicRequestBuilder, HttpCoreContext)
org.projectforge.common.extensions.abbreviateKotlin-Erweiterungsfunktion zum Kürzen langer Zeichenketten in der Protokollausgabe
java.util.Base64JDK Base64-Kodierer für den HTTP-Basisauthentifizierungs-Header

Klassenstruktur: CardDavTestClient

Konstruktorparameter

Innere Klasse: ResponseData

Einfache Datenklasse, die content: String, status: Int und headers: String aus HTTP-Antworten enthält.

Authentifizierung

Verwendet die HTTP-Basisauthentifizierung mit dem Header Authorization: Basic {base64(benutzername:passwort)}, der einmalig bei der Initialisierung erstellt wird.

Antwort-Handler

Ein funktionaler HttpClientResponseHandler, der die Antwort-Entität als UTF-8-Text liest und den Statuscode sowie die Header extrahiert.

Wichtige Methoden

run() — Standard-Testsequenz

Führt einen CardDAV-Protokollablauf aus: OPTIONS → GET (VCard) → GET (Foto). Der Großteil des ursprünglichen Testcodes (PROPFIND, REPORT, Sync-Collection) ist auskommentiert, wobei XML-Anfragekörperbeispiele als Referenz erhalten bleiben.

fetchAllVCards() — Batch-VCard-Export

Ruft alle VCards vom Server mithilfe einer CardDAV addressbook-query REPORT-Anfrage ab, speichert jede VCard unter /tmp/carddav-vcards/ und analysiert PHOTO-Einträge. Meldet Statistiken zu:

Diese Methode war maßgeblich am Debuggen der CardDAV-Fotobehandlung (URL- vs. eingebetteter Modus) beteiligt.

sendRequest() — Generische HTTP-Anfrage

Erstellt und führt HTTP-Anfragen mit konfigurierbarer Methode, Pfad, Körper, Authentifizierung und Protokollierung aus. Verwendet ClassicRequestBuilder von Apache HttpClient 5.

analyzePhoto(vcard) — PHOTO-Eigenschafts-Parser

Analysiert VCard-Daten, um den Fotokodierungsmodus zu bestimmen:

Behandelt VCard-Zeilenumbrüche (Fortsetzungszeilen, die mit Leerzeichen beginnen).

Main-Funktion — CLI-Schnittstelle

Verwendung: CardDavTestClient <benutzername> <dav-token> [--fetch-all]
  --fetch-all: Alle VCards vom Server abrufen und unter /tmp/carddav-vcards/ speichern

Positionsargumente: Benutzername, DAV-Token, optionale Basis-URL, optionales Sync-Token.

Die Datei enthält auskommentierte Referenzdaten, die echte CardDAV-Serverantworten zeigen:
Anfrage mit Methode=OPTIONS für Milton (uri=/users/benutzername/, session-id=null)
Basisauthentifizierung fehlgeschlagen, Header 'authorization' nicht gefunden.
PROPFIND-Aufruf erkannt: /users/benutzername/
PROPFIND für Milton (uri=/users/benutzername/addressBooks/default/
REPORT für Milton (uri=/users/benutzername/addressBooks/default/
Dies zeigt, dass der CardDAV-Server ursprünglich auf dem Milton WebDAV-Framework basierte und die aktuelle Implementierung dieses Protokoll nativ neu implementiert.
Die Datei dient sowohl als Testclient als auch als lebendige Dokumentation der CardDAV-Protokollimplementierung. Die auskommentierten PROPFIND/REPORT-Anfragekörper sind gültiges CardDAV-XML, das das erwartete Serververhalten dokumentiert.

Git-Verlauf

868d6abb7 2025 -> 2026
bbf6b792c VCard-Upload: spezielle Behandlung von Formularfeldern.
f2ceb72f1 CardDav: Foto-URLs relativ.
63081666f Quelltextdatei-Header: 2024 -> 2025.
943947aaa Adressen: Unterstützung von GIF und JPEG (auch für CardDAV-Server).
fc6301b43 WIP: CardDavServer.
c4062ed97 WIP: Carddav
40e554cbe WIP: Carddav