Eine aufbereitete Darstellung der Quelle
Stufen
Anforderungen
|
Konzepte
|
Entwurf
|
Entwicklung
|
Qualitätssicherung
|
Lebenszyklus
|
Steuerung
Ziele
Untersuchung
mit Columbo
Integrität von
Datenbanken
Interaktion und
Portierbarkeit
Ergonomie der
Schnittstellen
Angebot
Produkte
Projekt
Beratung
Mittel
Analytik
Modellierung
Sprachen
Algebra
Logik
Hardware
Denken
Kreativität
Zusammenhänge
Gesellschaft
Wirtschaft
Branche
Firma
Benutzer
products
/
Sources
/
formale Sprachen
/
C
/
LibreOffice
/
svgio
/
qa
/
cppunit
/
data
/ (
LibreOffice
Version 25.8.3.2
©
) Datei vom 5.10.2025 mit Größe 143 B
Bilddatei
api.py
products/Sources/formale Sprachen/C/Firefox/testing/mozbase/mozhttpd/tests/api.py
#!/usr/bin/env python # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. import collections import json import os from urllib.error import HTTPError from urllib.request import ( HTTPHandler, ProxyHandler, Request, build_opener, install_opener, urlopen, ) import mozhttpd import mozunit import pytest from six import ensure_binary, ensure_str def httpd_url(httpd, path, querystr=None): """Return the URL to a started MozHttpd server for the given info.""" url = "http://127.0.0.1:{port}{path}".format( port=httpd.httpd.server_port, path=path, ) if querystr is not None: url = "{url}?{querystr}".format( url=url, querystr=querystr, ) return url @pytest.fixture(name="num_requests") def fixture_num_requests(): """Return a defaultdict to count requests to HTTP handlers.""" return collections.defaultdict(int) @pytest.fixture(name="try_get") def fixture_try_get(num_requests): """Return a function to try GET requests to the server.""" def try_get(httpd, querystr): """Try GET requests to the server.""" num_requests["get_handler"] = 0 f = urlopen(httpd_url(httpd, "/api/resource/1", querystr)) assert f.getcode() == 200 assert json.loads(f.read()) == {"called": 1, "id": "1", "query": querystr} assert num_requests["get_handler"] == 1 return try_get @pytest.fixture(name="try_post") def fixture_try_post(num_requests): """Return a function to try POST calls to the server.""" def try_post(httpd, querystr): """Try POST calls to the server.""" num_requests["post_handler"] = 0 postdata = {"hamburgers": "1234"} f = urlopen( httpd_url(httpd, "/api/resource/", querystr), data=ensure_binary(json.dumps(postdata)), ) assert f.getcode() == 201 assert json.loads(f.read()) == { "called": 1, "data": postdata, "query": querystr, } assert num_requests["post_handler"] == 1 return try_post @pytest.fixture(name="try_del") def fixture_try_del(num_requests): """Return a function to try DEL calls to the server.""" def try_del(httpd, querystr): """Try DEL calls to the server.""" num_requests["del_handler"] = 0 opener = build_opener(HTTPHandler) request = Request(httpd_url(httpd, "/api/resource/1", querystr)) request.get_method = lambda: "DEL" f = opener.open(request) assert f.getcode() == 200 assert json.loads(f.read()) == {"called": 1, "id": "1", "query": querystr} assert num_requests["del_handler"] == 1 return try_del @pytest.fixture(name="httpd_no_urlhandlers") def fixture_httpd_no_urlhandlers(): """Yields a started MozHttpd server with no URL handlers.""" httpd = mozhttpd.MozHttpd(port=0) httpd.start(block=False) yield httpd httpd.stop() @pytest.fixture(name="httpd_with_docroot") def fixture_httpd_with_docroot(num_requests): """Yields a started MozHttpd server with docroot set.""" @mozhttpd.handlers.json_response def get_handler(request, objid): """Handler for HTTP GET requests.""" num_requests["get_handler"] += 1 return ( 200, { "called": num_requests["get_handler"], "id": objid, "query": request.query, }, ) httpd = mozhttpd.MozHttpd( port=0, docroot=os.path.dirname(os.path.abspath(__file__)), urlhandlers=[ { "method": "GET", "path": "/api/resource/([^/]+)/?", "function": get_handler, } ], ) httpd.start(block=False) yield httpd httpd.stop() @pytest.fixture(name="httpd") def fixture_httpd(num_requests): """Yield a started MozHttpd server.""" @mozhttpd.handlers.json_response def get_handler(request, objid): """Handler for HTTP GET requests.""" num_requests["get_handler"] += 1 return ( 200, { "called": num_requests["get_handler"], "id": objid, "query": request.query, }, ) @mozhttpd.handlers.json_response def post_handler(request): """Handler for HTTP POST requests.""" num_requests["post_handler"] += 1 return ( 201, { "called": num_requests["post_handler"], "data": json.loads(request.body), "query": request.query, }, ) @mozhttpd.handlers.json_response def del_handler(request, objid): """Handler for HTTP DEL requests.""" num_requests["del_handler"] += 1 return ( 200, { "called": num_requests["del_handler"], "id": objid, "query": request.query, }, ) httpd = mozhttpd.MozHttpd( port=0, urlhandlers=[ { "method": "GET", "path": "/api/resource/([^/]+)/?", "function": get_handler, }, { "method": "POST", "path": "/api/resource/?", "function": post_handler, }, { "method": "DEL", "path": "/api/resource/([^/]+)/?", "function": del_handler, }, ], ) httpd.start(block=False) yield httpd httpd.stop() def test_api(httpd, try_get, try_post, try_del): # GET requests try_get(httpd, "") try_get(httpd, "?foo=bar") # POST requests try_post(httpd, "") try_post(httpd, "?foo=bar") # DEL requests try_del(httpd, "") try_del(httpd, "?foo=bar") # GET: By default we don't serve any files if we just define an API with pytest.raises(HTTPError) as exc_info: urlopen(httpd_url(httpd, "/")) assert exc_info.value.code == 404 def test_nonexistent_resources(httpd_no_urlhandlers): # GET: Return 404 for non-existent endpoint with pytest.raises(HTTPError) as excinfo: urlopen(httpd_url(httpd_no_urlhandlers, "/api/resource/")) assert excinfo.value.code == 404 # POST: POST should also return 404 with pytest.raises(HTTPError) as excinfo: urlopen( httpd_url(httpd_no_urlhandlers, "/api/resource/"), data=ensure_binary(json.dumps({})), ) assert excinfo.value.code == 404 # DEL: DEL should also return 404 opener = build_opener(HTTPHandler) request = Request(httpd_url(httpd_no_urlhandlers, "/api/resource/")) request.get_method = lambda: "DEL" with pytest.raises(HTTPError) as excinfo: opener.open(request) assert excinfo.value.code == 404 def test_api_with_docroot(httpd_with_docroot, try_get): f = urlopen(httpd_url(httpd_with_docroot, "/")) assert f.getcode() == 200 assert "Directory listing for" in ensure_str(f.read()) # Make sure API methods still work try_get(httpd_with_docroot, "") try_get(httpd_with_docroot, "?foo=bar") def index_contents(host): """Return the expected index contents for the given host.""" return "{host} index".format(host=host) @pytest.fixture(name="hosts") def fixture_hosts(): """Returns a tuple of hosts.""" return ("mozilla.com", "mozilla.org") @pytest.fixture(name="docroot") def fixture_docroot(tmpdir): """Returns a path object to a temporary docroot directory.""" docroot = tmpdir.mkdir("docroot") index_file = docroot.join("index.html") index_file.write(index_contents("*")) yield docroot docroot.remove() @pytest.fixture(name="httpd_with_proxy_handler") def fixture_httpd_with_proxy_handler(docroot): """Yields a started MozHttpd server for the proxy test.""" httpd = mozhttpd.MozHttpd(port=0, docroot=str(docroot)) httpd.start(block=False) port = httpd.httpd.server_port proxy_support = ProxyHandler( { "http": "http://127.0.0.1:{port:d}".format(port=port), } ) install_opener(build_opener(proxy_support)) yield httpd httpd.stop() # Reset proxy opener in case it changed install_opener(None) def test_proxy(httpd_with_proxy_handler, hosts): for host in hosts: f = urlopen("http://{host}/".format(host=host)) assert f.getcode() == 200 assert f.read() == ensure_binary(index_contents("*")) @pytest.fixture(name="httpd_with_proxy_host_dirs") def fixture_httpd_with_proxy_host_dirs(docroot, hosts): for host in hosts: index_file = docroot.mkdir(host).join("index.html") index_file.write(index_contents(host)) httpd = mozhttpd.MozHttpd(port=0, docroot=str(docroot), proxy_host_dirs=True) httpd.start(block=False) port = httpd.httpd.server_port proxy_support = ProxyHandler( {"http": "http://127.0.0.1:{port:d}".format(port=port)} ) install_opener(build_opener(proxy_support)) yield httpd httpd.stop() # Reset proxy opener in case it changed install_opener(None) def test_proxy_separate_directories(httpd_with_proxy_host_dirs, hosts): for host in hosts: f = urlopen("http://{host}/".format(host=host)) assert f.getcode() == 200 assert f.read() == ensure_binary(index_contents(host)) unproxied_host = "notmozilla.org" with pytest.raises(HTTPError) as excinfo: urlopen("http://{host}/".format(host=unproxied_host)) assert excinfo.value.code == 404 if __name__ == "__main__": mozunit.main()
2026-07-09
Neuigkeiten
Aktuelles
Motto des Tages
Software
Quellcodebibliothek
Eigene Quellcodes
Fremde Quellcodes
Suchen
Aktivitäten
Artikel über Sicherheit
Anleitung zur Aktivierung von SSL
Muße
Gedichte
Musik
Bilder
Jenseits des Üblichen ....
Besucherstatistik
Impressum
|
Ethik und Gesetz
|
Haftungsausschluß
|
Kontakt
|
Seitenstruktur
|
©
2026 JDD
|