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