1
"""Contains tests for networking.py and app.py"""
8
from fastapi.testclient import TestClient
11
from gradio import Interface, networking
13
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
17
def test_port_is_in_range(self):
21
port = networking.get_first_available_port(start, end)
22
assert start <= port <= end
24
warnings.warn("Unable to test, no ports available")
26
def test_same_port_is_returned(self):
30
port1 = networking.get_first_available_port(start, end)
31
port2 = networking.get_first_available_port(start, end)
34
warnings.warn("Unable to test, no ports available")
37
class TestInterfaceErrors:
38
def test_processing_error(self):
39
io = Interface(lambda x: 1 / x, "number", "number")
40
app, _, _ = io.launch(show_error=True, prevent_thread_lock=True)
41
client = TestClient(app)
42
response = client.post("/api/predict/", json={"data": [0], "fn_index": 0})
43
assert response.status_code == 500
44
assert "error" in response.json()
47
def test_validation_error(self):
48
io = Interface(lambda x: 1 / x, "number", "number")
49
app, _, _ = io.launch(show_error=True, prevent_thread_lock=True)
50
client = TestClient(app)
51
response = client.post("/api/predict/", json={"fn_index": [0]})
52
assert response.status_code == 422
58
@pytest.mark.parametrize("host", ["127.0.0.1", "[::1]"])
59
def test_start_server(self, host):
60
io = Interface(lambda x: x, "number", "number")
61
io.favicon_path = None
62
io.config = io.get_config_file()
64
io.flagging_callback.setup(gr.Number(), io.flagging_dir)
68
port = networking.get_first_available_port(
69
networking.INITIAL_PORT_VALUE,
70
networking.INITIAL_PORT_VALUE + networking.TRY_NUM_PORTS,
72
_, _, local_path, _, server = networking.start_server(io, server_port=port)
73
url = urllib.parse.urlparse(local_path)
74
assert url.scheme == "http"
75
assert url.port == port
80
def test_url_ok(self):
81
res = networking.url_ok("https://www.gradio.app")
85
def test_start_server_app_kwargs():
87
Test that start_server accepts app_kwargs and they're propagated to FastAPI.
89
io = Interface(lambda x: x, "number", "number")
90
app, _, _ = io.launch(
92
prevent_thread_lock=True,
97
client = TestClient(app)
98
assert client.get("/docs").status_code == 200