gradio

Форк
0
/
test_networking.py 
99 строк · 3.0 Кб
1
"""Contains tests for networking.py and app.py"""
2

3
import os
4
import urllib
5
import warnings
6

7
import pytest
8
from fastapi.testclient import TestClient
9

10
import gradio as gr
11
from gradio import Interface, networking
12

13
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
14

15

16
class TestPort:
17
    def test_port_is_in_range(self):
18
        start = 7860
19
        end = 7960
20
        try:
21
            port = networking.get_first_available_port(start, end)
22
            assert start <= port <= end
23
        except OSError:
24
            warnings.warn("Unable to test, no ports available")
25

26
    def test_same_port_is_returned(self):
27
        start = 7860
28
        end = 7960
29
        try:
30
            port1 = networking.get_first_available_port(start, end)
31
            port2 = networking.get_first_available_port(start, end)
32
            assert port1 == port2
33
        except OSError:
34
            warnings.warn("Unable to test, no ports available")
35

36

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()
45
        io.close()
46

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
53
        io.close()
54

55

56
class TestStartServer:
57
    # Test IPv4 and IPv6 hostnames as they would be passed from --server-name.
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()
63
        io.show_error = True
64
        io.flagging_callback.setup(gr.Number(), io.flagging_dir)
65
        io.auth = None
66
        io.host = host
67

68
        port = networking.get_first_available_port(
69
            networking.INITIAL_PORT_VALUE,
70
            networking.INITIAL_PORT_VALUE + networking.TRY_NUM_PORTS,
71
        )
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
76
        server.close()
77

78

79
class TestURLs:
80
    def test_url_ok(self):
81
        res = networking.url_ok("https://www.gradio.app")
82
        assert res
83

84

85
def test_start_server_app_kwargs():
86
    """
87
    Test that start_server accepts app_kwargs and they're propagated to FastAPI.
88
    """
89
    io = Interface(lambda x: x, "number", "number")
90
    app, _, _ = io.launch(
91
        show_error=True,
92
        prevent_thread_lock=True,
93
        app_kwargs={
94
            "docs_url": "/docs",
95
        },
96
    )
97
    client = TestClient(app)
98
    assert client.get("/docs").status_code == 200
99
    io.close()
100

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.