95 lines
2.8 KiB
C++
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
|