LINUX.ORG.RU

Брутальная тестилка программ

 ,


1

2

Вот примерно что я хочу: есть запущенный процесс и нужно натравить на него программу-тестилку. Что может делать эта тестилка: проверяет открытые файлы и рандомно их удаляет/закрывает, шлёт posix сигналы процессу случайным образом, стопает и продолжает работу процесса, подключается к слушающему сокету и пишет туда мусор и т.п. Хотелось бы чтоб такая тестилка ещё могла запускать приложение с разными rlimit, в chroot'е... Ну в общем вы поняли хотелку. Есть ли подобное решение, такая брутальная тестилка?

Просто многие такие вещи проверяются руками или пишутся скрипты, которые выявляют баги (особенно в не очень отказоустойчивых приложениях).

проверяет открытые файлы и рандомно их удаляет/закрывает,

Как один процесс может закрыть файл, открый в другом процессе? А удалять файл бесполезно, он же на диске остаётся, пока открыт в другом процессе.

mky ★★★★★
()

Немного не то, но должно помочь в поиске: trinity - «умное» тестирование ядра рандомными вызовами syscall'ов.

Вообще, процесс называется fuzz testing.

mtk
()
Ответ на: комментарий от mky

Ну gdb может приатачиться к процессу. Ещё есть tcpkill.

Удаление открытых файлов - чтобы понять от каких зависит. Процесс может повторно переоткрыть или для следующего запуска... Тут творчески можно к делу подойти.

nerdogeek
() автор топика
Ответ на: комментарий от uuwaan

Для тестирования опенсурсных поделок. Код всегда есть.

nerdogeek
() автор топика
Ответ на: комментарий от nerdogeek

Можно сделать обертки для стандартных либсишных функций, собрать их в динамическую библиотеку и подпихнуть через LD_PRELOAD. А уже в обёртках — логгировать или реализовывать желаемые типы сбоев.

Или сделать в виде статической библиотеки и присадить её в Makefile.

uuwaan ★★
()
Ответ на: комментарий от uuwaan

Отличная идея! Только вот саппортить будет труднее, по сравнению с внешним супервайзером-тестилкой.

nerdogeek
() автор топика
Ответ на: комментарий от nerdogeek

tcpkill это сеть, там что угодно может произойти, это можно тестить.

А вот тест типа того, что приатачится к процессу, сделать из его контекста вызов close() и ожидать, что процесс корректно обработает подобное «исчезновение» файлового дескриптора, какой-то странный.

ИМХО, если программа делает read() из локального файла, а ей вдруг возвращается ошибка EBADF, дак это сигнал, что это сбои внутри ядра, возможно из-за глючного железа. Переоткрывать файл и продолжать работать на глючащем железе — зачем закладывать такое поведение в программу?

mky ★★★★★
()
Ответ на: комментарий от mky

Да похер детали. Мы же не аутисты. Должны понять друг друга, вот человек выше в треде понял мою хотелку и подсказал отличную идею.

nerdogeek
() автор топика

Это фаззинг ;) Что ж, тоже любопытно, подписался на тему.

Уверен, есть готовые инструменты для фаззинга. Но если нету таких, ТС - делай опенсорс-проект :)

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Елси писать самому, то ptrace тебе в помощь...

energyclab
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.