From 15ca81ad286746696062e316812ae2641ee241a8 Mon Sep 17 00:00:00 2001 From: Alicja Lukaszewicz Date: Mon, 14 Apr 2025 19:05:49 +0200 Subject: [PATCH] test: check if zeInitDrivers produces output Related-To: VCV-12860 Signed-off-by: Alicja Lukaszewicz --- test/loader_api.cpp | 84 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 2 deletions(-) diff --git a/test/loader_api.cpp b/test/loader_api.cpp index aa389e68..c3407ca7 100644 --- a/test/loader_api.cpp +++ b/test/loader_api.cpp @@ -12,14 +12,79 @@ #include "ze_api.h" #include "zes_api.h" +#include + +#if defined(__linux__) +#include +#include +#include +#elif defined(_WIN32) +#include +#include +#include +#endif + #if defined(_WIN32) - #define putenv_safe _putenv +#define putenv_safe _putenv #else - #define putenv_safe putenv +#define putenv_safe putenv #endif namespace { + class CaptureOutput { + private: + int original_fd; + int fd; + int stream; + std::string filename; + + public: + enum { Stdout = 1, Stderr = 2 }; + + CaptureOutput(int stream_) : stream(stream_) { + original_fd = _dup(stream); +#if defined(__linux__) + filename = "/tmp/capture_output_XXXXXX"; + fd = mkstemp(filename.data()); +#elif defined(_WIN32) + char buffer[50]; + tmpnam_s(buffer, 50); + filename = std::string(buffer); + std::cout << filename << "\n"; + std::cout << _sopen_s(&fd, filename.c_str(), _O_CREAT | _O_RDWR, _SH_DENYNO, _S_IREAD | _S_IWRITE); +#endif + fflush(nullptr); + _dup2(fd, stream); + _close(fd); + } + + ~CaptureOutput() { + if (original_fd != -1) { + fflush(nullptr); + _dup2(original_fd, stream); + _close(original_fd); + original_fd = -1; + } + if (remove(filename.c_str()) != 0) { + std::cerr << "Deleting file " << filename.c_str() << " failed."; + } + } + + std::string GetOutput() { + if (original_fd != -1) { + fflush(nullptr); + _dup2(original_fd, stream); + _close(original_fd); + original_fd = -1; + } + std::ifstream stream(filename); + std::string output = std::string((std::istreambuf_iterator(stream)), + std::istreambuf_iterator()); + return output; + } + }; + TEST( LoaderAPI, GivenLevelZeroLoaderPresentWhenCallingzeGetLoaderVersionsAPIThenValidVersionIsReturned) { @@ -357,6 +422,21 @@ TEST( EXPECT_GT(pDriverGetCount, 0); } +TEST( + LoaderInit, + GivenZeInitDriverWhenCalledThenNoOutputIsPrintedToStdout) { + uint32_t pInitDriversCount = 0; + ze_init_driver_type_desc_t desc = { ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC }; + desc.flags = UINT32_MAX; + desc.pNext = nullptr; + + CaptureOutput capture(CaptureOutput::Stdout); + EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc)); + + std::string output = capture.GetOutput(); + EXPECT_TRUE(output.empty()); +} + TEST( LoaderTearDown, GivenLoaderNotInDestructionStateWhenCallingzelCheckIsLoaderInTearDownThenFalseIsReturned) {