"""Tests für die Anfrage-Bremse. Sie hatte bis zum 26.07.2026 keine — und dabei war sie seit Wochen die Ursache eines gemeldeten Fehlers („dieser Bereich wird oft neu geladen"): Das Limit lag mit 100/min UNTER dem, was Rippys eigenes Dashboard verursacht, und weil hinter dem nginx alle Clients dieselbe Adresse hatten, galt es auch noch gemeinsam. """ import ratelimit def test_hinter_dem_proxy_zaehlt_der_echte_client(): """Der ganze Grund für den Fehler: ein Eimer für alle.""" assert ratelimit.client_kennung("172.19.0.6", "192.168.178.20") == "192.168.178.20" assert ratelimit.client_kennung("172.19.0.6", "192.168.178.99") == "192.168.178.99" # Zwei Clients hinter demselben Proxy sind zwei Eimer. assert ( ratelimit.client_kennung("172.19.0.6", "192.168.178.20") != ratelimit.client_kennung("172.19.0.6", "192.168.178.99") ) def test_ohne_kopfzeile_gilt_der_direkte_absender(): assert ratelimit.client_kennung("192.168.178.20", None) == "192.168.178.20" assert ratelimit.client_kennung("192.168.178.20", "") == "192.168.178.20" def test_erste_adresse_der_kette_gewinnt(): """X-Forwarded-For kann eine Liste sein — der Ursprung steht vorn.""" assert ratelimit.client_kennung( "172.19.0.6", "192.168.178.20, 172.19.0.6" ) == "192.168.178.20" def test_muell_in_der_kopfzeile_wird_ignoriert(): """Sonst könnte ein Tippfehler beliebig viele Eimer aufmachen.""" assert ratelimit.client_kennung("172.19.0.6", "nicht-ip") == "172.19.0.6" assert ratelimit.client_kennung("172.19.0.6", "