hunting/test/utils/LinuxApiMock/include/LinuxApiMock.h
2024-01-25 12:01:03 -08:00

55 lines
1.4 KiB
C++

#ifndef LINUX_API_MOCK_H
#define LINUX_API_MOCK_H
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <memory>
#ifdef __cplusplus
extern "C" {
#endif
// Modify all the real api.
int __real_fx_open(const char *pathname, int flags);
#ifdef __cplusplus
}
#endif
constexpr int INVALID_HANDLE = -1;
class LinuxApiMock
{
public:
LinuxApiMock() = default;
virtual ~LinuxApiMock() = default;
static std::shared_ptr<LinuxApiMock> &GetInstance(std::shared_ptr<LinuxApiMock> *impl = nullptr)
{
static auto instance = std::make_shared<LinuxApiMock>();
if (impl) {
// The non-thread-safe changing is only for gtest.
instance = *impl;
}
return instance;
}
virtual void Init() {}
virtual void UnInit() {}
virtual int fx_open(const char *pathname, int flags);
};
/**
* A simulation interface class used for automated testing in Ubuntu systems, implementing the function of piling on
* some Linux standard interfaces.
*/
class LinuxTest : public LinuxApiMock
{
public:
LinuxTest() = default;
virtual ~LinuxTest() = default;
MOCK_METHOD2(fx_open, int(const char *, int));
public:
/**
* @brief Get the Handle For Mock object
*
* @return int
*/
virtual int GetHandleForMock(void) { return INVALID_HANDLE; }
public:
static std::shared_ptr<LinuxTest> CreateLinuxTest(void);
};
#endif