У меня есть приложение для пространства пользователя, которое открывает ручку файла устройства Linux (например, /dev /foobar < /code>), а затем отправляет Ioctls на него.
Мне нужно повторить конкретную серию ответов с устройства, доставленного обратно в пользовательский пространство, в тестировании. Результаты высмеиваемых системных вызовов. Я не хочу разгрузить драйвер и загружать его тестовую копию для теста; Это потребует повышенных привилегий и будет мешать другим тестовым случаям, доступа к нему одновременно. Ld_preload . Хотя он, вероятно, будет работать, у него есть свои недостатки: все вызовы open () /
необходимо будет перехватить, проанализировать и отфильтровать, чтобы влиять только на тех, кто направлен на/dev/foobar . Похоже на государственную машину, я бы избежал создания, если это возможно. Кроме того, я не уверен, что моя структура тестирования легко позволит переопределить LD_PRELOAD для одного тестового примера. Например. У вас есть условные "мы в тестировании?" Чтобы контролировать, какую функцию будет вызвана, или динамическую диспетчеринг (указатель функции) для той же цели. Но это также довольно навязчивая модификация производственного кода, и он пропускает логику тестирования в логику производства. К сожалению, этот код пользовательского пространства является устаревшим, без каких -либо положений о дизайне для легкого экземпляра в модульном тесте, и логика, которую мне нужно проверить, на самом деле распространяется по нескольким подсистемам. Таким образом, внесение всего этого в настоящий модульный тест потребует много переделки, что я не готов сейчас. Чтобы открыть это устройство вместо по умолчанию/dev/foobar , а затем все системы системных вызовов, которые меня интересуют, окажутся под моим контролем.
Подробнее здесь:
https://stackoverflow.com/questions/795 ... -userspace