ha(H1): исправления по ревью — жизненный цикл сессии, самодостаточный wheel
- C1: единственный владелец stop+destroy — reader-поток; close() только выставляет флаг и ждёт; повторный close и close из колбэка безопасны (регресс-тесты; TSan на close с мёртвым модулем — 0 гонок) - M1: wheel собирается с bundled mbedtls (нет внешней soname mbedcrypto); попутно исправлена bundled-ветка CMake (-lSTATIC) - C-API: счётчики потерянных событий/логов, лог-кольцо без union-балласта, атомарные fn/ctx лог-синка - provision: валидация формата облачных ответов; CLI: человеческие ошибки (exit 2), --out с правами 0600, console_script pyfglair - упаковка: MANIFEST.in (sdist с C++-исходниками), очистка stale .so, readme в метаданных; find_library без ложных .bak - тесты: close-сценарии, доставка логов, ошибки CLI/provision, C-API очередь
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""Низкоуровневые проверки C-API: очередь событий, счётчики, ошибки входа."""
|
||||
from __future__ import annotations
|
||||
|
||||
from pyfglair._cffi import ffi, lib
|
||||
|
||||
|
||||
def _make_session():
|
||||
cfg = ffi.new("fgl_config_t*")
|
||||
cfg.host = ffi.new("char[]", b"127.0.0.1")
|
||||
cfg.device_port = 9
|
||||
cfg.dsn = ffi.new("char[]", b"AC000W00MOCK0001")
|
||||
cfg.lanip_key = ffi.new("char[]", b"key")
|
||||
cfg.lanip_key_id = 1
|
||||
cfg.tmpl = 0
|
||||
cfg.listen_port = 0
|
||||
cfg.keepalive_ms = 1000
|
||||
cfg.max_queue = 40
|
||||
session = lib.fgl_session_create(cfg, ffi.NULL)
|
||||
assert session != ffi.NULL
|
||||
return session
|
||||
|
||||
|
||||
def test_poll_wait_empty():
|
||||
session = _make_session()
|
||||
try:
|
||||
out = ffi.new("fgl_event_t[]", 4)
|
||||
assert lib.fgl_session_poll_events(session, out, 4) == 0
|
||||
assert lib.fgl_session_wait_events(session, out, 4, 0) == 0
|
||||
assert lib.fgl_session_events_dropped(session) == 0
|
||||
finally:
|
||||
lib.fgl_session_destroy(session)
|
||||
|
||||
|
||||
def test_poll_invalid_args():
|
||||
session = _make_session()
|
||||
try:
|
||||
out = ffi.new("fgl_event_t[]", 4)
|
||||
assert lib.fgl_session_poll_events(session, ffi.NULL, 4) == 0
|
||||
assert lib.fgl_session_poll_events(session, out, 0) == 0
|
||||
assert lib.fgl_session_wait_events(session, out, 0, 0) == 0
|
||||
assert lib.fgl_session_poll_events(ffi.NULL, out, 4) == 0
|
||||
assert lib.fgl_session_events_dropped(ffi.NULL) == 0
|
||||
finally:
|
||||
lib.fgl_session_destroy(session)
|
||||
|
||||
|
||||
def test_create_null_config():
|
||||
assert lib.fgl_session_create(ffi.NULL, ffi.NULL) == ffi.NULL
|
||||
|
||||
|
||||
def test_log_poll_empty():
|
||||
out = ffi.new("fgl_log_event_t[]", 4)
|
||||
assert lib.fgl_log_poll_events(out, 4) >= 0
|
||||
assert lib.fgl_log_wait_events(out, 4, 0) >= 0
|
||||
assert lib.fgl_log_events_dropped() >= 0
|
||||
Reference in New Issue
Block a user