Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
Есть программа, которая создает таймера через вызов timerfd_create, регистрирует их в селекторе (в том же селекторе сеть), устанавливаем им время срабатывания и делает вызов poll() или select() или epoll() Вопрос: такое тестируется? Я знаю, что существует либа libfaketime, которая умеет довольно много. Через LD_PRELOAD она подменяет вызовы вроде "а который час". Но по части вызовов типа poll() у нее можно только подменить таймауты ожидания, а сами системные таймеры ей подменить довольно проблематично. Я понимаю, что можно в этой либе написать свой хитрый полл, который вообще все умеет, и вообще в ядро не уходит - но это надо писать, и работы там много. Может, существует что-то готовое? Навскидку кроме libfaketime ничего не нашлось. Мне хочется в тестах говорить что-то вроде "а теперь считаем, что прошла 1 минута". Может у ядра есть какая-то фича, которая может помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2018, 20:52 |
|
||
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
chabapokМне хочется в тестах говорить что-то вроде "а теперь считаем, что прошла 1 минута". Вариант 1: Вынеси значения таймеров в отдельные константы и отладочную версию собирай с уменьшенными значениями на порядок. Вариант 2: Замени timerfd на signalfd и кидай своему приложению kill -USR1 Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2018, 21:11 |
|
||
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Спасибо за идеи. В проге несколько таймеров, так что финт ушами с подменой на сигналы скорей всего не сработает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2018, 22:27 |
|
||
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
chabapokЕсть программа, которая создает таймера через вызов timerfd_create, регистрирует их в селекторе (в том же селекторе сеть), устанавливаем им время срабатывания и делает вызов poll() или select() или epoll() Блин, эпик фейл. POLL на таймере... Как такое тестировать, если надо такое просто выкинуть? Если серьёзно говорить о такой хрени, то естественно, такое не надо вообще тестировать . Надо тестировать фукнционал, который вызывается по таймеру, а сам таймер тестировать бессмысленно. Если он не будет приходить, а ты знаешь, что сам функционал работает, потому что оттестирован, тебе останется в программе только добиться срабатывания этого таймера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 10:43 |
|
||
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
Это для всего событийно-управляемого программирования характерно. Его само не нужно тестировать, не нужно тестировать, возникает ли какое-то событие. Это бессмысленно, это протестировано в базовых фреймворках. Тебе нужно тестировать функциональность, которая будет вызываться по событию, а не появления событий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 10:47 |
|
||
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
Да кто ж спорит, что фейл. Вопрос в том, как сделать правильно. MasterZivТебе нужно тестировать функциональность, которая будет вызываться по событию, а не появления событий. разумеется, и это нужно. Но бывают определенные баги, которые завязаны имеено на связку различных компонентов системы. впринципе, я придумал, как такое можно тестировать. И линкера есть функция --wrap=symbol, а еще есть LD_PRELOAD. Это позволяет перехватывать любые вызовы. Я буду перехватывать timerfd_create, создавать вместо таймера пайп и возвращать его. Приложение будет думать, что ему возвратили id таймера, а на самом деле это будет пайп. timerfd_settime тоже должно перехватываться, и тестер будет понимать, что с таким-то пайпом сопоставили такой-то таймаут, и в нужный момент он запишет в пайп 8 байт - это разбудит poll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2018, 08:37 |
|
||
|
Как автоматически тестировать программы с таймерами (timerfd_create, timerfd_settime)?
|
|||
|---|---|---|---|
|
#18+
chabapokДа кто ж спорит, что фейл. Вопрос в том, как сделать правильно. MasterZivТебе нужно тестировать функциональность, которая будет вызываться по событию, а не появления событий. разумеется, и это нужно. Но бывают определенные баги, которые завязаны имеено на связку различных компонентов системы. впринципе, я придумал, как такое можно тестировать. И линкера есть функция --wrap=symbol, а еще есть LD_PRELOAD. Это позволяет перехватывать любые вызовы. Я буду перехватывать timerfd_create, создавать вместо таймера пайп и возвращать его. Приложение будет думать, что ему возвратили id таймера, а на самом деле это будет пайп. timerfd_settime тоже должно перехватываться, и тестер будет понимать, что с таким-то пайпом сопоставили такой-то таймаут, и в нужный момент он запишет в пайп 8 байт - это разбудит poll. А нафига? Не проще ли просто написать в тесте имитацию прихода нужных событий в нужном порядке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2018, 23:55 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=18&tid=2017803]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 311ms |
| total: | 453ms |

| 0 / 0 |
