Files
utun2/tests/test_clock.h
T

30 lines
3.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Часы сетевых тестов с реальными сокетами: 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