nt9856x/code/application/sifarsdk/test/test_utils/linux_mock/LinuxApiTest.h

95 lines
2.8 KiB
C++

#ifndef LINUX_API_TEST_H
#define LINUX_API_TEST_H
#include "LinuxApiMock.h"
// #include "NetworkModuleMock.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <map>
constexpr int SUCCESSFUL = 0;
constexpr int FAILED = -1;
constexpr int FPRINTF_LENGTH_DEFAULT = 0;
extern const char *NETWORK_MODULE_USB_NODE;
extern const char *MCU_DEVICE_PATH_MOCK;
extern const struct hostent *DONOT_USE_MOCK_GETHOSTBYNAME;
class FILE_Mock
{
public:
FILE_Mock(const char *pathname, const char *mode)
: mPathname(pathname), mMode(mode)
{
mFile = nullptr;
mOnlyForTest = nullptr;
}
~FILE_Mock() = default;
void FileFopen(void);
int FileClose(void);
private:
FILE *mFile;
const char *mPathname;
const char *mMode;
int *mOnlyForTest;
};
enum class OpenFd
{
USB_FD = 10,
MCU_FD,
END
};
class OpenFd_Mock
{
public:
OpenFd_Mock()
{
mFd = -1;
}
~OpenFd_Mock() = default;
private:
int mFd;
};
class LinuxApiTest : public LinuxApiMock
{
public:
LinuxApiTest();
~LinuxApiTest() = default;
static std::shared_ptr<LinuxApiTest> &GetInstance(std::shared_ptr<LinuxApiTest> *impl = nullptr)
{
static auto instance = std::make_shared<LinuxApiTest>();
// if (impl)
// {
// // The non-thread-safe changing is only for gtest.
// instance->UnInit();
// instance = *impl;
// instance->Init();
// }
instance = std::dynamic_pointer_cast<LinuxApiTest>(LinuxApiMock::GetInstance());
return instance;
}
MOCK_METHOD2(fopen, FILE *(const char *, const char *));
MOCK_METHOD1(fclose, int(FILE *));
MOCK_METHOD2(fprintf_gpio, int(FILE *, const U32));
MOCK_METHOD2(fprintf_dir, int(FILE *, const char *));
MOCK_METHOD4(fread, size_t(std::string &, size_t, size_t, FILE *));
MOCK_METHOD2(open, int(const char *, int));
MOCK_METHOD1(close, int(int));
MOCK_METHOD3(write, ssize_t(int, const void *, size_t));
MOCK_METHOD3(read, ssize_t(int, void *, size_t));
MOCK_METHOD1(read_block, bool(int));
MOCK_METHOD5(select, int(int, fd_set *, fd_set *, fd_set *, struct timeval *));
MOCK_METHOD1(gethostbyname, struct hostent *(const char *));
MOCK_METHOD3(connect, int(int, const struct sockaddr *, socklen_t));
MOCK_METHOD3(socket, int(int, int, int));
public:
const int CreateOpenFd(const char *pathname);
private:
std::map<const char *, OpenFd> mOpenFd;
public:
static FILE *CreateMockFile(const char *pathname, const char *mode);
static void DestroyMockFile(FILE *file);
static void DefaultApiInit(std::shared_ptr<LinuxApiTest> &mock);
};
#endif // LINUX_API_TEST_H