1*090ab8e1SEd Tanous #pragma once 2*090ab8e1SEd Tanous #include <filesystem> 3*090ab8e1SEd Tanous #include <string> 4*090ab8e1SEd Tanous #include <string_view> 5*090ab8e1SEd Tanous 6*090ab8e1SEd Tanous #include <gtest/gtest.h> 7*090ab8e1SEd Tanous 8*090ab8e1SEd Tanous struct TemporaryFileHandle 9*090ab8e1SEd Tanous { 10*090ab8e1SEd Tanous std::filesystem::path path; 11*090ab8e1SEd Tanous std::string stringPath; 12*090ab8e1SEd Tanous 13*090ab8e1SEd Tanous // Creates a temporary file with the contents provided, removes it on 14*090ab8e1SEd Tanous // destruction. TemporaryFileHandleTemporaryFileHandle15*090ab8e1SEd Tanous explicit TemporaryFileHandle(std::string_view sampleData) : 16*090ab8e1SEd Tanous path(std::filesystem::temp_directory_path() / 17*090ab8e1SEd Tanous "bmcweb_http_response_test_XXXXXXXXXXX") 18*090ab8e1SEd Tanous { 19*090ab8e1SEd Tanous stringPath = path.string(); 20*090ab8e1SEd Tanous 21*090ab8e1SEd Tanous int fd = mkstemp(stringPath.data()); 22*090ab8e1SEd Tanous EXPECT_GT(fd, 0); 23*090ab8e1SEd Tanous EXPECT_EQ(write(fd, sampleData.data(), sampleData.size()), 24*090ab8e1SEd Tanous sampleData.size()); 25*090ab8e1SEd Tanous close(fd); 26*090ab8e1SEd Tanous } 27*090ab8e1SEd Tanous 28*090ab8e1SEd Tanous TemporaryFileHandle(const TemporaryFileHandle&) = delete; 29*090ab8e1SEd Tanous TemporaryFileHandle(TemporaryFileHandle&&) = delete; 30*090ab8e1SEd Tanous TemporaryFileHandle& operator=(const TemporaryFileHandle&) = delete; 31*090ab8e1SEd Tanous TemporaryFileHandle& operator=(TemporaryFileHandle&&) = delete; 32*090ab8e1SEd Tanous ~TemporaryFileHandleTemporaryFileHandle33*090ab8e1SEd Tanous ~TemporaryFileHandle() 34*090ab8e1SEd Tanous { 35*090ab8e1SEd Tanous std::filesystem::remove(path); 36*090ab8e1SEd Tanous } 37*090ab8e1SEd Tanous }; 38