2020-03-17 19:19:38 +08:00
|
|
|
/*
|
2021-04-16 18:59:40 +08:00
|
|
|
* Copyright (C) 2020-2021 Intel Corporation
|
2020-03-17 19:19:38 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
2020-03-27 23:32:07 +08:00
|
|
|
#include "shared/source/utilities/io_functions.h"
|
|
|
|
|
|
|
|
#include <cstdint>
|
2020-06-08 22:19:52 +08:00
|
|
|
#include <string>
|
2020-07-30 19:03:04 +08:00
|
|
|
#include <unordered_map>
|
2020-03-17 19:19:38 +08:00
|
|
|
|
|
|
|
namespace NEO {
|
2020-03-27 23:32:07 +08:00
|
|
|
namespace IoFunctions {
|
2020-03-17 19:19:38 +08:00
|
|
|
extern uint32_t mockFopenCalled;
|
2021-09-22 23:45:29 +08:00
|
|
|
extern uint32_t failAfterNFopenCount;
|
2021-04-16 20:52:30 +08:00
|
|
|
extern FILE *mockFopenReturned;
|
2020-03-17 19:19:38 +08:00
|
|
|
extern uint32_t mockVfptrinfCalled;
|
|
|
|
extern uint32_t mockFcloseCalled;
|
2020-07-13 21:14:16 +08:00
|
|
|
extern uint32_t mockGetenvCalled;
|
2021-04-16 18:59:40 +08:00
|
|
|
extern uint32_t mockFseekCalled;
|
|
|
|
extern uint32_t mockFtellCalled;
|
|
|
|
extern long int mockFtellReturn;
|
|
|
|
extern uint32_t mockRewindCalled;
|
|
|
|
extern uint32_t mockFreadCalled;
|
|
|
|
extern size_t mockFreadReturn;
|
2021-11-16 01:41:22 +08:00
|
|
|
extern uint32_t mockFwriteCalled;
|
|
|
|
extern size_t mockFwriteReturn;
|
2020-03-17 19:19:38 +08:00
|
|
|
|
2020-07-30 19:03:04 +08:00
|
|
|
extern std::unordered_map<std::string, std::string> *mockableEnvValues;
|
2020-06-08 22:19:52 +08:00
|
|
|
|
2020-03-19 17:53:05 +08:00
|
|
|
inline FILE *mockFopen(const char *filename, const char *mode) {
|
2020-03-17 19:19:38 +08:00
|
|
|
mockFopenCalled++;
|
2021-09-22 23:45:29 +08:00
|
|
|
if (failAfterNFopenCount > 0 && failAfterNFopenCount < mockFopenCalled) {
|
|
|
|
return NULL;
|
|
|
|
}
|
2021-04-16 20:52:30 +08:00
|
|
|
return mockFopenReturned;
|
2020-03-17 19:19:38 +08:00
|
|
|
}
|
|
|
|
|
2020-03-19 17:53:05 +08:00
|
|
|
inline int mockVfptrinf(FILE *stream, const char *format, va_list arg) {
|
2020-03-17 19:19:38 +08:00
|
|
|
mockVfptrinfCalled++;
|
|
|
|
return 0x10;
|
|
|
|
}
|
|
|
|
|
2020-03-19 17:53:05 +08:00
|
|
|
inline int mockFclose(FILE *stream) {
|
2020-03-17 19:19:38 +08:00
|
|
|
mockFcloseCalled++;
|
|
|
|
return 0;
|
|
|
|
}
|
2020-06-08 22:19:52 +08:00
|
|
|
|
|
|
|
inline char *mockGetenv(const char *name) noexcept {
|
2020-07-13 21:14:16 +08:00
|
|
|
mockGetenvCalled++;
|
2020-07-30 19:03:04 +08:00
|
|
|
if (mockableEnvValues != nullptr && mockableEnvValues->find(name) != mockableEnvValues->end()) {
|
|
|
|
return const_cast<char *>(mockableEnvValues->find(name)->second.c_str());
|
2020-06-08 22:19:52 +08:00
|
|
|
}
|
2020-10-09 16:24:12 +08:00
|
|
|
return nullptr;
|
2020-06-08 22:19:52 +08:00
|
|
|
}
|
|
|
|
|
2021-04-16 18:59:40 +08:00
|
|
|
inline int mockFseek(FILE *stream, long int offset, int origin) {
|
|
|
|
mockFseekCalled++;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline long int mockFtell(FILE *stream) {
|
|
|
|
mockFtellCalled++;
|
|
|
|
return mockFtellReturn;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void mockRewind(FILE *stream) {
|
|
|
|
mockRewindCalled++;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline size_t mockFread(void *ptr, size_t size, size_t count, FILE *stream) {
|
|
|
|
mockFreadCalled++;
|
|
|
|
return mockFreadReturn;
|
|
|
|
}
|
|
|
|
|
2021-11-16 01:41:22 +08:00
|
|
|
inline size_t mockFwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {
|
|
|
|
mockFwriteCalled++;
|
|
|
|
return mockFwriteReturn;
|
|
|
|
}
|
|
|
|
|
2020-03-27 23:32:07 +08:00
|
|
|
} // namespace IoFunctions
|
2020-03-17 19:19:38 +08:00
|
|
|
} // namespace NEO
|