powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
8 сообщений из 8, страница 1 из 1
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39671096
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть программа, которая создает таймера через вызов timerfd_create, регистрирует их в селекторе (в том же селекторе сеть), устанавливаем им время срабатывания и делает вызов poll() или select() или epoll()

Вопрос: такое тестируется? Я знаю, что существует либа libfaketime, которая умеет довольно много. Через LD_PRELOAD она подменяет вызовы вроде "а который час". Но по части вызовов типа poll() у нее можно только подменить таймауты ожидания, а сами системные таймеры ей подменить довольно проблематично.

Я понимаю, что можно в этой либе написать свой хитрый полл, который вообще все умеет, и вообще в ядро не уходит - но это надо писать, и работы там много. Может, существует что-то готовое? Навскидку кроме libfaketime ничего не нашлось.

Мне хочется в тестах говорить что-то вроде "а теперь считаем, что прошла 1 минута".
Может у ядра есть какая-то фича, которая может помочь?
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39671100
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokМне хочется в тестах говорить что-то вроде "а теперь считаем, что прошла 1 минута".

Вариант 1: Вынеси значения таймеров в отдельные константы и отладочную версию собирай с
уменьшенными значениями на порядок.
Вариант 2: Замени timerfd на signalfd и кидай своему приложению kill -USR1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39671112
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Спасибо за идеи. В проге несколько таймеров, так что финт ушами с подменой на сигналы скорей всего не сработает...
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39671475
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokЕсть программа, которая создает таймера через вызов timerfd_create, регистрирует их в селекторе (в том же селекторе сеть), устанавливаем им время срабатывания и делает вызов poll() или select() или epoll()


Блин, эпик фейл. POLL на таймере...

Как такое тестировать, если надо такое просто выкинуть?

Если серьёзно говорить о такой хрени, то естественно, такое не надо вообще тестировать .
Надо тестировать фукнционал, который вызывается по таймеру, а сам таймер тестировать бессмысленно.
Если он не будет приходить, а ты знаешь, что сам функционал работает, потому что оттестирован,
тебе останется в программе только добиться срабатывания этого таймера.
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39671482
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это для всего событийно-управляемого программирования характерно.
Его само не нужно тестировать, не нужно тестировать, возникает ли какое-то событие.
Это бессмысленно, это протестировано в базовых фреймворках.
Тебе нужно тестировать функциональность, которая будет вызываться по событию, а не появления событий.
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39673941
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да кто ж спорит, что фейл. Вопрос в том, как сделать правильно.

MasterZivТебе нужно тестировать функциональность, которая будет вызываться по событию, а не появления событий.
разумеется, и это нужно. Но бывают определенные баги, которые завязаны имеено на связку различных компонентов системы.

впринципе, я придумал, как такое можно тестировать. И линкера есть функция --wrap=symbol, а еще есть LD_PRELOAD. Это позволяет перехватывать любые вызовы.
Я буду перехватывать timerfd_create, создавать вместо таймера пайп и возвращать его. Приложение будет думать, что ему возвратили id таймера, а на самом деле это будет пайп. timerfd_settime тоже должно перехватываться, и тестер будет понимать, что с таким-то пайпом сопоставили такой-то таймаут, и в нужный момент он запишет в пайп 8 байт - это разбудит poll.
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39674080
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokДа кто ж спорит, что фейл. Вопрос в том, как сделать правильно.

MasterZivТебе нужно тестировать функциональность, которая будет вызываться по событию, а не появления событий.
разумеется, и это нужно. Но бывают определенные баги, которые завязаны имеено на связку различных компонентов системы.

впринципе, я придумал, как такое можно тестировать. И линкера есть функция --wrap=symbol, а еще есть LD_PRELOAD. Это позволяет перехватывать любые вызовы.
Я буду перехватывать timerfd_create, создавать вместо таймера пайп и возвращать его. Приложение будет думать, что ему возвратили id таймера, а на самом деле это будет пайп. timerfd_settime тоже должно перехватываться, и тестер будет понимать, что с таким-то пайпом сопоставили такой-то таймаут, и в нужный момент он запишет в пайп 8 байт - это разбудит poll.

А нафига?
Не проще ли просто написать в тесте имитацию прихода нужных событий в нужном порядке?
...
Рейтинг: 0 / 0
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
    #39674161
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще, разумеется. И именно с такого варианта будем начинать, а потом будет видно.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]