Testing Network Interface Error Handling and Server Configuration in gradio-app
A comprehensive test suite for networking functionality in the Gradio application, focusing on interface error handling, URL validation, and server configuration. The tests verify API endpoint behavior, error responses, and server initialization parameters.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
gradio-app/gradio
test/test_networking.py
"""Contains tests for networking.py and app.py"""
import os
from fastapi.testclient import TestClient
from gradio import Interface, networking
from gradio.route_utils import API_PREFIX
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
class TestInterfaceErrors:
def test_processing_error(self):
io = Interface(lambda x: 1 / x, "number", "number")
app, _, _ = io.launch(show_error=True, prevent_thread_lock=True)
client = TestClient(app)
response = client.post(
f"{API_PREFIX}/api/predict/", json={"data": [0], "fn_index": 0}
)
assert response.status_code == 500
assert "error" in response.json()
io.close()
def test_validation_error(self):
io = Interface(lambda x: 1 / x, "number", "number")
app, _, _ = io.launch(show_error=True, prevent_thread_lock=True)
client = TestClient(app)
response = client.post(f"{API_PREFIX}/api/predict/", json={"fn_index": [0]})
assert response.status_code == 422
io.close()
class TestURLs:
def test_url_ok(self):
res = networking.url_ok("https://www.gradio.app")
assert res
def test_start_server_app_kwargs():
"""
Test that start_server accepts app_kwargs and they're propagated to FastAPI.
"""
io = Interface(lambda x: x, "number", "number")
app, _, _ = io.launch(
show_error=True,
prevent_thread_lock=True,
app_kwargs={
"docs_url": f"{API_PREFIX}/docs",
},
)
client = TestClient(app)
assert client.get(f"{API_PREFIX}/docs").status_code == 200
io.close()