функция gtest C ++, которая вызывает функции glibc / openssl - PullRequest
0 голосов
/ 05 ноября 2019

Я пишу модульный тест для моего проекта на c ++, где есть много функций, которые вызывают функции glibc (malloc, read, open, write, close и т. Д.), А также некоторые функции внешних библиотек, такие как openssl (функции SHA256).

Например, следующая функция вычисляет контрольную сумму SHA256 для данного файла. Теперь эта функция имеет несколько вызовов стандартных / внешних библиотечных функций, таких как, fopen, SHA256_Init, malloc и т. Д. Теперь, как заблокировать вызовы этих функций, поскольку наша главная цель - выполнить модульное тестирование файла SHA256, а не функций, которые она вызывает.

int MyClass::SHA256File(const char *path, char outputBuffer[65])
{
  FILE *file = fopen(path, "rb");
  if(!file) {
    throw exception("Failed to open file for SHA256 computation.");
  }

  unsigned char hash[SHA256_DIGEST_LENGTH];
  SHA256_CTX sha256;
  if ( !SHA256_Init(&sha256) ) {
    throw exception("SHA256_Init failed.");
  }

  const int bufSize = 32768;
  unsigned char *buffer = (unsigned char*) malloc(bufSize);
  int bytesRead = 0;
  if(!buffer) { 
    throw exception("Failed to allocate buffer for SHA256 computation.");
  }

  while( fgets((char*)buffer, bufSize, file) != NULL ) { 
    curr_pos = ftell(file); 
    bytesRead = curr_pos - last_pos;
    last_pos = curr_pos;
    if( !SHA256_Update(&sha256, buffer, bytesRead) ) {
        throw exception("SHA256_Update failed..");
    }
  }

  if ( ferror(file) ) {
    throw exception("Failed to read file for SHA256 computation.");
  }

  if( !SHA256_Final(hash, &sha256) ) {
    throw exception("SHA256_Final failed..");
  }

  int i = 0;
  for(i = 0; i < SHA256_DIGEST_LENGTH; i++) {
    sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
  }

  outputBuffer[64] = 0;
  fclose(file);
  free(buffer);
  return 0;
}

У меня есть несколько указателей, таких как glibcmock , но я бы предпочел иметь некоторую стандартную поддержку, если glibc / gmock может предоставить.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...