30 lines
3.0 KiB
C
30 lines
3.0 KiB
C
/* Часы сетевых тестов с реальными сокетами: init → test_clock_poll/run_for/mainloop → destroy ресурсов → finish.
|
||
* Linux/ELF: нужны test_clock_sources и test_clock_ldflags из tests/Makefile.am; при пустом I/O продвигается offset часов.
|
||
* Наличие UTUN_TEST_REAL_TIME с любым значением выключает ускорение; вне Linux функции используют реальные ожидания.
|
||
* TB = 0.1мс. Управление только из потока теста, вне callbacks; вложенные интервалы/ускоренные poll запрещены.
|
||
* Offset действует на весь бинарник, включая чтение часов другими потоками; отдельные uasync он не изолирует. */
|
||
#ifndef TEST_CLOCK_H
|
||
#define TEST_CLOCK_H
|
||
|
||
#include "../lib/u_async.h"
|
||
|
||
/* До создания uasync: max_step_tb>0 ограничивает один искусственный шаг; неверный аргумент завершает тест через abort.
|
||
* Повторный init не обнуляет offset/счётчики. Категория debug включается на INFO для статистики стенда. */
|
||
void test_clock_init(int max_step_tb);
|
||
// В Linux включить тот же offset для CLOCK_REALTIME/gettimeofday (TTL/retry_at); до создания инстансов, обратно не выключается.
|
||
void test_clock_sync_wall_time(void);
|
||
/* Обычный uasync_poll с ускорением только при timeout_tb>0. Шаг ограничен max_step, ближайшим timer и текущим run_for.
|
||
* Сам timeout_tb не ограничивает размер искусственного шага; прямой uasync_poll не включает ускорение ожидания. */
|
||
void test_clock_poll(struct UASYNC* ua, int timeout_tb);
|
||
// Poll по 100 TB до ua->stop; ua обязателен. Не меняет флаг stop и не уничтожает event loop.
|
||
void test_clock_mainloop(struct UASYNC* ua);
|
||
// Обслуживать I/O/callbacks до монотонного дедлайна duration_tb>=0; 0 не выполняет poll, вложенный run_for запрещён.
|
||
void test_clock_run_for(struct UASYNC* ua, int duration_tb);
|
||
/* Дойти до дедлайна ближайшего неотменённого timer и выполнить poll(0), обслуживая также другие события.
|
||
* ua и хотя бы один живой timer обязательны; пустая heap/переполнение интервала завершают тест через abort. */
|
||
void test_clock_next_timer(struct UASYNC* ua);
|
||
// Только вывести статистику; не сбрасывает offset/режим/счётчики. Вызывать после уничтожения ресурсов стенда.
|
||
void test_clock_finish(void);
|
||
|
||
#endif
|