Files
facefusion/tests/test_api_metrics.py
2026-03-24 21:01:13 +05:30

242 lines
6.1 KiB
Python

from typing import Iterator
import pytest
from pytest_mock import MockerFixture
from starlette.testclient import TestClient
from facefusion import metadata, session_manager
from facefusion.apis.core import create_api
@pytest.fixture(scope = 'module')
def test_client() -> Iterator[TestClient]:
with TestClient(create_api()) as test_client:
yield test_client
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
session_manager.SESSIONS.clear()
@pytest.fixture(scope = 'function', autouse = True)
def mock_detect_execution_devices(mocker : MockerFixture) -> None:
mocker.patch('facefusion.system.state_manager.get_temp_path', return_value = '/tmp')
mocker.patch('facefusion.system.detect_disk_metrics', return_value =
[
{
'total':
{
'value': 500,
'unit': 'GB'
},
'free':
{
'value': 200,
'unit': 'GB'
},
'utilization':
{
'value': 60,
'unit': '%'
}
}
])
mocker.patch('facefusion.system.detect_memory_metrics', return_value =
{
'total':
{
'value': 32,
'unit': 'GB'
},
'free':
{
'value': 16,
'unit': 'GB'
},
'utilization':
{
'value': 50,
'unit': '%'
}
})
mocker.patch('facefusion.system.detect_network_metrics', return_value =
{
'sent':
{
'value': 1024,
'unit': 'MB'
},
'received':
{
'value': 2048,
'unit': 'MB'
}
})
mocker.patch('facefusion.system.detect_processor_metrics', return_value =
{
'cores':
{
'value': 16,
'unit': 'cores'
},
'frequency':
{
'value': 3500,
'unit': 'MHz'
},
'utilization':
{
'value': 25,
'unit': '%'
}
})
mocker.patch('facefusion.system.detect_graphic_devices', return_value =
[
{
'driver_version': '555.42',
'framework':
{
'name': 'CUDA',
'version': '12.5'
},
'product':
{
'vendor': 'NVIDIA',
'name': 'RTX 4090'
},
'video_memory':
{
'total':
{
'value': 24,
'unit': 'GB'
},
'used':
{
'value': 4,
'unit': 'GB'
}
},
'temperature':
{
'gpu':
{
'value': 45,
'unit': 'C'
},
'memory':
{
'value': 0,
'unit': 'C'
}
},
'utilization':
{
'gpu':
{
'value': 30,
'unit': '%'
},
'memory':
{
'value': 15,
'unit': '%'
}
}
}
])
def test_get_metrics(test_client : TestClient) -> None:
metrics_response = test_client.get('/metrics')
assert metrics_response.status_code == 401
create_session_response = test_client.post('/session', json =
{
'client_version': metadata.get('version')
})
create_session_body = create_session_response.json()
metrics_response = test_client.get('/metrics', headers =
{
'Authorization': 'Bearer ' + create_session_body.get('access_token')
})
metrics_body = metrics_response.json()
assert metrics_response.status_code == 200
assert metrics_body.get('graphic_devices')[0].get('driver_version') == '555.42'
assert metrics_body.get('graphic_devices')[0].get('product').get('name') == 'RTX 4090'
assert metrics_body.get('graphic_devices')[0].get('video_memory').get('total').get('value') == 24
assert metrics_body.get('graphic_devices')[0].get('video_memory').get('used').get('value') == 4
assert metrics_body.get('disks')[0].get('total').get('value') == 500
assert metrics_body.get('disks')[0].get('free').get('unit') == 'GB'
assert metrics_body.get('disks')[0].get('utilization').get('value') == 60
assert metrics_body.get('memory').get('total').get('value') == 32
assert metrics_body.get('memory').get('free').get('unit') == 'GB'
assert metrics_body.get('memory').get('utilization').get('value') == 50
assert metrics_body.get('network').get('sent').get('value') == 1024
assert metrics_body.get('network').get('sent').get('unit') == 'MB'
assert metrics_body.get('network').get('received').get('value') == 2048
assert metrics_body.get('processor').get('cores').get('value') == 16
assert metrics_body.get('processor').get('frequency').get('value') == 3500
assert metrics_body.get('processor').get('utilization').get('value') == 25
def test_get_metrics_not_found(test_client : TestClient, mocker : MockerFixture) -> None:
mocker.patch('facefusion.apis.endpoints.metrics.get_metrics_set', return_value = None)
create_session_response = test_client.post('/session', json =
{
'client_version': metadata.get('version')
})
create_session_body = create_session_response.json()
metrics_response = test_client.get('/metrics', headers =
{
'Authorization': 'Bearer ' + create_session_body.get('access_token')
})
assert metrics_response.status_code == 404
def test_websocket_metrics(test_client : TestClient) -> None:
create_session_response = test_client.post('/session', json =
{
'client_version': metadata.get('version')
})
create_session_body = create_session_response.json()
with test_client.websocket_connect('/metrics', subprotocols =
[
'access_token.' + create_session_body.get('access_token')
]) as websocket:
metrics_set = websocket.receive_json()
assert metrics_set.get('graphic_devices')[0].get('driver_version') == '555.42'
assert metrics_set.get('graphic_devices')[0].get('product').get('name') == 'RTX 4090'
assert metrics_set.get('graphic_devices')[0].get('video_memory').get('total').get('value') == 24
assert metrics_set.get('graphic_devices')[0].get('video_memory').get('used').get('value') == 4
assert metrics_set.get('disks')[0].get('total').get('value') == 500
assert metrics_set.get('disks')[0].get('free').get('unit') == 'GB'
assert metrics_set.get('disks')[0].get('utilization').get('value') == 60
assert metrics_set.get('memory').get('total').get('value') == 32
assert metrics_set.get('memory').get('free').get('unit') == 'GB'
assert metrics_set.get('memory').get('utilization').get('value') == 50
assert metrics_set.get('network').get('sent').get('value') == 1024
assert metrics_set.get('network').get('sent').get('unit') == 'MB'
assert metrics_set.get('network').get('received').get('value') == 2048
assert metrics_set.get('processor').get('cores').get('value') == 16
assert metrics_set.get('processor').get('frequency').get('value') == 3500
assert metrics_set.get('processor').get('utilization').get('value') == 25