1 /*
2  * Copyright (C) 2019-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 
10 #include "shared/source/helpers/file_io.h"
11 #include "shared/source/helpers/string_helpers.h"
12 #include "shared/source/utilities/directory.h"
13 #include "shared/source/utilities/logger.h"
14 
15 #include "opencl/source/utilities/cl_logger.h"
16 
17 #include <map>
18 
19 template <DebugFunctionalityLevel DebugLevel>
20 class TestFileLogger : public NEO::FileLogger<DebugLevel> {
21   public:
22     using NEO::FileLogger<DebugLevel>::FileLogger;
23 
~TestFileLogger()24     ~TestFileLogger() {
25         std::remove(NEO::FileLogger<DebugLevel>::logFileName.c_str());
26     }
27 
useRealFiles(bool value)28     void useRealFiles(bool value) {
29         mockFileSystem = !value;
30     }
31 
writeToFile(std::string filename,const char * str,size_t length,std::ios_base::openmode mode)32     void writeToFile(std::string filename,
33                      const char *str,
34                      size_t length,
35                      std::ios_base::openmode mode) override {
36 
37         savedFiles[filename] << std::string(str, str + length);
38         if (mockFileSystem == false) {
39             NEO::FileLogger<DebugLevel>::writeToFile(filename, str, length, mode);
40         }
41     };
42 
createdFilesCount()43     int32_t createdFilesCount() {
44         return static_cast<int32_t>(savedFiles.size());
45     }
46 
wasFileCreated(std::string filename)47     bool wasFileCreated(std::string filename) {
48         return savedFiles.find(filename) != savedFiles.end();
49     }
50 
getFileString(std::string filename)51     std::string getFileString(std::string filename) {
52         return savedFiles[filename].str();
53     }
54 
55   protected:
56     bool mockFileSystem = true;
57     std::map<std::string, std::stringstream> savedFiles;
58 };
59 
60 using FullyEnabledFileLogger = TestFileLogger<DebugFunctionalityLevel::Full>;
61 using FullyDisabledFileLogger = TestFileLogger<DebugFunctionalityLevel::None>;
62 
63 using FullyEnabledClFileLogger = NEO::ClFileLogger<DebugFunctionalityLevel::Full>;
64 using FullyDisabledClFileLogger = NEO::ClFileLogger<DebugFunctionalityLevel::None>;
65 
66 template <bool DebugFunctionality>
67 class TestLoggerApiEnterWrapper : public NEO::LoggerApiEnterWrapper<DebugFunctionality> {
68   public:
TestLoggerApiEnterWrapper(const char * functionName,int * errCode)69     TestLoggerApiEnterWrapper(const char *functionName, int *errCode) : NEO::LoggerApiEnterWrapper<DebugFunctionality>(functionName, errCode), loggedEnter(false) {
70         if (DebugFunctionality) {
71             loggedEnter = true;
72         }
73     }
74 
75     bool loggedEnter;
76 };
77