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