/workspaces/astro/sol3-sdk/cpp/sol3/core/test_utils.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/core/test_utils.h Source File
Space-ng SDK
test_utils.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 
3 #pragma once
4 
5 #include "sol3/cpp/filesystem.h"
6 
7 #include <cstdlib>
8 #include <optional>
9 #include <random>
10 #include <stdexcept>
11 #include <string>
12 #include <system_error>
13 
14 namespace sol3::core::test {
15 inline cpp::fs::path createUniqueTempDirName() {
16  cpp::fs::path temp_dir = cpp::fs::temp_directory_path();
17  std::random_device rd;
18  std::mt19937 gen(rd());
19  std::uniform_int_distribution<> distrib(0, 999999);
20 
21  for (int i = 0; i < 100; ++i) {
22  cpp::fs::path full_path =
23  temp_dir / ("sol3_tmp_" + std::to_string(distrib(gen)));
24  if (!cpp::fs::exists(full_path)) {
25  if (cpp::fs::create_directory(full_path)) {
26  return full_path;
27  }
28  }
29  }
30  throw std::runtime_error(
31  "Failed to create a unique temporary directory after several attempts.");
32 }
33 
35  public:
38  if (temp_dir_.empty()) {
39  return;
40  }
41  std::error_code ec;
42  cpp::fs::remove_all(temp_dir_, ec);
43  }
44 
49 
50  cpp::fs::path path() const { return temp_dir_; }
51 
52  private:
53  cpp::fs::path temp_dir_;
54 };
55 
56 class ScopedEnvVar {
57  public:
58  ScopedEnvVar(std::string name, std::string value) : name_(std::move(name)) {
59  char const* original = std::getenv(name_.c_str());
60  if (original != nullptr) {
61  original_value_ = std::string(original);
62  }
63  ::setenv(name_.c_str(), value.c_str(), 1);
64  }
65 
67  if (original_value_.has_value()) {
68  ::setenv(name_.c_str(), original_value_->c_str(), 1);
69  return;
70  }
71  ::unsetenv(name_.c_str());
72  }
73 
74  ScopedEnvVar(ScopedEnvVar const&) = delete;
76  ScopedEnvVar& operator=(ScopedEnvVar const&) = delete;
78 
79  private:
80  std::string name_;
81  std::optional<std::string> original_value_;
82 };
83 } // namespace sol3::core::test
Definition: test_utils.h:56
ScopedEnvVar & operator=(ScopedEnvVar &&)=delete
ScopedEnvVar(std::string name, std::string value)
Definition: test_utils.h:58
ScopedEnvVar(ScopedEnvVar &&)=delete
ScopedEnvVar & operator=(ScopedEnvVar const &)=delete
~ScopedEnvVar()
Definition: test_utils.h:66
ScopedEnvVar(ScopedEnvVar const &)=delete
Definition: test_utils.h:34
UniqueTempOutputDir()
Definition: test_utils.h:36
UniqueTempOutputDir(UniqueTempOutputDir &&)=delete
UniqueTempOutputDir & operator=(UniqueTempOutputDir const &)=delete
UniqueTempOutputDir & operator=(UniqueTempOutputDir &&)=delete
cpp::fs::path path() const
Definition: test_utils.h:50
~UniqueTempOutputDir()
Definition: test_utils.h:37
UniqueTempOutputDir(UniqueTempOutputDir const &)=delete
Definition: test_utils.h:14
cpp::fs::path createUniqueTempDirName()
Definition: test_utils.h:15
Definition: shmem_buffer.h:219