Модульное тестирование системных вызовов в Linux

Я новичок в модульном тестировании в C ++. Я использую googletest для выполнения модульного тестирования (и gcovr для отчета о покрытии) источников, содержащих системные вызовы linux. Чтобы проверить их, я подумал о 2 подходах

1. Использование ** LD_PRELOAD (заглушая собственную реализацию системных вызовов, таких как запись, чтение и т. д.) **

2. Использование —wrap опции компоновщика, чтобы обернуть фактический системный вызов с моей реализацией заглушки.

Использование варианта 2 практически невозможно, так как число используемых системных вызовов больше (open, write, read, fseek, socket и т. Д.), Поэтому я подумал об использовании метода 1.

Однако я не могу сгенерировать отчет о покрытии с использованием метода 1 (я компилирую свою библиотеку-заглушку с опциями —coverage). Это становится заблокированным, когда я вижу strace. Я не знаю, как решить эту проблему. Поэтому я подумал о сохранении системных вызовов вместо создания фиктивных файлов устройств и работы с ними. (например: / sys / devices / system / cpu1 / online -> / home / user / dummy / cpu / online).

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

Мне нужны предложения по

1. Используя метод 1, как создать отчет о покрытии?

2. Если это невозможно, как установить те же свойства файла-заглушки, что и файл устройства.

Просто снимок моего кода:
openstub.c

#include <sys/types.h>
#include <sys/stat.h>

int open(const char *pathname, int flags, mode_t mode)
{
if(mode ==1)
{
return 1;
}
else
{
return 0;
}
}

usingopen.c

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
char dummypath[]="dummypath";
int filehandle;
filehandle = open(dummypath,O_WRONLY);
if(0>filehandle)
printf("i am NOT using stubs\n");
else if(filehandle ==1) {
printf("I am using stub\n");
}
else
{
printf("I am using stub with Not the WRITE mode\n");
}
}

команда компиляции:

gcc -shared -fPIC -ftest-coverage -fprofile-arcs openstub.c -o openstub.so

для использованияоткрыто

gcc -ftest-coverage -fprofile-arcs -o usingopen usingopen.c

gcovr -f usingopen (это застревает после того, как LD_PRELOAD установлен в openstub.so)

Спасибо вам за ваши предложения!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]