You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sz...@apache.org on 2021/08/02 13:09:59 UTC

[nifi-minifi-cpp] 02/02: MINIFICPP-1600 Unify temporary directory creation in the tests

This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit da950478a4934a72a84f6fc1eb7f0cfa007cc995
Author: Ferenc Gerlits <fg...@gmail.com>
AuthorDate: Mon Aug 2 14:52:17 2021 +0200

    MINIFICPP-1600 Unify temporary directory creation in the tests
    
    Closes #1139
    
    Signed-off-by: Marton Szasz <sz...@apache.org>
---
 encrypt-config/tests/CMakeLists.txt                |  2 +-
 encrypt-config/tests/ConfigFileTests.cpp           |  4 +-
 extensions/civetweb/tests/ListenHTTPTests.cpp      |  3 +-
 extensions/coap/tests/CoapC2VerifyHeartbeat.cpp    |  3 +-
 .../tests/ExpressionLanguageTests.cpp              |  6 +-
 extensions/http-curl/tests/C2ConfigEncryption.cpp  |  3 +-
 .../tests/C2DescribeCoreComponentStateTest.cpp     |  3 +-
 .../http-curl/tests/C2FetchFlowIfMissingTest.cpp   |  3 +-
 extensions/http-curl/tests/C2NullConfiguration.cpp |  3 +-
 .../http-curl/tests/C2VerifyServeResults.cpp       |  3 +-
 extensions/http-curl/tests/HTTPSiteToSiteTests.cpp |  3 +-
 .../http-curl/tests/HttpPostIntegrationTest.cpp    |  3 +-
 extensions/http-curl/tests/SiteToSiteRestTest.cpp  |  3 +-
 .../http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp |  3 +-
 .../http-curl/tests/unit/InvokeHTTPTests.cpp       |  6 --
 .../pdh/tests/PerformanceDataMonitorTests.cpp      |  2 +-
 extensions/sftp/tests/FetchSFTPTests.cpp           | 29 ++++------
 extensions/sftp/tests/ListSFTPTests.cpp            | 45 +++++++--------
 extensions/sftp/tests/ListThenFetchSFTPTests.cpp   | 27 ++++-----
 extensions/sftp/tests/PutSFTPTests.cpp             | 30 ++++------
 .../tests/integration/SecureSocketGetTCPTest.cpp   |  3 +-
 .../tests/integration/TailFileTest.cpp             |  3 +-
 .../tests/unit/ExtractTextTests.cpp                |  8 +--
 .../tests/unit/GenerateFlowFileTests.cpp           | 15 ++---
 .../tests/unit/GetFileTests.cpp                    |  4 +-
 .../tests/unit/HashContentTest.cpp                 |  6 +-
 .../tests/unit/ProcessorTests.cpp                  | 18 ++----
 .../tests/unit/PutFileTests.cpp                    | 46 ++++++---------
 .../tests/unit/RetryFlowFileTests.cpp              |  9 +--
 .../tests/unit/TailFileTests.cpp                   | 65 +++++++++++-----------
 extensions/windows-event-log/tests/CWELTestUtils.h |  2 +-
 libminifi/include/utils/TestUtils.h                | 19 -------
 libminifi/test/TestBase.h                          | 13 +----
 .../test/archive-tests/CompressContentTests.cpp    |  9 +--
 libminifi/test/archive-tests/FocusArchiveTests.cpp |  6 +-
 .../test/archive-tests/ManipulateArchiveTests.cpp  |  4 +-
 libminifi/test/archive-tests/MergeFileTests.cpp    |  3 +-
 libminifi/test/aws-tests/FetchS3ObjectTests.cpp    |  2 +-
 libminifi/test/aws-tests/S3TestsFixture.h          |  6 +-
 .../test/azure-tests/PutAzureBlobStorageTests.cpp  |  3 +-
 .../test/bustache-tests/ApplyTemplateTests.cpp     | 22 ++++----
 libminifi/test/flow-tests/SessionTests.cpp         |  3 +-
 libminifi/test/flow-tests/TestControllerWithFlow.h |  3 +-
 libminifi/test/gps-tests/GPSTests.cpp              |  3 +-
 .../PersistableKeyValueStoreServiceTest.cpp        |  4 +-
 .../UnorderedMapKeyValueStoreServiceTest.cpp       |  4 +-
 libminifi/test/pcap-tests/PcapTest.cpp             |  3 +-
 .../test/persistence-tests/PersistenceTests.cpp    |  6 +-
 .../test/rocksdb-tests/ContentSessionTests.cpp     |  3 +-
 .../rocksdb-tests/DBContentRepositoryTests.cpp     | 15 ++---
 .../rocksdb-tests/DBProvenanceRepositoryTests.cpp  |  8 +--
 libminifi/test/rocksdb-tests/EncryptionTests.cpp   |  2 +-
 libminifi/test/rocksdb-tests/RepoTests.cpp         | 23 +++-----
 .../test/rocksdb-tests/RocksDBStreamTests.cpp      |  3 +-
 libminifi/test/rocksdb-tests/RocksDBTests.cpp      |  5 +-
 .../script-tests/ExecutePythonProcessorTests.cpp   | 11 ++--
 .../TestExecuteScriptProcessorWithLuaScript.cpp    | 18 ++----
 .../TestExecuteScriptProcessorWithPythonScript.cpp | 18 ++----
 libminifi/test/sensors-tests/SensorTests.cpp       |  3 +-
 libminifi/test/sql-tests/SQLTestController.h       |  3 +-
 .../test/tensorflow-tests/TensorFlowTests.cpp      | 15 ++---
 libminifi/test/unit/ChecksumCalculatorTests.cpp    | 12 ++--
 .../test/unit/ConfigurationChecksumsTests.cpp      |  4 +-
 libminifi/test/unit/EnvironmentUtilsTests.cpp      |  3 +-
 libminifi/test/unit/FileStreamTests.cpp            | 36 ++++--------
 libminifi/test/unit/FileSystemTests.cpp            |  3 +-
 libminifi/test/unit/FileTriggerTests.cpp           |  6 +-
 libminifi/test/unit/FileUtilsTests.cpp             | 27 +++------
 nanofi/tests/CAPITests.cpp                         | 27 +++------
 nanofi/tests/CTestsBase.h                          |  3 +-
 70 files changed, 261 insertions(+), 463 deletions(-)

diff --git a/encrypt-config/tests/CMakeLists.txt b/encrypt-config/tests/CMakeLists.txt
index 18efe4e..5064c58 100644
--- a/encrypt-config/tests/CMakeLists.txt
+++ b/encrypt-config/tests/CMakeLists.txt
@@ -32,7 +32,7 @@ foreach(testfile ${ENCRYPT_CONFIG_TESTS})
   target_include_directories(${testfilename} BEFORE PRIVATE "${CMAKE_SOURCE_DIR}/libminifi/test")
 
   target_wholearchive_library(${testfilename} minifi)
-  target_link_libraries(${testfilename} ${CATCH_MAIN_LIB})
+  target_link_libraries(${testfilename} ${CATCH_MAIN_LIB} ${TEST_BASE_LIB})
   add_test(NAME ${testfilename} COMMAND ${testfilename} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
 
   math(EXPR ENCRYPT_CONFIG_TEST_COUNT "${ENCRYPT_CONFIG_TEST_COUNT}+1")
diff --git a/encrypt-config/tests/ConfigFileTests.cpp b/encrypt-config/tests/ConfigFileTests.cpp
index 04e7a94..da11ca8 100644
--- a/encrypt-config/tests/ConfigFileTests.cpp
+++ b/encrypt-config/tests/ConfigFileTests.cpp
@@ -179,8 +179,8 @@ TEST_CASE("ConfigFile can write to a new file", "[encrypt-config][writeTo]") {
   ConfigFile test_file{std::ifstream{"resources/minifi.properties"}};
   test_file.update("nifi.bored.yield.duration", "20 millis");
 
-  char format[] = "/tmp/ConfigFileTests.tmp.XXXXXX";
-  std::string temp_dir = utils::file::create_temp_directory(format);
+  TestController test_controller;
+  std::string temp_dir = test_controller.createTempDirectory();
   auto remove_directory = gsl::finally([&temp_dir]() { utils::file::delete_dir(temp_dir); });
   std::string file_path = utils::file::concat_path(temp_dir, "minifi.properties");
 
diff --git a/extensions/civetweb/tests/ListenHTTPTests.cpp b/extensions/civetweb/tests/ListenHTTPTests.cpp
index f2168e0..5f95b2d 100644
--- a/extensions/civetweb/tests/ListenHTTPTests.cpp
+++ b/extensions/civetweb/tests/ListenHTTPTests.cpp
@@ -57,8 +57,7 @@ class ListenHTTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::controllers::SSLContextService>();
 
     // Create temporary directories
-    char tmp_dir_format[] = "/tmp/gt.XXXXXX";
-    tmp_dir = testController.createTempDirectory(tmp_dir_format);
+    tmp_dir = testController.createTempDirectory();
     REQUIRE(!tmp_dir.empty());
 
     // Define test input file
diff --git a/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp b/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
index 8c39329..181a57b 100644
--- a/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
+++ b/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
@@ -59,8 +59,7 @@ class VerifyCoAPServer : public CoapIntegrationBase {
  public:
   explicit VerifyCoAPServer(bool isSecure)
       : isSecure(isSecure) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/expression-language/tests/ExpressionLanguageTests.cpp b/extensions/expression-language/tests/ExpressionLanguageTests.cpp
index 63db2a8..28bdc0b 100644
--- a/extensions/expression-language/tests/ExpressionLanguageTests.cpp
+++ b/extensions/expression-language/tests/ExpressionLanguageTests.cpp
@@ -193,14 +193,12 @@ TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePu
   auto plan = testController.createPlan(conf);
   auto repo = std::make_shared<TestRepository>();
 
-  char format[] = "/tmp/gt.XXXXXX";
-  std::string in_dir = testController.createTempDirectory(format);
+  std::string in_dir = testController.createTempDirectory();
   REQUIRE(!in_dir.empty());
 
   std::string in_file(in_dir);
   in_file.append("/file");
-  char formatX[] = "/tmp/gt.XXXXXX";
-  std::string out_dir = testController.createTempDirectory(formatX);
+  std::string out_dir = testController.createTempDirectory();
   REQUIRE(!out_dir.empty());
 
   std::string out_file(out_dir);
diff --git a/extensions/http-curl/tests/C2ConfigEncryption.cpp b/extensions/http-curl/tests/C2ConfigEncryption.cpp
index 0560db8..9e9015e 100644
--- a/extensions/http-curl/tests/C2ConfigEncryption.cpp
+++ b/extensions/http-curl/tests/C2ConfigEncryption.cpp
@@ -28,8 +28,7 @@ int main(int argc, char **argv) {
   const cmd_args args = parse_cmdline_args(argc, argv, "update");
   TestController controller;
   // copy config file to temporary location as it will get overridden
-  char tmp_format[] = "/var/tmp/c2.XXXXXX";
-  std::string home_path = controller.createTempDirectory(tmp_format);
+  std::string home_path = controller.createTempDirectory();
   std::string live_config_file = utils::file::FileUtils::concat_path(home_path, "config.yml");
   utils::file::FileUtils::copy_file(args.test_file, live_config_file);
   // the C2 server will update the flow with the contents of args.test_file
diff --git a/extensions/http-curl/tests/C2DescribeCoreComponentStateTest.cpp b/extensions/http-curl/tests/C2DescribeCoreComponentStateTest.cpp
index b555983..3d706ce 100644
--- a/extensions/http-curl/tests/C2DescribeCoreComponentStateTest.cpp
+++ b/extensions/http-curl/tests/C2DescribeCoreComponentStateTest.cpp
@@ -28,8 +28,7 @@
 class VerifyC2DescribeCoreComponentState : public VerifyC2Describe {
  public:
   VerifyC2DescribeCoreComponentState() {
-    char format[] = "/var/tmp/ssth.XXXXXX";
-    temp_dir_ = testController.createTempDirectory(format);
+    temp_dir_ = testController.createTempDirectory();
 
     test_file_1_ = utils::file::FileUtils::concat_path(temp_dir_, "test1.txt");
     test_file_2_ = utils::file::FileUtils::concat_path(temp_dir_, "test2.txt");
diff --git a/extensions/http-curl/tests/C2FetchFlowIfMissingTest.cpp b/extensions/http-curl/tests/C2FetchFlowIfMissingTest.cpp
index 12133cc..299a5e6 100644
--- a/extensions/http-curl/tests/C2FetchFlowIfMissingTest.cpp
+++ b/extensions/http-curl/tests/C2FetchFlowIfMissingTest.cpp
@@ -24,8 +24,7 @@
 
 int main(int argc, char **argv) {
   TestController controller;
-  char format[] = "/var/tmp/c2.XXXXXX";
-  std::string minifi_home = controller.createTempDirectory(format);
+  std::string minifi_home = controller.createTempDirectory();
   const cmd_args args = parse_cmdline_args(argc, argv);
   C2FlowProvider handler(args.test_file);
   VerifyFlowFetched harness(10000);
diff --git a/extensions/http-curl/tests/C2NullConfiguration.cpp b/extensions/http-curl/tests/C2NullConfiguration.cpp
index a6ecd1b..0a47efa 100644
--- a/extensions/http-curl/tests/C2NullConfiguration.cpp
+++ b/extensions/http-curl/tests/C2NullConfiguration.cpp
@@ -36,8 +36,7 @@ class VerifyC2Server : public HTTPIntegrationBase {
  public:
   explicit VerifyC2Server(bool isSecure)
       : isSecure(isSecure) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/http-curl/tests/C2VerifyServeResults.cpp b/extensions/http-curl/tests/C2VerifyServeResults.cpp
index 053cb6e..250dbdf 100644
--- a/extensions/http-curl/tests/C2VerifyServeResults.cpp
+++ b/extensions/http-curl/tests/C2VerifyServeResults.cpp
@@ -32,8 +32,7 @@
 class VerifyC2Server : public HTTPIntegrationBase {
  public:
   VerifyC2Server() {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp b/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp
index ad72670..6203139 100644
--- a/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp
+++ b/extensions/http-curl/tests/HTTPSiteToSiteTests.cpp
@@ -38,8 +38,7 @@ class SiteToSiteTestHarness : public HTTPIntegrationBase {
  public:
   explicit SiteToSiteTestHarness(bool isSecure, std::chrono::milliseconds waitTime = std::chrono::milliseconds{2000})
       : HTTPIntegrationBase(waitTime.count()), isSecure(isSecure) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
index 90d0eba..a296bea 100644
--- a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
+++ b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
@@ -34,8 +34,7 @@
 class HttpTestHarness : public HTTPIntegrationBase {
  public:
   HttpTestHarness() : HTTPIntegrationBase(4000) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/http-curl/tests/SiteToSiteRestTest.cpp b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
index f26da02..e0ee00a 100644
--- a/extensions/http-curl/tests/SiteToSiteRestTest.cpp
+++ b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
@@ -65,8 +65,7 @@ class SiteToSiteTestHarness : public HTTPIntegrationBase {
  public:
   explicit SiteToSiteTestHarness(bool isSecure)
       : isSecure(isSecure) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp b/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
index 026d3b5..5f838f8 100644
--- a/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
+++ b/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
@@ -39,8 +39,7 @@ class SiteToSiteTestHarness : public HTTPIntegrationBase {
  public:
   explicit SiteToSiteTestHarness(bool isSecure, std::chrono::milliseconds waitTime = std::chrono::milliseconds{1000})
       : HTTPIntegrationBase(waitTime.count()), isSecure(isSecure) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
index a77bf00..f817ca1 100644
--- a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
+++ b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
@@ -47,9 +47,6 @@ TEST_CASE("HTTPTestsWithNoResourceClaimPOST", "[httptest1]") {
 
   std::shared_ptr<core::Processor> logAttribute = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-
   std::shared_ptr<core::Processor> listenhttp = std::make_shared<org::apache::nifi::minifi::processors::ListenHTTP>("listenhttp");
   listenhttp->initialize();
 
@@ -168,9 +165,6 @@ TEST_CASE("HTTPTestsWithResourceClaimPOST", "[httptest1]") {
 
   std::shared_ptr<core::Processor> logAttribute = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-
   std::shared_ptr<core::Processor> listenhttp = std::make_shared<org::apache::nifi::minifi::processors::ListenHTTP>("listenhttp");
   listenhttp->initialize();
 
diff --git a/extensions/pdh/tests/PerformanceDataMonitorTests.cpp b/extensions/pdh/tests/PerformanceDataMonitorTests.cpp
index cb49bab..2508668 100644
--- a/extensions/pdh/tests/PerformanceDataMonitorTests.cpp
+++ b/extensions/pdh/tests/PerformanceDataMonitorTests.cpp
@@ -37,7 +37,7 @@ class PerformanceDataMonitorTester {
  public:
   PerformanceDataMonitorTester() {
     LogTestController::getInstance().setTrace<TestPlan>();
-    dir_ = utils::createTempDir(&test_controller_);
+    dir_ = test_controller_.createTempDirectory();
     plan_ = test_controller_.createPlan();
     performance_monitor_ = plan_->addProcessor("PerformanceDataMonitor", "pdhsys");
     putfile_ = plan_->addProcessor("PutFile", "putfile", core::Relationship("success", "description"), true);
diff --git a/extensions/sftp/tests/FetchSFTPTests.cpp b/extensions/sftp/tests/FetchSFTPTests.cpp
index ffdc434..84b6f05 100644
--- a/extensions/sftp/tests/FetchSFTPTests.cpp
+++ b/extensions/sftp/tests/FetchSFTPTests.cpp
@@ -58,9 +58,7 @@
 
 class FetchSFTPTestsFixture {
  public:
-  FetchSFTPTestsFixture()
-  : src_dir(strdup("/var/tmp/sftps.XXXXXX"))
-  , dst_dir(strdup("/var/tmp/sftpd.XXXXXX")) {
+  FetchSFTPTestsFixture() {
     LogTestController::getInstance().setTrace<TestPlan>();
     LogTestController::getInstance().setDebug<minifi::FlowController>();
     LogTestController::getInstance().setDebug<minifi::SchedulingAgent>();
@@ -74,18 +72,15 @@ class FetchSFTPTestsFixture {
     LogTestController::getInstance().setDebug<processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
-    // Create temporary directories
-    testController.createTempDirectory(src_dir);
-    REQUIRE(src_dir != nullptr);
-    testController.createTempDirectory(dst_dir);
-    REQUIRE(dst_dir != nullptr);
+    REQUIRE_FALSE(src_dir.empty());
+    REQUIRE_FALSE(dst_dir.empty());
+    REQUIRE(plan);
 
     // Start SFTP server
     sftp_server = std::unique_ptr<SFTPTestServer>(new SFTPTestServer(src_dir));
     REQUIRE(true == sftp_server->start());
 
     // Build MiNiFi processing graph
-    plan = testController.createPlan();
     generate_flow_file = plan->addProcessor(
         "GenerateFlowFile",
         "GenerateFlowFile");
@@ -126,14 +121,12 @@ class FetchSFTPTestsFixture {
     plan->setProperty(fetch_sftp, "Use Compression", "false");
 
     // Configure PutFile processor
-    plan->setProperty(put_file, "Directory", std::string(dst_dir) + "/${path}");
+    plan->setProperty(put_file, "Directory", dst_dir + "/${path}");
     plan->setProperty(put_file, "Conflict Resolution Strategy", processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_FAIL);
     plan->setProperty(put_file, "Create Missing Directories", "true");
   }
 
   virtual ~FetchSFTPTestsFixture() {
-    free(src_dir);
-    free(dst_dir);
     LogTestController::getInstance().reset();
   }
 
@@ -192,11 +185,11 @@ class FetchSFTPTestsFixture {
   }
 
  protected:
-  char *src_dir;
-  char *dst_dir;
-  std::unique_ptr<SFTPTestServer> sftp_server;
   TestController testController;
-  std::shared_ptr<TestPlan> plan;
+  std::string src_dir = testController.createTempDirectory();
+  std::string dst_dir = testController.createTempDirectory();
+  std::shared_ptr<TestPlan> plan = testController.createPlan();
+  std::unique_ptr<SFTPTestServer> sftp_server;
   std::shared_ptr<core::Processor> generate_flow_file;
   std::shared_ptr<core::Processor> update_attribute;
   std::shared_ptr<core::Processor> fetch_sftp;
@@ -262,7 +255,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP fetch non-readable file", "[F
   plan->setProperty(fetch_sftp, "Remote File", "nifi_test/tstFile.ext");
 
   createFile("nifi_test/tstFile.ext", "Test content 1");
-  REQUIRE(0 == chmod((std::string(src_dir) + "/vfs/nifi_test/tstFile.ext").c_str(), 0000));
+  REQUIRE(0 == chmod((src_dir + "/vfs/nifi_test/tstFile.ext").c_str(), 0000));
 
   testController.runSession(plan, true);
 
@@ -317,7 +310,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Delete Fi
 
   createFile("nifi_test/tstFile.ext", "Test content 1");
   /* By making the parent directory non-writable we make it impossible do delete the source file */
-  REQUIRE(0 == chmod((std::string(src_dir) + "/vfs/nifi_test").c_str(), 0500));
+  REQUIRE(0 == chmod((src_dir + "/vfs/nifi_test").c_str(), 0500));
 
   testController.runSession(plan, true);
 
diff --git a/extensions/sftp/tests/ListSFTPTests.cpp b/extensions/sftp/tests/ListSFTPTests.cpp
index d59006b..25f9f45 100644
--- a/extensions/sftp/tests/ListSFTPTests.cpp
+++ b/extensions/sftp/tests/ListSFTPTests.cpp
@@ -58,8 +58,7 @@
 
 class ListSFTPTestsFixture {
  public:
-  explicit ListSFTPTestsFixture(const std::shared_ptr<minifi::Configure>& configuration = nullptr)
-      : src_dir(strdup("/var/tmp/sftps.XXXXXX")) {
+  explicit ListSFTPTestsFixture(const std::shared_ptr<minifi::Configure>& configuration = nullptr) {
     LogTestController::getInstance().setTrace<TestPlan>();
     LogTestController::getInstance().setDebug<minifi::FlowController>();
     LogTestController::getInstance().setDebug<minifi::SchedulingAgent>();
@@ -72,9 +71,7 @@ class ListSFTPTestsFixture {
     LogTestController::getInstance().setDebug<processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
-    // Create temporary directories
-    testController.createTempDirectory(src_dir);
-    REQUIRE(src_dir != nullptr);
+    REQUIRE_FALSE(src_dir.empty());
 
     // Start SFTP server
     sftp_server = std::unique_ptr<SFTPTestServer>(new SFTPTestServer(src_dir));
@@ -85,13 +82,11 @@ class ListSFTPTestsFixture {
   }
 
   virtual ~ListSFTPTestsFixture() {
-    free(src_dir);
     LogTestController::getInstance().reset();
   }
 
   void createPlan(utils::Identifier* list_sftp_uuid = nullptr, const std::shared_ptr<minifi::Configure>& configuration = nullptr) {
-    char format[] = "/var/tmp/gt.XXXXXX";
-    const std::string state_dir = plan == nullptr ? minifi::utils::createTempDir(&testController, format) : plan->getStateDir();
+    const std::string state_dir = plan == nullptr ? testController.createTempDirectory() : plan->getStateDir();
 
     log_attribute.reset();
     list_sftp.reset();
@@ -165,10 +160,10 @@ class ListSFTPTestsFixture {
   }
 
  protected:
-  char *src_dir;
-  std::unique_ptr<SFTPTestServer> sftp_server;
   TestController testController;
+  std::string src_dir = testController.createTempDirectory();
   std::shared_ptr<TestPlan> plan;
+  std::unique_ptr<SFTPTestServer> sftp_server;
   std::shared_ptr<core::Processor> list_sftp;
   std::shared_ptr<core::Processor> log_attribute;
 };
@@ -221,7 +216,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP list non-readable dir", "[ListS
     return;
   }
   createFileWithModificationTimeDiff("nifi_test/tstFile.ext", "Test content 1");
-  REQUIRE(0 == chmod((std::string(src_dir) + "/vfs/nifi_test").c_str(), 0000));
+  REQUIRE(0 == chmod((src_dir + "/vfs/nifi_test").c_str(), 0000));
 
   testController.runSession(plan, true);
 
@@ -236,7 +231,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP list one file writes attributes
 
   testController.runSession(plan, true);
 
-  auto file = std::string(src_dir) + "/vfs/nifi_test/tstFile.ext";
+  auto file = src_dir + "/vfs/nifi_test/tstFile.ext";
   auto mtime = utils::file::FileUtils::last_write_time(file);
   std::string mtime_str;
   REQUIRE(true == utils::timeutils::getDateTimeStr(mtime, mtime_str));
@@ -367,8 +362,8 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Path Filter Regex", "[ListSFTP]
 #ifndef WIN32
 TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Follow symlink false file symlink", "[ListSFTP][follow-symlink]") {
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
-  auto file1 = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
-  auto file2 = std::string(src_dir) + "/vfs/nifi_test/file2.ext";
+  auto file1 = src_dir + "/vfs/nifi_test/file1.ext";
+  auto file2 = src_dir + "/vfs/nifi_test/file2.ext";
   REQUIRE(0 == symlink(file1.c_str(), file2.c_str()));
 
   testController.runSession(plan, true);
@@ -383,8 +378,8 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Follow symlink true file symlin
   plan->setProperty(list_sftp, "Follow symlink", "true");
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
-  auto file1 = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
-  auto file2 = std::string(src_dir) + "/vfs/nifi_test/file2.ext";
+  auto file1 = src_dir + "/vfs/nifi_test/file1.ext";
+  auto file2 = src_dir + "/vfs/nifi_test/file2.ext";
   REQUIRE(0 == symlink(file1.c_str(), file2.c_str()));
 
   testController.runSession(plan, true);
@@ -399,8 +394,8 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Follow symlink false directory
   plan->setProperty(list_sftp, "Search Recursively", "true");
 
   createFileWithModificationTimeDiff("nifi_test/dir1/file1.ext", "Test content 1");
-  auto dir1 = std::string(src_dir) + "/vfs/nifi_test/dir1";
-  auto dir2 = std::string(src_dir) + "/vfs/nifi_test/dir2";
+  auto dir1 = src_dir + "/vfs/nifi_test/dir1";
+  auto dir2 = src_dir + "/vfs/nifi_test/dir2";
   REQUIRE(0 == symlink(dir1.c_str(), dir2.c_str()));
 
   testController.runSession(plan, true);
@@ -416,8 +411,8 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Follow symlink true directory s
   plan->setProperty(list_sftp, "Follow symlink", "true");
 
   createFileWithModificationTimeDiff("nifi_test/dir1/file1.ext", "Test content 1");
-  auto dir1 = std::string(src_dir) + "/vfs/nifi_test/dir1";
-  auto dir2 = std::string(src_dir) + "/vfs/nifi_test/dir2";
+  auto dir1 = src_dir + "/vfs/nifi_test/dir1";
+  auto dir2 = src_dir + "/vfs/nifi_test/dir2";
   REQUIRE(0 == symlink(dir1.c_str(), dir2.c_str()));
 
   testController.runSession(plan, true);
@@ -495,7 +490,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Timestamps one file an
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
 
-  auto file = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
+  auto file = src_dir + "/vfs/nifi_test/file1.ext";
   auto mtime = utils::file::FileUtils::last_write_time(file);
 
   testController.runSession(plan, true);
@@ -523,7 +518,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Timestamps one file ti
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
 
-  auto file = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
+  auto file = src_dir + "/vfs/nifi_test/file1.ext";
   auto mtime = utils::file::FileUtils::last_write_time(file);
 
   testController.runSession(plan, true);
@@ -760,7 +755,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities one file anot
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
 
-  auto file = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
+  auto file = src_dir + "/vfs/nifi_test/file1.ext";
   auto mtime = utils::file::FileUtils::last_write_time(file);
 
   testController.runSession(plan, true);
@@ -786,7 +781,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities one file time
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
 
-  auto file = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
+  auto file = src_dir + "/vfs/nifi_test/file1.ext";
   auto mtime = utils::file::FileUtils::last_write_time(file);
 
   testController.runSession(plan, true);
@@ -819,7 +814,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities one file size
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
 
-  auto file = std::string(src_dir) + "/vfs/nifi_test/file1.ext";
+  auto file = src_dir + "/vfs/nifi_test/file1.ext";
   auto mtime = utils::file::FileUtils::last_write_time(file);
 
   testController.runSession(plan, true);
diff --git a/extensions/sftp/tests/ListThenFetchSFTPTests.cpp b/extensions/sftp/tests/ListThenFetchSFTPTests.cpp
index f5155ec..e167c32 100644
--- a/extensions/sftp/tests/ListThenFetchSFTPTests.cpp
+++ b/extensions/sftp/tests/ListThenFetchSFTPTests.cpp
@@ -56,9 +56,7 @@
 
 class ListThenFetchSFTPTestsFixture {
  public:
-  ListThenFetchSFTPTestsFixture()
-  : src_dir(strdup("/var/tmp/sftps.XXXXXX"))
-  , dst_dir(strdup("/var/tmp/sftpd.XXXXXX")) {
+  ListThenFetchSFTPTestsFixture() {
     LogTestController::getInstance().setTrace<TestPlan>();
     LogTestController::getInstance().setDebug<minifi::FlowController>();
     LogTestController::getInstance().setDebug<minifi::SchedulingAgent>();
@@ -73,18 +71,15 @@ class ListThenFetchSFTPTestsFixture {
     LogTestController::getInstance().setDebug<processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
-    // Create temporary directories
-    testController.createTempDirectory(src_dir);
-    REQUIRE(src_dir != nullptr);
-    testController.createTempDirectory(dst_dir);
-    REQUIRE(dst_dir != nullptr);
+    REQUIRE_FALSE(src_dir.empty());
+    REQUIRE_FALSE(dst_dir.empty());
+    REQUIRE(plan);
 
     // Start SFTP server
     sftp_server = std::unique_ptr<SFTPTestServer>(new SFTPTestServer(src_dir));
     REQUIRE(true == sftp_server->start());
 
     // Build MiNiFi processing graph
-    plan = testController.createPlan();
     list_sftp = plan->addProcessor(
         "ListSFTP",
         "ListSFTP");
@@ -123,7 +118,7 @@ class ListThenFetchSFTPTestsFixture {
     plan->setProperty(list_sftp, "Minimum File Size", "0 B");
     plan->setProperty(list_sftp, "Target System Timestamp Precision", "Seconds");
     plan->setProperty(list_sftp, "Remote Path", "nifi_test/");
-    plan->setProperty(list_sftp, "State File", std::string(src_dir) + "/state");
+    plan->setProperty(list_sftp, "State File", src_dir + "/state");
 
     // Configure FetchSFTP processor
     plan->setProperty(fetch_sftp, "Hostname", "localhost");
@@ -142,14 +137,12 @@ class ListThenFetchSFTPTestsFixture {
     plan->setProperty(log_attribute, "FlowFiles To Log", "0");
 
     // Configure PutFile processor
-    plan->setProperty(put_file, "Directory", std::string(dst_dir) + "/${path}");
+    plan->setProperty(put_file, "Directory", dst_dir + "/${path}");
     plan->setProperty(put_file, "Conflict Resolution Strategy", processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_FAIL);
     plan->setProperty(put_file, "Create Missing Directories", "true");
   }
 
   virtual ~ListThenFetchSFTPTestsFixture() {
-    free(src_dir);
-    free(dst_dir);
     LogTestController::getInstance().reset();
   }
 
@@ -224,11 +217,11 @@ class ListThenFetchSFTPTestsFixture {
   }
 
  protected:
-  char *src_dir;
-  char *dst_dir;
-  std::unique_ptr<SFTPTestServer> sftp_server;
   TestController testController;
-  std::shared_ptr<TestPlan> plan;
+  std::string src_dir = testController.createTempDirectory();
+  std::string dst_dir = testController.createTempDirectory();
+  std::shared_ptr<TestPlan> plan = testController.createPlan();
+  std::unique_ptr<SFTPTestServer> sftp_server;
   std::shared_ptr<core::Processor> list_sftp;
   std::shared_ptr<core::Processor> fetch_sftp;
   std::shared_ptr<core::Processor> log_attribute;
diff --git a/extensions/sftp/tests/PutSFTPTests.cpp b/extensions/sftp/tests/PutSFTPTests.cpp
index 88fd07a..2449eb2 100644
--- a/extensions/sftp/tests/PutSFTPTests.cpp
+++ b/extensions/sftp/tests/PutSFTPTests.cpp
@@ -61,9 +61,7 @@ constexpr const char* PUBLIC_KEY_AUTH_ERROR_MESSAGE = "Failed to authenticate wi
 
 class PutSFTPTestsFixture {
  public:
-  PutSFTPTestsFixture()
-  : src_dir(strdup("/var/tmp/sftps.XXXXXX"))
-  , dst_dir(strdup("/var/tmp/sftpd.XXXXXX")) {
+  PutSFTPTestsFixture() {
     LogTestController::getInstance().setTrace<TestPlan>();
     LogTestController::getInstance().setDebug<minifi::FlowController>();
     LogTestController::getInstance().setDebug<minifi::SchedulingAgent>();
@@ -77,18 +75,15 @@ class PutSFTPTestsFixture {
     LogTestController::getInstance().setDebug<processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
-    // Create temporary directories
-    testController.createTempDirectory(src_dir);
-    REQUIRE(src_dir != nullptr);
-    testController.createTempDirectory(dst_dir);
-    REQUIRE(dst_dir != nullptr);
+    REQUIRE_FALSE(src_dir.empty());
+    REQUIRE_FALSE(dst_dir.empty());
+    REQUIRE(plan);
 
     // Start SFTP server
     sftp_server = std::unique_ptr<SFTPTestServer>(new SFTPTestServer(dst_dir));
     REQUIRE(true == sftp_server->start());
 
     // Build MiNiFi processing graph
-    plan = testController.createPlan();
     get_file = plan->addProcessor(
         "GetFile",
         "GetFile");
@@ -125,8 +120,6 @@ class PutSFTPTestsFixture {
   }
 
   virtual ~PutSFTPTestsFixture() {
-    free(src_dir);
-    free(dst_dir);
     LogTestController::getInstance().reset();
   }
 
@@ -206,11 +199,11 @@ class PutSFTPTestsFixture {
   }
 
  protected:
-  char *src_dir;
-  char *dst_dir;
-  std::unique_ptr<SFTPTestServer> sftp_server;
   TestController testController;
-  std::shared_ptr<TestPlan> plan;
+  std::string src_dir = testController.createTempDirectory();
+  std::string dst_dir = testController.createTempDirectory();
+  std::shared_ptr<TestPlan> plan = testController.createPlan();
+  std::unique_ptr<SFTPTestServer> sftp_server;
   std::shared_ptr<core::Processor> get_file;
   std::shared_ptr<core::Processor> put;
 };
@@ -735,14 +728,11 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP connection caching reaches limit"
 
   sftp_server.reset();
 
-  std::vector<std::vector<char>> dst_dirs;
   std::vector<std::unique_ptr<SFTPTestServer>> sftp_servers;
 
-  std::string tmp_dir_format("/var/tmp/sftpd.XXXXXX");
   for (size_t i = 0; i < 10; i++) {
-    dst_dirs.emplace_back(tmp_dir_format.data(), tmp_dir_format.data() + tmp_dir_format.size() + 1);
-    testController.createTempDirectory(dst_dirs.back().data());
-    sftp_servers.emplace_back(new SFTPTestServer(dst_dirs.back().data()));
+    std::string destination_dir = testController.createTempDirectory();
+    sftp_servers.emplace_back(new SFTPTestServer(destination_dir));
     REQUIRE(true == sftp_servers.back()->start());
     createFile(src_dir, "tstFile" + std::to_string(i) + ".ext", std::to_string(sftp_servers.back()->getPort()));
 
diff --git a/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp b/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp
index 4f221d9..22d26ea 100644
--- a/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp
+++ b/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp
@@ -55,8 +55,7 @@ class SecureSocketTest : public IntegrationBase {
  public:
   explicit SecureSocketTest(bool isSecure)
       : isSecure{ isSecure }, isRunning_{ false } {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/extensions/standard-processors/tests/integration/TailFileTest.cpp b/extensions/standard-processors/tests/integration/TailFileTest.cpp
index 7ecc4ac..44c045c 100644
--- a/extensions/standard-processors/tests/integration/TailFileTest.cpp
+++ b/extensions/standard-processors/tests/integration/TailFileTest.cpp
@@ -35,8 +35,7 @@
 class TailFileTestHarness : public IntegrationBase {
  public:
   TailFileTestHarness() : IntegrationBase(1000) {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
 
     statefile = dir + utils::file::FileUtils::get_separator();
     statefile += "statefile";
diff --git a/extensions/standard-processors/tests/unit/ExtractTextTests.cpp b/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
index 62cf147..f57db51 100644
--- a/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
+++ b/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
@@ -64,9 +64,7 @@ TEST_CASE("Test usage of ExtractText", "[extracttextTest]") {
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-  char dirtemplate[] = "/tmp/gt.XXXXXX";
-
-  auto temp_dir = testController.createTempDirectory(dirtemplate);
+  auto temp_dir = testController.createTempDirectory();
   REQUIRE(!temp_dir.empty());
   std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getfileCreate2");
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), temp_dir);
@@ -134,9 +132,7 @@ TEST_CASE("Test usage of ExtractText in regex mode", "[extracttextRegexTest]") {
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-  char dirtemplate[] = "/tmp/gt.XXXXXX";
-
-  auto dir = testController.createTempDirectory(dirtemplate);
+  auto dir = testController.createTempDirectory();
   REQUIRE(!dir.empty());
   std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getfileCreate2");
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
diff --git a/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp b/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp
index 8319d97..5dd99c9 100644
--- a/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp
@@ -32,8 +32,7 @@ TEST_CASE("GenerateFlowFileTest", "[generateflowfiletest]") {
   LogTestController::getInstance().setTrace<TestPlan>();
   LogTestController::getInstance().setWarn<minifi::processors::GenerateFlowFile>();
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
 
@@ -78,8 +77,7 @@ TEST_CASE("GenerateFlowFileWithNonUniqueBinaryData", "[generateflowfiletest]") {
   LogTestController::getInstance().setTrace<TestPlan>();
   LogTestController::getInstance().setWarn<minifi::processors::GenerateFlowFile>();
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
 
@@ -131,8 +129,7 @@ TEST_CASE("GenerateFlowFileTestEmpty", "[generateemptyfiletest]") {
   TestController testController;
   LogTestController::getInstance().setTrace<TestPlan>();
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
 
@@ -169,8 +166,7 @@ TEST_CASE("GenerateFlowFileCustomTextTest", "[generateflowfiletest]") {
   TestController test_controller;
   LogTestController::getInstance().setTrace<TestPlan>();
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = test_controller.createTempDirectory(format);
+  auto dir = test_controller.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = test_controller.createPlan();
 
@@ -207,8 +203,7 @@ TEST_CASE("GenerateFlowFileCustomTextEmptyTest", "[generateflowfiletest]") {
   TestController test_controller;
   LogTestController::getInstance().setTrace<TestPlan>();
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = test_controller.createTempDirectory(format);
+  auto dir = test_controller.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = test_controller.createPlan();
 
diff --git a/extensions/standard-processors/tests/unit/GetFileTests.cpp b/extensions/standard-processors/tests/unit/GetFileTests.cpp
index 1431b18..5f7671d 100644
--- a/extensions/standard-processors/tests/unit/GetFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/GetFileTests.cpp
@@ -53,7 +53,7 @@ GetFileTestController::GetFileTestController() {
   test_plan_ = test_controller_.createPlan();
   auto repo = std::make_shared<TestRepository>();
 
-  auto temp_dir = utils::createTempDir(&test_controller_);
+  auto temp_dir = test_controller_.createTempDirectory();
   REQUIRE(!temp_dir.empty());
 
   // Define test input file
@@ -149,7 +149,7 @@ TEST_CASE("GetFileHiddenPropertyCheck", "[getFileProperty]") {
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
   auto plan = testController.createPlan();
 
-  auto temp_path = minifi::utils::createTempDir(&testController);
+  auto temp_path = testController.createTempDirectory();
   std::string in_file(temp_path + utils::file::FileUtils::get_separator() + "testfifo");
   std::string hidden_in_file(temp_path + utils::file::FileUtils::get_separator() + ".testfifo");
 
diff --git a/extensions/standard-processors/tests/unit/HashContentTest.cpp b/extensions/standard-processors/tests/unit/HashContentTest.cpp
index cd677ea..cfcee45 100644
--- a/extensions/standard-processors/tests/unit/HashContentTest.cpp
+++ b/extensions/standard-processors/tests/unit/HashContentTest.cpp
@@ -68,9 +68,7 @@ TEST_CASE("Test usage of ExtractText", "[extracttextTest]") {
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-  char dir[] = "/tmp/gt.XXXXXX";
-
-  auto tempdir = testController.createTempDirectory(dir);
+  auto tempdir = testController.createTempDirectory();
   REQUIRE(!tempdir.empty());
 
   std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getfileCreate2");
@@ -140,7 +138,7 @@ TEST_CASE("TestingFailOnEmptyProperty", "[HashContentPropertiesCheck]") {
   LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::HashContent>();
   std::shared_ptr<TestPlan> plan = testController.createPlan();
 
-  auto tempdir = minifi::utils::createTempDir(&testController);
+  auto tempdir = testController.createTempDirectory();
   std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getfileCreate2");
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), tempdir);
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::KeepSourceFile.getName(), "true");
diff --git a/extensions/standard-processors/tests/unit/ProcessorTests.cpp b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
index 609a669..960655b 100644
--- a/extensions/standard-processors/tests/unit/ProcessorTests.cpp
+++ b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
@@ -64,8 +64,7 @@ TEST_CASE("Test GetFileMultiple", "[getfileCreate3]") {
   std::shared_ptr<core::Repository> test_repo = std::make_shared<TestRepository>();
   std::shared_ptr<TestRepository> repo = std::static_pointer_cast<TestRepository>(test_repo);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   utils::Identifier processoruuid = processor->getUUID();
   REQUIRE(processoruuid);
@@ -149,8 +148,7 @@ TEST_CASE("Test GetFile Ignore", "[getfileCreate3]") {
   std::shared_ptr<core::Repository> test_repo = std::make_shared<TestRepository>();
   std::shared_ptr<TestRepository> repo = std::static_pointer_cast<TestRepository>(test_repo);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  const auto dir = testController.createTempDirectory(format);
+  const auto dir = testController.createTempDirectory();
 
   utils::Identifier processoruuid = processor->getUUID();
   REQUIRE(processoruuid);
@@ -295,8 +293,7 @@ TEST_CASE("LogAttributeTest", "[getfileCreate3]") {
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   testController.runSession(plan, false);
@@ -339,8 +336,7 @@ TEST_CASE("LogAttributeTestInvalid", "[TestLogAttribute]") {
 
   auto loggattr = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::BatchSize.getName(), "1");
@@ -358,8 +354,7 @@ void testMultiplesLogAttribute(int fileCount, int flowsToLog, std::string verify
 
   auto loggattr = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   auto flowsToLogStr = std::to_string(flowsToLog);
   if (verifyStringFlowsLogged.empty())
@@ -426,9 +421,8 @@ TEST_CASE("Test Find file", "[getfileCreate3]") {
   std::shared_ptr<core::Processor> processorReport = std::make_shared<org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask>(
       minifi::io::StreamFactory::getInstance(std::make_shared<org::apache::nifi::minifi::Configure>()), std::make_shared<org::apache::nifi::minifi::Configure>());
   plan->addProcessor(processorReport, "reporter", core::Relationship("success", "description"), false);
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
 
+  auto dir = testController.createTempDirectory();
   plan->setProperty(processor, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   testController.runSession(plan, false);
   auto records = plan->getProvenanceRecords();
diff --git a/extensions/standard-processors/tests/unit/PutFileTests.cpp b/extensions/standard-processors/tests/unit/PutFileTests.cpp
index acd3386..c5c1a3d 100644
--- a/extensions/standard-processors/tests/unit/PutFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/PutFileTests.cpp
@@ -65,10 +65,8 @@ TEST_CASE("PutFileTest", "[getfileputpfile]") {
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2);
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory();
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
 
@@ -130,10 +128,8 @@ TEST_CASE("PutFileTestFileExists", "[getfileputpfile]") {
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("failure", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2);
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory();
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
 
@@ -195,10 +191,8 @@ TEST_CASE("PutFileTestFileExistsIgnore", "[getfileputpfile]") {
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2);
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory();
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(), "ignore");
@@ -263,10 +257,8 @@ TEST_CASE("PutFileTestFileExistsReplace", "[getfileputpfile]") {
 
   plan->addProcessor("LogAttribute", "logattribute", { core::Relationship("success", "d"), core::Relationship("failure", "d") }, true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2);
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory();
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(), "replace");
@@ -342,10 +334,8 @@ TEST_CASE("PutFileMaxFileCountTest", "[getfileputpfilemaxcount]") {
 
   plan->addProcessor("LogAttribute", "logattribute", { core::Relationship("success", "d"), core::Relationship("failure", "d") }, true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  const auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2);
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory();
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::BatchSize.getName(), "1");
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
@@ -409,10 +399,8 @@ TEST_CASE("PutFileEmptyTest", "[EmptyFilePutTest]") {
 
   std::shared_ptr<core::Processor> putfile = plan->addProcessor("PutFile", "putfile", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2);
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory();
 
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
@@ -444,10 +432,8 @@ TEST_CASE("TestPutFilePermissions", "[PutFilePermissions]") {
 
   std::shared_ptr<core::Processor> putfile = plan->addProcessor("PutFile", "putfile", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
-  char format2[] = "/tmp/ft.XXXXXX";
-  auto putfiledir = testController.createTempDirectory(format2) + utils::file::FileUtils::get_separator() + "test_dir";
+  const auto dir = testController.createTempDirectory();
+  const auto putfiledir = testController.createTempDirectory() + utils::file::FileUtils::get_separator() + "test_dir";
 
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
@@ -484,9 +470,9 @@ TEST_CASE("PutFileCreateDirectoryTest", "[PutFileProperties]") {
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
   // Define Directory
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   // Defining a sub directory
-  auto putfiledir = minifi::utils::createTempDir(&testController) + utils::file::FileUtils::get_separator() + "test_dir";
+  auto putfiledir = testController.createTempDirectory() + utils::file::FileUtils::get_separator() + "test_dir";
 
   plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), putfiledir);
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
diff --git a/extensions/standard-processors/tests/unit/RetryFlowFileTests.cpp b/extensions/standard-processors/tests/unit/RetryFlowFileTests.cpp
index 8aa6641..ec27b1a 100644
--- a/extensions/standard-processors/tests/unit/RetryFlowFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/RetryFlowFileTests.cpp
@@ -35,7 +35,6 @@
 #include "utils/TestUtils.h"
 
 namespace {
-using org::apache::nifi::minifi::utils::createTempDir;
 using org::apache::nifi::minifi::utils::optional;
 namespace FileUtils = org::apache::nifi::minifi::utils::file;
 
@@ -86,8 +85,6 @@ class RetryFlowFileTest {
       optional<bool> processor_uuid_matches_flowfile) {
     reInitialize();
 
-    const std::string output_dir = createTempDir(testController_.get());
-
     // Relationships
     const core::Relationship success         {"success", "description"};
     const core::Relationship retry           {RetryFlowFile::Retry};
@@ -140,9 +137,9 @@ class RetryFlowFileTest {
     plan_->setProperty(retryflowfile, "retries_exceeded_property_key_1", "retries_exceeded_property_value_1", true);
     plan_->setProperty(retryflowfile, "retries_exceeded_property_key_2", "retries_exceeded_property_value_2", true);
 
-    const std::string retry_dir            = createTempDir(testController_.get());
-    const std::string retries_exceeded_dir = createTempDir(testController_.get());
-    const std::string failure_dir          = createTempDir(testController_.get());
+    const std::string retry_dir            = testController_->createTempDirectory();
+    const std::string retries_exceeded_dir = testController_->createTempDirectory();
+    const std::string failure_dir          = testController_->createTempDirectory();
 
     plan_->setProperty(putfile_on_retry, PutFile::Directory.getName(), retry_dir);
     plan_->setProperty(putfile_on_retries_exceeded, PutFile::Directory.getName(), retries_exceeded_dir);
diff --git a/extensions/standard-processors/tests/unit/TailFileTests.cpp b/extensions/standard-processors/tests/unit/TailFileTests.cpp
index e08840a..b76beae 100644
--- a/extensions/standard-processors/tests/unit/TailFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/TailFileTests.cpp
@@ -89,7 +89,7 @@ TEST_CASE("TailFile reads the file until the first delimiter", "[simple]") {
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
 
@@ -129,7 +129,7 @@ TEST_CASE("TailFile picks up the second line if a delimiter is written between r
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
 
@@ -172,7 +172,7 @@ TEST_CASE("TailFile re-reads the file if the state is deleted between runs", "[s
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
 
@@ -212,7 +212,7 @@ TEST_CASE("TailFile picks up the state correctly if it is rewritten between runs
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
 
@@ -280,7 +280,7 @@ TEST_CASE("TailFile converts the old-style state file to the new-style state", "
   auto logattribute = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
   plan->setProperty(logattribute, org::apache::nifi::minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream state_file;
   state_file << dir << utils::file::FileUtils::get_separator() << STATE_FILE;
 
@@ -389,7 +389,7 @@ TEST_CASE("TailFile picks up the new File to Tail if it is changed between runs"
   std::shared_ptr<core::Processor> log_attribute = plan->addProcessor("LogAttribute", "log_attribute", core::Relationship("success", "description"), true);
   plan->setProperty(log_attribute, org::apache::nifi::minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
-  std::string directory = minifi::utils::createTempDir(&testController);
+  std::string directory = testController.createTempDirectory();
   std::string first_test_file = createTempFile(directory, "first.log", "my first log line\n");
   plan->setProperty(tail_file, org::apache::nifi::minifi::processors::TailFile::FileName.getName(), first_test_file);
   testController.runSession(plan, true);
@@ -422,7 +422,7 @@ TEST_CASE("TailFile picks up the new File to Tail if it is changed between runs
   LogTestController::getInstance().setDebug<minifi::processors::TailFile>();
   LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
 
-  std::string directory = minifi::utils::createTempDir(&testController);
+  std::string directory = testController.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<core::Processor> tail_file = plan->addProcessor("TailFile", "tail_file");
@@ -478,7 +478,7 @@ TEST_CASE("TailFile finds the single input file in both Single and Multiple mode
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
   std::ofstream tmpfile;
@@ -515,7 +515,7 @@ TEST_CASE("TailFile picks up new files created between runs", "[multiple_file]")
   LogTestController::getInstance().setDebug<core::ProcessSession>();
   LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfile");
@@ -550,7 +550,7 @@ TEST_CASE("TailFile can handle input files getting removed", "[multiple_file]")
   LogTestController::getInstance().setDebug<core::ProcessSession>();
   LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfile");
@@ -605,7 +605,7 @@ TEST_CASE("TailFile processes a very long line correctly", "[simple]") {
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
   std::ofstream tmpfile;
@@ -681,7 +681,7 @@ TEST_CASE("TailFile processes a long line followed by multiple newlines correctl
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::stringstream temp_file;
   temp_file << dir << utils::file::FileUtils::get_separator() << TMP_FILE;
   std::ofstream tmpfile;
@@ -774,7 +774,7 @@ TEST_CASE("TailFile onSchedule throws in Multiple mode if the Base Directory doe
   }
 
   SECTION("Base Directory is set and it exists") {
-    std::string directory = minifi::utils::createTempDir(&testController);
+    std::string directory = testController.createTempDirectory();
 
     plan->setProperty(tailfile, processors::TailFile::BaseDirectory.getName(), directory);
     plan->setProperty(tailfile, processors::TailFile::LookupFrequency.getName(), "0 sec");
@@ -793,7 +793,7 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
   auto plan = testController.createPlan();
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::string in_file = dir + utils::file::FileUtils::get_separator() + "testfifo.txt";
 
   std::ofstream in_file_stream(in_file, std::ios::out | std::ios::binary);
@@ -859,7 +859,7 @@ TEST_CASE("TailFile finds and finishes multiple rotated files and continues with
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
   auto plan = testController.createPlan();
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::string test_file = dir + utils::file::FileUtils::get_separator() + "fruits.log";
 
   std::ofstream test_file_stream_0(test_file, std::ios::binary);
@@ -916,7 +916,7 @@ TEST_CASE("TailFile ignores old rotated files", "[rotation]") {
   LogTestController::getInstance().setDebug<core::ProcessSession>();
   LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
 
-  const std::string dir = minifi::utils::createTempDir(&testController);
+  const std::string dir = testController.createTempDirectory();
   std::string log_file_name = dir + utils::file::FileUtils::get_separator() + "test.log";
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
@@ -961,7 +961,7 @@ TEST_CASE("TailFile rotation works with multiple input files", "[rotation][multi
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
   auto plan = testController.createPlan();
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
 
   createTempFile(dir, "fruit.log", "apple\npear\nbanana\n");
   createTempFile(dir, "animal.log", "bear\ngiraffe\n");
@@ -1025,7 +1025,7 @@ TEST_CASE("TailFile handles the Rolling Filename Pattern property correctly", "[
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
   auto plan = testController.createPlan();
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   std::string test_file = createTempFile(dir, "test.log", "some stuff\n");
 
   // Build MiNiFi processing graph
@@ -1087,16 +1087,13 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-
-  char log_dir_format[] = "/var/tmp/gt.XXXXXX";
-  auto log_dir = minifi::utils::createTempDir(&testController, log_dir_format);
+  auto log_dir = testController.createTempDirectory();
 
   std::string test_file_1 = createTempFile(log_dir, "test.1", "line one\nline two\nline three\n");  // old rotated file
   std::this_thread::sleep_for(std::chrono::seconds(1));
   std::string test_file = createTempFile(log_dir, "test.log", "line four\nline five\nline six\n");  // current log file
 
-  char state_dir_format[] = "/var/tmp/gt.XXXXXX";
-  auto state_dir = minifi::utils::createTempDir(&testController, state_dir_format);
+  auto state_dir = testController.createTempDirectory();
 
   utils::Identifier tail_file_uuid = utils::IdGenerator::getIdGenerator()->generate();
   const core::Relationship success_relationship{"success", "everything is fine"};
@@ -1146,7 +1143,7 @@ TEST_CASE("TailFile yields if no work is done", "[yield]") {
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-  auto temp_directory = minifi::utils::createTempDir(&testController);
+  auto temp_directory = testController.createTempDirectory();
   auto plan = testController.createPlan();
   auto tail_file = plan->addProcessor("TailFile", "Tail");
   plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
@@ -1219,7 +1216,7 @@ TEST_CASE("TailFile yields if no work is done on any files", "[yield][multiple_f
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-  auto temp_directory = minifi::utils::createTempDir(&testController);
+  auto temp_directory = testController.createTempDirectory();
   auto plan = testController.createPlan();
   auto tail_file = plan->addProcessor("TailFile", "Tail");
   plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
@@ -1276,7 +1273,7 @@ TEST_CASE("TailFile doesn't yield if work was done on rotated files only", "[yie
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-  auto temp_directory = minifi::utils::createTempDir(&testController);
+  auto temp_directory = testController.createTempDirectory();
   std::string full_file_name = createTempFile(temp_directory, "test.log", "stuff\n");
 
   auto plan = testController.createPlan();
@@ -1335,7 +1332,7 @@ TEST_CASE("TailFile handles the Delimiter setting correctly", "[delimiter]") {
     LogTestController::getInstance().setTrace<processors::TailFile>();
     LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-    auto temp_directory = minifi::utils::createTempDir(&testController);
+    auto temp_directory = testController.createTempDirectory();
 
     std::string delimiter = test_case.second;
     std::string full_file_name = createTempFile(temp_directory, "test.log", "one" + delimiter + "two" + delimiter);
@@ -1369,7 +1366,7 @@ TEST_CASE("TailFile handles Unix/Windows line endings correctly", "[simple]") {
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-  auto temp_directory = minifi::utils::createTempDir(&testController);
+  auto temp_directory = testController.createTempDirectory();
   std::string full_file_name = createTempFile(temp_directory, "test.log", "line1\nline two\n", std::ios::out);  // write in text mode
 
   auto plan = testController.createPlan();
@@ -1399,7 +1396,7 @@ TEST_CASE("TailFile can tail all files in a directory recursively", "[multiple]"
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-  std::string base_directory = minifi::utils::createTempDir(&testController);
+  std::string base_directory = testController.createTempDirectory();
   std::string directory1 = base_directory + utils::file::FileUtils::get_separator() + "one";
   utils::file::FileUtils::create_dir(directory1);
   std::string directory11 = directory1 + utils::file::FileUtils::get_separator() + "one_child";
@@ -1450,7 +1447,7 @@ TEST_CASE("TailFile interprets the lookup frequency property correctly", "[multi
   LogTestController::getInstance().setTrace<processors::TailFile>();
   LogTestController::getInstance().setTrace<processors::LogAttribute>();
 
-  std::string directory = minifi::utils::createTempDir(&testController);
+  std::string directory = testController.createTempDirectory();
   createTempFile(directory, "test.red.log", "cherry\n");
 
   auto plan = testController.createPlan();
@@ -1525,7 +1522,7 @@ TEST_CASE("TailFile reads from a single file when Initial Start Position is set"
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
   std::shared_ptr<core::Processor> logattribute = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   createTempFile(dir, ROLLED_OVER_TMP_FILE, ROLLED_OVER_TAIL_DATA);
   auto temp_file_path = createTempFile(dir, TMP_FILE, NEWLINE_FILE);
 
@@ -1602,7 +1599,7 @@ TEST_CASE("TailFile reads from a single file when Initial Start Position is set
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
   std::shared_ptr<core::Processor> logattribute = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   auto temp_file_path = createTempFile(dir, TMP_FILE, NEWLINE_FILE);
 
   plan->setProperty(logattribute, org::apache::nifi::minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
@@ -1641,7 +1638,7 @@ TEST_CASE("TailFile reads multiple files when Initial Start Position is set", "[
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
   std::shared_ptr<core::Processor> logattribute = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   createTempFile(dir, ROLLED_OVER_TMP_FILE, ROLLED_OVER_TAIL_DATA);
   createTempFile(dir, TMP_FILE, NEWLINE_FILE);
   const std::string TMP_FILE_2_DATA = "tmp_file_2_new_line_data\n";
@@ -1730,7 +1727,7 @@ TEST_CASE("Initial Start Position is set to invalid or empty value", "[initialSt
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
   std::shared_ptr<core::Processor> logattribute = plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  auto dir = minifi::utils::createTempDir(&testController);
+  auto dir = testController.createTempDirectory();
   createTempFile(dir, ROLLED_OVER_TMP_FILE, ROLLED_OVER_TAIL_DATA);
   auto temp_file_path = createTempFile(dir, TMP_FILE, NEWLINE_FILE);
 
diff --git a/extensions/windows-event-log/tests/CWELTestUtils.h b/extensions/windows-event-log/tests/CWELTestUtils.h
index 46988ca..1457905 100644
--- a/extensions/windows-event-log/tests/CWELTestUtils.h
+++ b/extensions/windows-event-log/tests/CWELTestUtils.h
@@ -56,7 +56,7 @@ class OutputFormatTestController : public TestController {
       test_plan->setProperty(cwel_processor, ConsumeWindowsEventLog::JSONFormat.getName(), json_format_.value());
     }
 
-    auto dir = utils::createTempDir(this);
+    auto dir = createTempDirectory();
 
     auto put_file = test_plan->addProcessor("PutFile", "putFile", Success, true);
     test_plan->setProperty(put_file, PutFile::Directory.getName(), dir);
diff --git a/libminifi/include/utils/TestUtils.h b/libminifi/include/utils/TestUtils.h
index 88c8d43..38a2700 100644
--- a/libminifi/include/utils/TestUtils.h
+++ b/libminifi/include/utils/TestUtils.h
@@ -33,19 +33,6 @@ namespace nifi {
 namespace minifi {
 namespace utils {
 
-std::string createTempDir(TestController* testController, char* format = nullptr) {
-  std::string temp_dir;
-  if (format == nullptr) {
-    char dirtemplate[] = "/tmp/gt.XXXXXX";
-    temp_dir = testController->createTempDirectory(dirtemplate);
-  } else {
-    temp_dir = testController->createTempDirectory(format);
-  }
-  REQUIRE(!temp_dir.empty());
-  REQUIRE(file::FileUtils::is_directory(temp_dir.c_str()));
-  return temp_dir;
-}
-
 std::string putFileToDir(const std::string& dir_path, const std::string& file_name, const std::string& content) {
   std::string file_path(file::FileUtils::concat_path(dir_path, file_name));
   std::ofstream out_file(file_path, std::ios::binary | std::ios::out);
@@ -55,12 +42,6 @@ std::string putFileToDir(const std::string& dir_path, const std::string& file_na
   return file_path;
 }
 
-std::string createTempDirWithFile(TestController* testController, const std::string& file_name, const std::string& content) {
-  std::string temp_dir = createTempDir(testController);
-  putFileToDir(temp_dir, file_name, content);
-  return temp_dir;
-}
-
 std::string getFileContent(const std::string& file_name) {
   std::ifstream file_handle(file_name, std::ios::binary | std::ios::in);
   REQUIRE(file_handle.is_open());
diff --git a/libminifi/test/TestBase.h b/libminifi/test/TestBase.h
index fc254bb..991986c 100644
--- a/libminifi/test/TestBase.h
+++ b/libminifi/test/TestBase.h
@@ -436,22 +436,13 @@ class TestController {
     }
   }
 
-  /**
-   * format will be changed by mkdtemp, so don't rely on a shared variable.
-   */
-  std::string createTempDirectory(char *format) {
+  std::string createTempDirectory() {
+    char format[] = "/var/tmp/nifi-minifi-cpp.test.XXXXXX";
     const auto dir = utils::file::FileUtils::create_temp_directory(format);
     directories.push_back(dir);
     return dir;
   }
 
-  template<size_t N>
-  utils::Path createTempDirectory(const char (&format)[N]) {
-    char buffer[N];
-    std::memcpy(buffer, format, N);
-    return utils::Path{createTempDirectory(static_cast<char*>(buffer))};
-  }
-
  protected:
   std::shared_ptr<minifi::state::response::FlowVersion> flow_version_;
   LogTestController &log;
diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp
index de1a774..fc485ec 100644
--- a/libminifi/test/archive-tests/CompressContentTests.cpp
+++ b/libminifi/test/archive-tests/CompressContentTests.cpp
@@ -206,8 +206,7 @@ class CompressTestController : public CompressDecompressionTestController {
 
  public:
   CompressTestController() {
-    char CompressionFormat[] = "/tmp/test.XXXXXX";
-    tempDir_ = get_global_controller().createTempDirectory(CompressionFormat);
+    tempDir_ = get_global_controller().createTempDirectory();
     REQUIRE(!tempDir_.empty());
     raw_content_path_ = utils::file::FileUtils::concat_path(tempDir_, "minifi-expect-compresscontent.txt");
     compressed_content_path_ = utils::file::FileUtils::concat_path(tempDir_, "minifi-compresscontent");
@@ -559,12 +558,10 @@ TEST_CASE_METHOD(TestController, "RawGzipCompressionDecompression", "[compressfi
   LogTestController::getInstance().setTrace<processors::PutFile>();
 
   // Create temporary directories
-  char format_src[] = "/tmp/archives.XXXXXX";
-  std::string src_dir = createTempDirectory(format_src);
+  std::string src_dir = createTempDirectory();
   REQUIRE(!src_dir.empty());
 
-  char format_dst[] = "/tmp/archived.XXXXXX";
-  std::string dst_dir = createTempDirectory(format_dst);
+  std::string dst_dir = createTempDirectory();
   REQUIRE(!dst_dir.empty());
 
   // Define files
diff --git a/libminifi/test/archive-tests/FocusArchiveTests.cpp b/libminifi/test/archive-tests/FocusArchiveTests.cpp
index 9435bf6..b2d91e7 100644
--- a/libminifi/test/archive-tests/FocusArchiveTests.cpp
+++ b/libminifi/test/archive-tests/FocusArchiveTests.cpp
@@ -72,9 +72,9 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
     std::shared_ptr<TestPlan> plan = testController.createPlan();
     std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-    std::string dir1 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
-    std::string dir2 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
-    std::string dir3 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
+    std::string dir1 = testController.createTempDirectory();
+    std::string dir2 = testController.createTempDirectory();
+    std::string dir3 = testController.createTempDirectory();
 
     REQUIRE(!dir1.empty());
     REQUIRE(!dir2.empty());
diff --git a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
index ff83482..906cc6e 100644
--- a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
+++ b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
@@ -59,8 +59,8 @@ bool run_archive_test(OrderedTestArchive input_archive, OrderedTestArchive outpu
     std::shared_ptr<TestPlan> plan = testController.createPlan();
     std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-    std::string dir1 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
-    std::string dir2 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
+    std::string dir1 = testController.createTempDirectory();
+    std::string dir2 = testController.createTempDirectory();
 
     REQUIRE(!dir1.empty());
     REQUIRE(!dir2.empty());
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp
index a0408ab..36680ec 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -52,8 +52,7 @@ void init_file_paths() {
   struct Initializer {
     Initializer() {
       static TestController global_controller;
-      char format[] = "/tmp/test.XXXXXX";
-      std::string tempDir = global_controller.createTempDirectory(format);
+      std::string tempDir = global_controller.createTempDirectory();
       FLOW_FILE = utils::file::FileUtils::concat_path(tempDir, "minifi-mergecontent");
       EXPECT_MERGE_CONTENT_FIRST = utils::file::FileUtils::concat_path(tempDir, "minifi-expect-mergecontent1.txt");
       EXPECT_MERGE_CONTENT_SECOND = utils::file::FileUtils::concat_path(tempDir, "minifi-expect-mergecontent2.txt");
diff --git a/libminifi/test/aws-tests/FetchS3ObjectTests.cpp b/libminifi/test/aws-tests/FetchS3ObjectTests.cpp
index dadb85d..844f33d 100644
--- a/libminifi/test/aws-tests/FetchS3ObjectTests.cpp
+++ b/libminifi/test/aws-tests/FetchS3ObjectTests.cpp
@@ -37,7 +37,7 @@ class FetchS3ObjectTestsFixture : public FlowProcessorS3TestsFixture<minifi::aws
       "PutFile",
       core::Relationship("success", "d"),
       true);
-    output_dir = createTempDir(&test_controller);
+    output_dir = test_controller.createTempDirectory();
     plan->setProperty(putfile, "Directory", output_dir);
   }
 
diff --git a/libminifi/test/aws-tests/S3TestsFixture.h b/libminifi/test/aws-tests/S3TestsFixture.h
index ab21c55..4f9aa75 100644
--- a/libminifi/test/aws-tests/S3TestsFixture.h
+++ b/libminifi/test/aws-tests/S3TestsFixture.h
@@ -34,8 +34,6 @@
 #include "utils/TestUtils.h"
 #include "AWSCredentialsProvider.h"
 
-using org::apache::nifi::minifi::utils::createTempDir;
-
 template<typename T>
 class S3TestsFixture {
  public:
@@ -73,7 +71,7 @@ class S3TestsFixture {
 
   template<typename Component>
   void setCredentialFile(const Component &component) {
-    auto temp_path = createTempDir(&test_controller);
+    auto temp_path = test_controller.createTempDirectory();
     REQUIRE(!temp_path.empty());
     std::string aws_credentials_file(temp_path + utils::file::FileUtils::get_separator() + "aws_creds.conf");
     std::ofstream aws_credentials_file_stream(aws_credentials_file);
@@ -138,7 +136,7 @@ class FlowProcessorS3TestsFixture : public S3TestsFixture<T> {
     LogTestController::getInstance().setTrace<processors::GetFile>();
     LogTestController::getInstance().setDebug<processors::UpdateAttribute>();
 
-    auto input_dir = createTempDir(&this->test_controller);
+    auto input_dir = this->test_controller.createTempDirectory();
     std::ofstream input_file_stream(input_dir + utils::file::FileUtils::get_separator() + INPUT_FILENAME);
     input_file_stream << INPUT_DATA;
     input_file_stream.close();
diff --git a/libminifi/test/azure-tests/PutAzureBlobStorageTests.cpp b/libminifi/test/azure-tests/PutAzureBlobStorageTests.cpp
index fd1d335..98bbee4 100644
--- a/libminifi/test/azure-tests/PutAzureBlobStorageTests.cpp
+++ b/libminifi/test/azure-tests/PutAzureBlobStorageTests.cpp
@@ -98,8 +98,7 @@ class PutAzureBlobStorageTestsFixture {
     mock_blob_storage_ptr = mock_blob_storage.get();
     put_azure_blob_storage = std::shared_ptr<minifi::azure::processors::PutAzureBlobStorage>(
       new minifi::azure::processors::PutAzureBlobStorage("PutAzureBlobStorage", utils::Identifier(), std::move(mock_blob_storage)));
-    char input_dir_mask[] = "/tmp/gt.XXXXXX";
-    auto input_dir = test_controller.createTempDirectory(input_dir_mask);
+    auto input_dir = test_controller.createTempDirectory();
     std::ofstream input_file_stream(input_dir + utils::file::FileUtils::get_separator() + "input_data.log");
     input_file_stream << TEST_DATA;
     input_file_stream.close();
diff --git a/libminifi/test/bustache-tests/ApplyTemplateTests.cpp b/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
index 93ff71e..cfa7089 100644
--- a/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
+++ b/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
@@ -67,16 +67,16 @@ TEST_CASE("Test usage of ApplyTemplate", "[ApplyTemplateTest]") {
     std::shared_ptr<TestPlan> plan = testController.createPlan();
     std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-    char dir1[] = "/tmp/gt.XXXXXX";  // GetFile source
-    char dir2[] = "/tmp/gt.XXXXXX";  // Template source
-    char dir3[] = "/tmp/gt.XXXXXX";  // PutFile destionation
+    std::string get_file_source_dir = testController.createTempDirectory();
+    std::string template_source_dir = testController.createTempDirectory();
+    std::string put_file_destination_dir = testController.createTempDirectory();
 
-    REQUIRE(!testController.createTempDirectory(dir1).empty());
-    REQUIRE(!testController.createTempDirectory(dir2).empty());
-    REQUIRE(!testController.createTempDirectory(dir3).empty());
+    REQUIRE_FALSE(get_file_source_dir.empty());
+    REQUIRE_FALSE(template_source_dir.empty());
+    REQUIRE_FALSE(put_file_destination_dir.empty());
 
     std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getFile");
-    plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir1);
+    plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), get_file_source_dir);
     plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::KeepSourceFile.getName(), "true");
 
     std::shared_ptr<core::Processor> maprocessor = plan->addProcessor("ExtractText", "testExtractText", core::Relationship("success", "description"), true);
@@ -85,13 +85,13 @@ TEST_CASE("Test usage of ApplyTemplate", "[ApplyTemplateTest]") {
     std::shared_ptr<core::Processor> atprocessor = plan->addProcessor("ApplyTemplate", "testApplyTemplate", core::Relationship("success", "description"), true);
 
     std::shared_ptr<core::Processor> putfile = plan->addProcessor("PutFile", "putfile", core::Relationship("success", "description"), true);
-    plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), dir3);
+    plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), put_file_destination_dir);
     plan->setProperty(putfile, org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(),
                       org::apache::nifi::minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_REPLACE);
 
     // Write attribute value to file for GetFile->ExtractText
     std::stringstream ss1;
-    ss1 << dir1 << "/" << TEST_FILE;
+    ss1 << get_file_source_dir << "/" << TEST_FILE;
     std::string test_path = ss1.str();
 
     std::ofstream test_file(test_path);
@@ -101,7 +101,7 @@ TEST_CASE("Test usage of ApplyTemplate", "[ApplyTemplateTest]") {
 
     // Write template to file
     std::stringstream ss2;
-    ss2 << dir2 << "/" << TEMPLATE_FILE;
+    ss2 << template_source_dir << "/" << TEMPLATE_FILE;
     std::string template_path = ss2.str();
 
     std::ofstream template_file(template_path);
@@ -119,7 +119,7 @@ TEST_CASE("Test usage of ApplyTemplate", "[ApplyTemplateTest]") {
 
     // Read contents of file
     std::stringstream ss3;
-    ss3 << dir3 << "/" << TEST_FILE;
+    ss3 << put_file_destination_dir << "/" << TEST_FILE;
     std::string output_path = ss3.str();
 
     std::ifstream output_file(output_path);
diff --git a/libminifi/test/flow-tests/SessionTests.cpp b/libminifi/test/flow-tests/SessionTests.cpp
index b89f7a8..ecc6e60 100644
--- a/libminifi/test/flow-tests/SessionTests.cpp
+++ b/libminifi/test/flow-tests/SessionTests.cpp
@@ -40,8 +40,7 @@ TEST_CASE("Import null data") {
   LogTestController::getInstance().setTrace<core::repository::VolatileRepository<minifi::ResourceClaim::Path>>();
   LogTestController::getInstance().setTrace<core::repository::DatabaseContentRepository>();
 
-  char format[] = "/var/tmp/test.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   auto config = std::make_shared<minifi::Configure>();
   config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, utils::file::FileUtils::concat_path(dir, "content_repository"));
diff --git a/libminifi/test/flow-tests/TestControllerWithFlow.h b/libminifi/test/flow-tests/TestControllerWithFlow.h
index 56d91fb..6ffe5d9 100644
--- a/libminifi/test/flow-tests/TestControllerWithFlow.h
+++ b/libminifi/test/flow-tests/TestControllerWithFlow.h
@@ -35,8 +35,7 @@ class TestControllerWithFlow: public TestController{
     LogTestController::getInstance().setTrace<minifi::TimerDrivenSchedulingAgent>();
     LogTestController::getInstance().setTrace<minifi::EventDrivenSchedulingAgent>();
 
-    char format[] = "/tmp/flowTest.XXXXXX";
-    std::string dir = createTempDirectory(format);
+    std::string dir = createTempDirectory();
 
     std::string yamlPath = utils::file::FileUtils::concat_path(dir, "config.yml");
     std::ofstream{yamlPath} << yamlConfigContent;
diff --git a/libminifi/test/gps-tests/GPSTests.cpp b/libminifi/test/gps-tests/GPSTests.cpp
index c067134..891476d 100644
--- a/libminifi/test/gps-tests/GPSTests.cpp
+++ b/libminifi/test/gps-tests/GPSTests.cpp
@@ -51,8 +51,7 @@ TEST_CASE("GPSD Create", "[gpsdtest1]") {
 
   plan->addProcessor("LogAttribute", "logattribute", core::Relationship("success", "description"), true);
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir);
   testController.runSession(plan, false);
diff --git a/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp b/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp
index 9a051dd..62f2113 100644
--- a/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp
+++ b/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp
@@ -61,9 +61,7 @@ class PersistableKeyValueStoreServiceTestsFixture {
     LogTestController::getInstance().setTrace<minifi::controllers::PersistableKeyValueStoreService>();
     LogTestController::getInstance().setTrace<minifi::controllers::AbstractAutoPersistingKeyValueStoreService>();
 
-    // Create temporary directories
-    char format[] = "/var/tmp/state.XXXXXX";
-    state_dir = testController.createTempDirectory(format);
+    state_dir = testController.createTempDirectory();
     REQUIRE(false == state_dir.empty());
 #ifdef WIN32
     REQUIRE(0 == _chdir(state_dir.c_str()));
diff --git a/libminifi/test/keyvalue-tests/UnorderedMapKeyValueStoreServiceTest.cpp b/libminifi/test/keyvalue-tests/UnorderedMapKeyValueStoreServiceTest.cpp
index 5218ddb..7f875a2 100644
--- a/libminifi/test/keyvalue-tests/UnorderedMapKeyValueStoreServiceTest.cpp
+++ b/libminifi/test/keyvalue-tests/UnorderedMapKeyValueStoreServiceTest.cpp
@@ -58,9 +58,7 @@ class UnorderedMapKeyValueStoreServiceTestFixture {
     LogTestController::getInstance().setTrace<minifi::controllers::PersistableKeyValueStoreService>();
     LogTestController::getInstance().setTrace<minifi::controllers::AbstractAutoPersistingKeyValueStoreService>();
 
-    // Create temporary directories
-    char format[] = "/var/tmp/state.XXXXXX";
-    const auto state_dir = testController.createTempDirectory(format);
+    const auto state_dir = testController.createTempDirectory();
     REQUIRE(!state_dir.empty());
 #ifdef WIN32
     REQUIRE(0 == _chdir(state_dir.c_str()));
diff --git a/libminifi/test/pcap-tests/PcapTest.cpp b/libminifi/test/pcap-tests/PcapTest.cpp
index 7c1a1f3..e2be059 100644
--- a/libminifi/test/pcap-tests/PcapTest.cpp
+++ b/libminifi/test/pcap-tests/PcapTest.cpp
@@ -48,8 +48,7 @@
 class PcapTestHarness : public IntegrationBase {
  public:
   PcapTestHarness() {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/libminifi/test/persistence-tests/PersistenceTests.cpp b/libminifi/test/persistence-tests/PersistenceTests.cpp
index a5e0398..f90f739 100644
--- a/libminifi/test/persistence-tests/PersistenceTests.cpp
+++ b/libminifi/test/persistence-tests/PersistenceTests.cpp
@@ -162,8 +162,7 @@ TEST_CASE("Processors Can Store FlowFiles", "[TestP1]") {
   LogTestController::getInstance().setTrace<minifi::FlowFileRecord>();
   LogTestController::getInstance().setTrace<core::repository::FlowFileRepository>();
 
-  char format[] = "/var/tmp/test.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   auto config = std::make_shared<minifi::Configure>();
   config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, utils::file::FileUtils::concat_path(dir, "content_repository"));
@@ -265,8 +264,7 @@ TEST_CASE("Persisted flowFiles are updated on modification", "[TestP1]") {
   LogTestController::getInstance().setTrace<core::repository::VolatileRepository<minifi::ResourceClaim::Path>>();
   LogTestController::getInstance().setTrace<core::repository::DatabaseContentRepository>();
 
-  char format[] = "/var/tmp/test.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   auto config = std::make_shared<minifi::Configure>();
   config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, utils::file::FileUtils::concat_path(dir, "content_repository"));
diff --git a/libminifi/test/rocksdb-tests/ContentSessionTests.cpp b/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
index 50586ec..9e1dea4 100644
--- a/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
+++ b/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
@@ -31,8 +31,7 @@ template<typename ContentRepositoryClass>
 class ContentSessionController : public TestController {
  public:
   ContentSessionController() {
-    char format[] = "/var/tmp/content_repo.XXXXXX";
-    std::string contentRepoPath = createTempDirectory(format);
+    std::string contentRepoPath = createTempDirectory();
     auto config = std::make_shared<minifi::Configure>();
     config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, contentRepoPath);
     contentRepository = std::make_shared<ContentRepositoryClass>();
diff --git a/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp b/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
index 68f3d6c..fbee900 100644
--- a/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
+++ b/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp
@@ -29,8 +29,7 @@
 
 TEST_CASE("Write Claim", "[TestDBCR1]") {
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
 
   auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
@@ -70,8 +69,7 @@ TEST_CASE("Write Claim", "[TestDBCR1]") {
 
 TEST_CASE("Delete Claim", "[TestDBCR2]") {
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
 
   auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
@@ -109,8 +107,7 @@ TEST_CASE("Delete Claim", "[TestDBCR2]") {
 
 TEST_CASE("Test Empty Claim", "[TestDBCR3]") {
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
 
   auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
@@ -145,8 +142,7 @@ TEST_CASE("Test Empty Claim", "[TestDBCR3]") {
 
 TEST_CASE("Delete NonExistent Claim", "[TestDBCR4]") {
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
 
   auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
@@ -186,8 +182,7 @@ TEST_CASE("Delete NonExistent Claim", "[TestDBCR4]") {
 
 TEST_CASE("Delete Remove Count Claim", "[TestDBCR5]") {
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>();
 
   auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
diff --git a/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp b/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp
index 10767b8..a08ab5e 100644
--- a/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp
+++ b/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp
@@ -62,9 +62,7 @@ void verifyMaxKeyCount(const minifi::provenance::ProvenanceRepository& repo, uin
 
 TEST_CASE("Test size limit", "[sizeLimitTest]") {
   TestController testController;
-
-  char dirtemplate[] = "/var/tmp/db.XXXXXX";
-  auto temp_dir = testController.createTempDirectory(dirtemplate);
+  auto temp_dir = testController.createTempDirectory();
   REQUIRE(!temp_dir.empty());
 
   // 60 sec, 100 KB - going to exceed the size limit
@@ -85,9 +83,7 @@ TEST_CASE("Test size limit", "[sizeLimitTest]") {
 
 TEST_CASE("Test time limit", "[timeLimitTest]") {
   TestController testController;
-
-  char dirtemplate[] = "/var/tmp/db.XXXXXX";
-  auto temp_dir = testController.createTempDirectory(dirtemplate);
+  auto temp_dir = testController.createTempDirectory();
   REQUIRE(!temp_dir.empty());
 
   // 1 sec, 100 MB - going to exceed TTL
diff --git a/libminifi/test/rocksdb-tests/EncryptionTests.cpp b/libminifi/test/rocksdb-tests/EncryptionTests.cpp
index 9ce4258..1fa0ccd 100644
--- a/libminifi/test/rocksdb-tests/EncryptionTests.cpp
+++ b/libminifi/test/rocksdb-tests/EncryptionTests.cpp
@@ -30,7 +30,7 @@ class FFRepoFixture : public TestController {
     LogTestController::getInstance().setDebug<minifi::FlowFileRecord>();
     LogTestController::getInstance().setDebug<minifi::Connection>();
     LogTestController::getInstance().setTrace<FlowFileRepository>();
-    home_ = createTempDirectory("/var/tmp/testRepo.XXXXXX");
+    home_ = utils::Path{createTempDirectory()};
     repo_dir_ = home_ / "flowfile_repo";
     checkpoint_dir_ = home_ / "checkpoint_dir";
     config_ = std::make_shared<minifi::Configure>();
diff --git a/libminifi/test/rocksdb-tests/RepoTests.cpp b/libminifi/test/rocksdb-tests/RepoTests.cpp
index 73b2223..9ea43be 100644
--- a/libminifi/test/rocksdb-tests/RepoTests.cpp
+++ b/libminifi/test/rocksdb-tests/RepoTests.cpp
@@ -55,8 +55,7 @@ TEST_CASE("Test Repo Empty Value Attribute", "[TestFFR1]") {
   LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
   LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   std::shared_ptr<core::repository::FlowFileRepository> repository = std::make_shared<core::repository::FlowFileRepository>("ff", REPOTEST_FLOWFILE_CHECKPOINT_DIR, dir, 0, 0, 1);
 
   repository->initialize(std::make_shared<minifi::Configure>());
@@ -78,8 +77,7 @@ TEST_CASE("Test Repo Empty Key Attribute ", "[TestFFR2]") {
   LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
   LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   std::shared_ptr<core::repository::FlowFileRepository> repository = std::make_shared<core::repository::FlowFileRepository>("ff", REPOTEST_FLOWFILE_CHECKPOINT_DIR, dir, 0, 0, 1);
 
   repository->initialize(std::make_shared<minifi::Configure>());
@@ -102,8 +100,7 @@ TEST_CASE("Test Repo Key Attribute Verify ", "[TestFFR3]") {
   LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
   LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   std::shared_ptr<core::repository::FlowFileRepository> repository = std::make_shared<core::repository::FlowFileRepository>("ff", REPOTEST_FLOWFILE_CHECKPOINT_DIR, dir, 0, 0, 1);
 
   repository->initialize(std::make_shared<org::apache::nifi::minifi::Configure>());
@@ -147,12 +144,12 @@ TEST_CASE("Test Repo Key Attribute Verify ", "[TestFFR3]") {
 
 TEST_CASE("Test Delete Content ", "[TestFFR4]") {
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
+
   LogTestController::getInstance().setDebug<core::ContentRepository>();
   LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
   LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
 
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<core::repository::FlowFileRepository> repository = std::make_shared<core::repository::FlowFileRepository>("ff", REPOTEST_FLOWFILE_CHECKPOINT_DIR, dir, 0, 0, 1);
 
@@ -200,13 +197,13 @@ TEST_CASE("Test Delete Content ", "[TestFFR4]") {
 TEST_CASE("Test Validate Checkpoint ", "[TestFFR5]") {
   TestController testController;
   utils::file::FileUtils::delete_dir(REPOTEST_FLOWFILE_CHECKPOINT_DIR, true);
-  char format[] = "/var/tmp/testRepo.XXXXXX";
+
   LogTestController::getInstance().setDebug<core::ContentRepository>();
   LogTestController::getInstance().setTrace<core::repository::FileSystemRepository>();
   LogTestController::getInstance().setTrace<minifi::ResourceClaim>();
   LogTestController::getInstance().setTrace<minifi::FlowFileRecord>();
 
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::shared_ptr<core::repository::FlowFileRepository> repository = std::make_shared<core::repository::FlowFileRepository>("ff", REPOTEST_FLOWFILE_CHECKPOINT_DIR, dir, 0, 0, 1);
 
@@ -268,8 +265,7 @@ TEST_CASE("Test FlowFile Restore", "[TestFFR6]") {
   LogTestController::getInstance().setTrace<minifi::FlowFileRecord>();
   LogTestController::getInstance().setTrace<minifi::core::repository::FlowFileRepository>();
 
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   auto config = std::make_shared<minifi::Configure>();
   config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, utils::file::FileUtils::concat_path(dir, "content_repository"));
@@ -365,8 +361,7 @@ TEST_CASE("Flush deleted flowfiles before shutdown", "[TestFFR7]") {
   };
 
   TestController testController;
-  char format[] = "/var/tmp/testRepo.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   auto config = std::make_shared<minifi::Configure>();
   config->set(minifi::Configure::nifi_flowfile_repository_directory_default, utils::file::FileUtils::concat_path(dir, "flowfile_repository"));
diff --git a/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp b/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp
index e8f9de2..09fe4af 100644
--- a/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp
+++ b/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp
@@ -24,8 +24,7 @@
 class RocksDBStreamTest : TestController {
  public:
   RocksDBStreamTest() {
-    char format[] = "/var/tmp/testdb.XXXXXX";
-    dbPath = createTempDirectory(format);
+    dbPath = createTempDirectory();
     auto set_db_opts = [] (minifi::internal::Writable<rocksdb::DBOptions>& db_opts) {
       db_opts.set(&rocksdb::DBOptions::create_if_missing, true);
       db_opts.set(&rocksdb::DBOptions::use_direct_io_for_flush_and_compaction, true);
diff --git a/libminifi/test/rocksdb-tests/RocksDBTests.cpp b/libminifi/test/rocksdb-tests/RocksDBTests.cpp
index 178c705..7e52185 100644
--- a/libminifi/test/rocksdb-tests/RocksDBTests.cpp
+++ b/libminifi/test/rocksdb-tests/RocksDBTests.cpp
@@ -37,8 +37,7 @@ struct RocksDBTest : TestController {
     LogTestController::getInstance().setTrace<minifi::internal::RocksDatabase>();
     LogTestController::getInstance().setTrace<minifi::internal::RocksDbInstance>();
     LogTestController::getInstance().setTrace<minifi::internal::ColumnHandle>();
-    char format[] = "/var/tmp/db.XXXXXX";
-    db_dir = createTempDirectory(format);
+    db_dir = createTempDirectory();
   }
 
   OpenDatabase openDB(const std::vector<std::string>& cf_names) const {
@@ -220,7 +219,7 @@ void withDefaultEnv(minifi::internal::Writable<rocksdb::DBOptions>& db_opts) {
 }
 
 TEST_CASE_METHOD(RocksDBTest, "Error is logged if different encryption keys are used", "[rocksDBTest10]") {
-  utils::Path home_dir = createTempDirectory("/var/tmp/test.XXXXXX");
+  utils::Path home_dir{createTempDirectory()};
   utils::file::FileUtils::create_dir((home_dir / "conf").str());
   std::ofstream{(home_dir / "conf" / "bootstrap.conf").str()}
     << "encryption.key.one=" << "805D7B95EF44DC27C87FFBC4DFDE376DAE604D55DB2C5496DEEF5236362DE62E" << "\n"
diff --git a/libminifi/test/script-tests/ExecutePythonProcessorTests.cpp b/libminifi/test/script-tests/ExecutePythonProcessorTests.cpp
index 30f116d..c4692a9 100644
--- a/libminifi/test/script-tests/ExecutePythonProcessorTests.cpp
+++ b/libminifi/test/script-tests/ExecutePythonProcessorTests.cpp
@@ -32,9 +32,7 @@
 #include "utils/TestUtils.h"
 
 namespace {
-using org::apache::nifi::minifi::utils::createTempDir;
 using org::apache::nifi::minifi::utils::putFileToDir;
-using org::apache::nifi::minifi::utils::createTempDirWithFile;
 using org::apache::nifi::minifi::utils::getFileContent;
 
 class ExecutePythonProcessorTestBase {
@@ -88,15 +86,18 @@ class SimplePythonFlowFileTransferTest : public ExecutePythonProcessorTestBase {
  protected:
   void testSimpleFilePassthrough(const Expectation expectation, const core::Relationship& execute_python_out_conn, const std::string& used_as_script_file, const std::string& used_as_script_body) {
     reInitialize();
-    const std::string input_dir = createTempDirWithFile(testController_.get(), TEST_FILE_NAME, TEST_FILE_CONTENT);
-    const std::string output_dir = createTempDir(testController_.get());
 
+    const std::string input_dir = testController_->createTempDirectory();
+    putFileToDir(input_dir, TEST_FILE_NAME, TEST_FILE_CONTENT);
     addGetFileProcessorToPlan(input_dir);
+
     if (Expectation::PROCESSOR_INITIALIZATION_EXCEPTION == expectation) {
       REQUIRE_THROWS(addExecutePythonProcessorToPlan(used_as_script_file, used_as_script_body));
       return;
     }
     REQUIRE_NOTHROW(addExecutePythonProcessorToPlan(used_as_script_file, used_as_script_body));
+
+    const std::string output_dir = testController_->createTempDirectory();
     addPutFileProcessorToPlan(execute_python_out_conn, output_dir);
 
     plan_->runNextProcessor();  // GetFile
@@ -116,7 +117,7 @@ class SimplePythonFlowFileTransferTest : public ExecutePythonProcessorTestBase {
   }
   void testsStatefulProcessor() {
     reInitialize();
-    const std::string output_dir = createTempDir(testController_.get());
+    const std::string output_dir = testController_->createTempDirectory();
 
     auto executePythonProcessor = plan_->addProcessor("ExecutePythonProcessor", "executePythonProcessor");
     plan_->setProperty(executePythonProcessor, org::apache::nifi::minifi::python::processors::ExecutePythonProcessor::ScriptFile.getName(), getScriptFullPath("stateful_processor.py"));
diff --git a/libminifi/test/script-tests/TestExecuteScriptProcessorWithLuaScript.cpp b/libminifi/test/script-tests/TestExecuteScriptProcessorWithLuaScript.cpp
index 07306c0..c1a536d 100644
--- a/libminifi/test/script-tests/TestExecuteScriptProcessorWithLuaScript.cpp
+++ b/libminifi/test/script-tests/TestExecuteScriptProcessorWithLuaScript.cpp
@@ -52,8 +52,7 @@ TEST_CASE("Lua: Test Log", "[executescriptLuaLog]") { // NOLINT
     end
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
   std::fstream file;
@@ -114,12 +113,10 @@ TEST_CASE("Lua: Test Read File", "[executescriptLuaRead]") { // NOLINT
     end
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
-  char putFileDirFmt[] = "/tmp/ft.XXXXXX";
-  char *putFileDir = testController.createTempDirectory(putFileDirFmt);
+  auto putFileDir = testController.createTempDirectory();
   plan->setProperty(putFile, processors::PutFile::Directory.getName(), putFileDir);
 
   testController.runSession(plan, false);
@@ -204,12 +201,10 @@ TEST_CASE("Lua: Test Write File", "[executescriptLuaWrite]") { // NOLINT
     end
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
-  char putFileDirFmt[] = "/tmp/ft.XXXXXX";
-  char *putFileDir = testController.createTempDirectory(putFileDirFmt);
+  auto putFileDir = testController.createTempDirectory();
   plan->setProperty(putFile, processors::PutFile::Directory.getName(), putFileDir);
 
   testController.runSession(plan, false);
@@ -286,8 +281,7 @@ TEST_CASE("Lua: Test Update Attribute", "[executescriptLuaUpdateAttribute]") { /
     end
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
   std::fstream file;
diff --git a/libminifi/test/script-tests/TestExecuteScriptProcessorWithPythonScript.cpp b/libminifi/test/script-tests/TestExecuteScriptProcessorWithPythonScript.cpp
index 9e85d72..afc4dcb 100644
--- a/libminifi/test/script-tests/TestExecuteScriptProcessorWithPythonScript.cpp
+++ b/libminifi/test/script-tests/TestExecuteScriptProcessorWithPythonScript.cpp
@@ -67,12 +67,10 @@ TEST_CASE("Python: Test Read File", "[executescriptPythonRead]") { // NOLINT
         session.transfer(flow_file, REL_SUCCESS)
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
-  char putFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto putFileDir = testController.createTempDirectory(putFileDirFmt);
+  auto putFileDir = testController.createTempDirectory();
   plan->setProperty(putFile, processors::PutFile::Directory.getName(), putFileDir);
 
   testController.runSession(plan, false);
@@ -151,12 +149,10 @@ TEST_CASE("Python: Test Write File", "[executescriptPythonWrite]") { // NOLINT
         session.transfer(flow_file, REL_SUCCESS)
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
-  char putFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto putFileDir = testController.createTempDirectory(putFileDirFmt);
+  auto putFileDir = testController.createTempDirectory();
   plan->setProperty(putFile, processors::PutFile::Directory.getName(), putFileDir);
 
   testController.runSession(plan, false);
@@ -260,8 +256,7 @@ TEST_CASE("Python: Test Update Attribute", "[executescriptPythonUpdateAttribute]
         session.transfer(flow_file, REL_SUCCESS)
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
   std::fstream file;
@@ -306,8 +301,7 @@ TEST_CASE("Python: Test Get Context Property", "[executescriptPythonGetContextPr
       log.info('got Script Engine property: %s' % script_engine)
   )");
 
-  char getFileDirFmt[] = "/tmp/ft.XXXXXX";
-  auto getFileDir = testController.createTempDirectory(getFileDirFmt);
+  auto getFileDir = testController.createTempDirectory();
   plan->setProperty(getFile, processors::GetFile::Directory.getName(), getFileDir);
 
   std::fstream file;
diff --git a/libminifi/test/sensors-tests/SensorTests.cpp b/libminifi/test/sensors-tests/SensorTests.cpp
index f4250f2..41a5a0a 100644
--- a/libminifi/test/sensors-tests/SensorTests.cpp
+++ b/libminifi/test/sensors-tests/SensorTests.cpp
@@ -47,8 +47,7 @@
 class PcapTestHarness : public IntegrationBase {
  public:
   PcapTestHarness() {
-    char format[] = "/tmp/ssth.XXXXXX";
-    dir = testController.createTempDirectory(format);
+    dir = testController.createTempDirectory();
   }
 
   void testSetup() override {
diff --git a/libminifi/test/sql-tests/SQLTestController.h b/libminifi/test/sql-tests/SQLTestController.h
index 51ad6ae..83286fb 100644
--- a/libminifi/test/sql-tests/SQLTestController.h
+++ b/libminifi/test/sql-tests/SQLTestController.h
@@ -63,8 +63,7 @@ class SQLTestController : public TestController {
     LogTestController::getInstance().setTrace<processors::ExecuteSQL>();
     LogTestController::getInstance().setTrace<processors::QueryDatabaseTable>();
 
-    char format[] = "/var/tmp/gt.XXXXXX";
-    test_dir_ = createTempDirectory(format);
+    test_dir_ = createTempDirectory();
     database_ = test_dir_ / "test.db";
     connection_str_ = "Driver=" + DRIVER + ";Database=" + database_.str();
 
diff --git a/libminifi/test/tensorflow-tests/TensorFlowTests.cpp b/libminifi/test/tensorflow-tests/TensorFlowTests.cpp
index 6959cfb..1587df4 100644
--- a/libminifi/test/tensorflow-tests/TensorFlowTests.cpp
+++ b/libminifi/test/tensorflow-tests/TensorFlowTests.cpp
@@ -45,8 +45,7 @@ TEST_CASE("TensorFlow: Apply Graph", "[tfApplyGraph]") { // NOLINT
   auto repo = std::make_shared<TestRepository>();
 
   // Define directory for input protocol buffers
-  char in_dir_format[] = "/tmp/gt.XXXXXX";
-  std::string in_dir = testController.createTempDirectory(in_dir_format);
+  std::string in_dir = testController.createTempDirectory();
 
   // Define input graph protocol buffer file
   std::string in_graph_file(in_dir);
@@ -57,8 +56,7 @@ TEST_CASE("TensorFlow: Apply Graph", "[tfApplyGraph]") { // NOLINT
   in_tensor_file.append("/tensor.pb");
 
   // Define directory for output protocol buffers
-  char out_dir_format[] = "/tmp/gt.XXXXXX";
-  std::string out_dir = testController.createTempDirectory(out_dir_format);
+  std::string out_dir = testController.createTempDirectory();
 
   // Define output tensor protocol buffer file
   std::string out_tensor_file(out_dir);
@@ -184,16 +182,14 @@ TEST_CASE("TensorFlow: ConvertImageToTensor", "[tfConvertImageToTensor]") { // N
   auto repo = std::make_shared<TestRepository>();
 
   // Define directory for input protocol buffers
-  char in_dir_format[] = "/tmp/gt.XXXXXX";
-  std::string in_dir = testController.createTempDirectory(in_dir_format);
+  std::string in_dir = testController.createTempDirectory();
 
   // Define input tensor protocol buffer file
   std::string in_img_file(in_dir);
   in_img_file.append("/img");
 
   // Define directory for output protocol buffers
-  char out_dir_format[] = "/tmp/gt.XXXXXX";
-  std::string out_dir = testController.createTempDirectory(out_dir_format);
+  std::string out_dir = testController.createTempDirectory();
 
   // Define output tensor protocol buffer file
   std::string out_tensor_file(out_dir);
@@ -312,8 +308,7 @@ TEST_CASE("TensorFlow: Extract Top Labels", "[tfExtractTopLabels]") { // NOLINT
   auto repo = std::make_shared<TestRepository>();
 
   // Define directory for input protocol buffers
-  char in_dir_format[] = "/tmp/gt.XXXXXX";
-  std::string in_dir = testController.createTempDirectory(in_dir_format);
+  std::string in_dir = testController.createTempDirectory();
 
   // Define input labels file
   std::string in_labels_file(in_dir);
diff --git a/libminifi/test/unit/ChecksumCalculatorTests.cpp b/libminifi/test/unit/ChecksumCalculatorTests.cpp
index 389005e..f9d6d49 100644
--- a/libminifi/test/unit/ChecksumCalculatorTests.cpp
+++ b/libminifi/test/unit/ChecksumCalculatorTests.cpp
@@ -28,7 +28,7 @@ namespace {
 
 TEST_CASE("ChecksumCalculator can calculate the checksum, which is equal to sha256sum", "[ChecksumCalculator]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location = utils::putFileToDir(test_dir, "simple.txt", "one line of text\n");
 
   REQUIRE(std::string{utils::ChecksumCalculator::CHECKSUM_TYPE} == std::string{"SHA256"});
@@ -42,7 +42,7 @@ TEST_CASE("ChecksumCalculator can calculate the checksum, which is equal to sha2
 
 TEST_CASE("On Windows text files, the checksum calculated is also the same as sha256sum", "[ChecksumCalculator]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location = utils::putFileToDir(test_dir, "simple.txt", "one line of text\r\n");
 
   utils::ChecksumCalculator checksum_calculator;
@@ -52,7 +52,7 @@ TEST_CASE("On Windows text files, the checksum calculated is also the same as sh
 
 TEST_CASE("The checksum can be reset and recomputed", "[ChecksumCalculator]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location = utils::putFileToDir(test_dir, "simple.txt", "one line of text\n");
 
   utils::ChecksumCalculator checksum_calculator;
@@ -71,7 +71,7 @@ TEST_CASE("The checksum can be reset and recomputed", "[ChecksumCalculator]") {
 
 TEST_CASE("If the file location is updated, the checksum will be recomputed", "[ChecksumCalculator]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location = utils::putFileToDir(test_dir, "simple.txt", "one line of text\n");
 
   utils::ChecksumCalculator checksum_calculator;
@@ -85,7 +85,7 @@ TEST_CASE("If the file location is updated, the checksum will be recomputed", "[
 
 TEST_CASE("Checksums can be computed for binary (eg. encrypted) files, too", "[ChecksumCalculator]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string binary_data(size_t{256}, '\0');
   std::iota(binary_data.begin(), binary_data.end(), 'x');
   std::string file_location = utils::putFileToDir(test_dir, "simple.txt", binary_data);
@@ -97,7 +97,7 @@ TEST_CASE("Checksums can be computed for binary (eg. encrypted) files, too", "[C
 
 TEST_CASE("The agent identifier is excluded from the checksum", "[ChecksumCalculator]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location_1 = utils::putFileToDir(test_dir, "agent_one.txt",
       "nifi.c2.agent.class=Test\n"
       "nifi.c2.agent.identifier=Test-111\n"
diff --git a/libminifi/test/unit/ConfigurationChecksumsTests.cpp b/libminifi/test/unit/ConfigurationChecksumsTests.cpp
index a18ff47..79c12ed 100644
--- a/libminifi/test/unit/ConfigurationChecksumsTests.cpp
+++ b/libminifi/test/unit/ConfigurationChecksumsTests.cpp
@@ -34,7 +34,7 @@ TEST_CASE("If no checksum calculators are added, we get an empty node", "[Config
 
 TEST_CASE("If one checksum calculator is added, we get a node with one child", "[ConfigurationChecksums]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location = utils::putFileToDir(test_dir, "simple.txt", "one line of text\n");
 
   utils::ChecksumCalculator checksum_calculator;
@@ -56,7 +56,7 @@ TEST_CASE("If one checksum calculator is added, we get a node with one child", "
 
 TEST_CASE("If two checksum calculators are added, we get a node with two children", "[ConfigurationChecksums]") {
   TestController test_controller;
-  std::string test_dir = utils::createTempDir(&test_controller);
+  std::string test_dir = test_controller.createTempDirectory();
   std::string file_location_1 = utils::putFileToDir(test_dir, "first.txt", "this is the first file\n");
   std::string file_location_2 = utils::putFileToDir(test_dir, "second.txt", "this is the second file\n");
 
diff --git a/libminifi/test/unit/EnvironmentUtilsTests.cpp b/libminifi/test/unit/EnvironmentUtilsTests.cpp
index 78606d1..81676e7 100644
--- a/libminifi/test/unit/EnvironmentUtilsTests.cpp
+++ b/libminifi/test/unit/EnvironmentUtilsTests.cpp
@@ -145,8 +145,7 @@ TEST_CASE("getcwd", "[getcwd]") {
 TEST_CASE("setcwd", "[setcwd]") {
   TestController testController;
   const std::string cwd = utils::Environment::getCurrentWorkingDirectory();
-  char format[] = "/tmp/envtest.XXXXXX";
-  const std::string tempDir = utils::file::getFullPath(testController.createTempDirectory(format));
+  const std::string tempDir = utils::file::getFullPath(testController.createTempDirectory());
   REQUIRE(true == utils::Environment::setCurrentWorkingDirectory(tempDir.c_str()));
   REQUIRE(tempDir == utils::Environment::getCurrentWorkingDirectory());
   REQUIRE(true == utils::Environment::setCurrentWorkingDirectory(cwd.c_str()));
diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp
index e598a5d..7b18734 100644
--- a/libminifi/test/unit/FileStreamTests.cpp
+++ b/libminifi/test/unit/FileStreamTests.cpp
@@ -32,8 +32,7 @@
 
 TEST_CASE("TestFileOverWrite", "[TestFiles]") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -70,8 +69,7 @@ TEST_CASE("TestFileOverWrite", "[TestFiles]") {
 
 TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -108,8 +106,7 @@ TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") {
 
 TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -146,8 +143,7 @@ TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") {
 
 TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -184,8 +180,7 @@ TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") {
 
 TEST_CASE("TestFileBeyondEnd3", "[TestLoader]") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -218,8 +213,7 @@ TEST_CASE("TestFileBeyondEnd3", "[TestLoader]") {
 
 TEST_CASE("TestFileExceedSize", "[TestLoader]") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -253,24 +247,21 @@ TEST_CASE("TestFileExceedSize", "[TestLoader]") {
 
 TEST_CASE("Write zero bytes") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   minifi::io::FileStream stream(utils::file::concat_path(dir, "test.txt"), 0, true);
   REQUIRE(stream.write(nullptr, 0) == 0);
 }
 
 TEST_CASE("Read zero bytes") {
   TestController testController;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   minifi::io::FileStream stream(utils::file::concat_path(dir, "test.txt"), 0, true);
   REQUIRE(stream.read(nullptr, 0) == 0);
 }
 
 TEST_CASE("Non-existing file read/write test") {
   TestController test_controller;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = test_controller.createTempDirectory(format);
+  auto dir = test_controller.createTempDirectory();
   minifi::io::FileStream stream(utils::file::concat_path(dir, "non_existing_file.txt"), 0, true);
   REQUIRE(test_controller.getLog().getInstance().contains("Error opening file", std::chrono::seconds(0)));
   REQUIRE(test_controller.getLog().getInstance().contains("No such file or directory", std::chrono::seconds(0)));
@@ -284,8 +275,7 @@ TEST_CASE("Non-existing file read/write test") {
 
 TEST_CASE("Existing file read/write test") {
   TestController test_controller;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = test_controller.createTempDirectory(format);
+  auto dir = test_controller.createTempDirectory();
   std::string path_to_existing_file(utils::file::concat_path(dir, "existing_file.txt"));
   {
     std::ofstream outfile(path_to_existing_file);
@@ -309,8 +299,7 @@ TEST_CASE("Existing file read/write test") {
 // This could be simplified with C++17 std::filesystem
 TEST_CASE("Opening file without permission creates error logs") {
   TestController test_controller;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = test_controller.createTempDirectory(format);
+  auto dir = test_controller.createTempDirectory();
   std::string path_to_permissionless_file(utils::file::concat_path(dir, "permissionless_file.txt"));
   {
     std::ofstream outfile(path_to_permissionless_file);
@@ -330,8 +319,7 @@ TEST_CASE("Opening file without permission creates error logs") {
 
 TEST_CASE("Readonly filestream write test") {
   TestController test_controller;
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = test_controller.createTempDirectory(format);
+  auto dir = test_controller.createTempDirectory();
   std::string path_to_file(utils::file::concat_path(dir, "file_to_seek_in.txt"));
   {
     std::ofstream outfile(path_to_file);
diff --git a/libminifi/test/unit/FileSystemTests.cpp b/libminifi/test/unit/FileSystemTests.cpp
index 627bbd5..507c98d 100644
--- a/libminifi/test/unit/FileSystemTests.cpp
+++ b/libminifi/test/unit/FileSystemTests.cpp
@@ -30,8 +30,7 @@ utils::crypto::Bytes encryption_key = utils::crypto::stringToBytes(utils::String
 
 struct FileSystemTest : TestController {
   FileSystemTest() {
-    char format[] = "/var/tmp/fs.XXXXXX";
-    dir = createTempDirectory(format);
+    dir = createTempDirectory();
     encrypted_file = utils::file::FileUtils::concat_path(dir, "encrypted.txt");
     raw_file = utils::file::FileUtils::concat_path(dir, "raw.txt");
     new_file = utils::file::FileUtils::concat_path(dir, "new.txt");
diff --git a/libminifi/test/unit/FileTriggerTests.cpp b/libminifi/test/unit/FileTriggerTests.cpp
index 21a3285..5b4deef 100644
--- a/libminifi/test/unit/FileTriggerTests.cpp
+++ b/libminifi/test/unit/FileTriggerTests.cpp
@@ -48,8 +48,7 @@ TEST_CASE("invalidfile file", "[t2]") {
 TEST_CASE("test valid  file no update", "[t3]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
@@ -71,8 +70,7 @@ TEST_CASE("test valid  file no update", "[t3]") {
 TEST_CASE("test valid file update", "[t4]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::fstream file;
   std::stringstream ss;
diff --git a/libminifi/test/unit/FileUtilsTests.cpp b/libminifi/test/unit/FileUtilsTests.cpp
index aee5c84..e8bb26a 100644
--- a/libminifi/test/unit/FileUtilsTests.cpp
+++ b/libminifi/test/unit/FileUtilsTests.cpp
@@ -141,8 +141,7 @@ TEST_CASE("TestFileUtils::get_executable_dir", "[TestGetExecutableDir]") {
 TEST_CASE("TestFileUtils::create_dir", "[TestCreateDir]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::string test_dir_path = std::string(dir) + FileUtils::get_separator() + "random_dir";
 
@@ -158,8 +157,7 @@ TEST_CASE("TestFileUtils::create_dir", "[TestCreateDir]") {
 TEST_CASE("TestFileUtils::create_dir recursively", "[TestCreateDir]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
 
   std::string test_dir_path = std::string(dir) + FileUtils::get_separator() + "random_dir" + FileUtils::get_separator() +
     "random_dir2" + FileUtils::get_separator() + "random_dir3";
@@ -174,8 +172,7 @@ TEST_CASE("TestFileUtils::create_dir recursively", "[TestCreateDir]") {
 TEST_CASE("TestFileUtils::getFullPath", "[TestGetFullPath]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  const std::string tempDir = utils::file::getFullPath(testController.createTempDirectory(format));
+  const std::string tempDir = utils::file::getFullPath(testController.createTempDirectory());
 
   const std::string cwd = utils::Environment::getCurrentWorkingDirectory();
 
@@ -209,8 +206,7 @@ TEST_CASE("FileUtils::last_write_time and last_write_time_point work", "[last_wr
 
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  std::string dir = testController.createTempDirectory(format);
+  std::string dir = testController.createTempDirectory();
 
   std::string test_file = dir + FileUtils::get_separator() + "test.txt";
   REQUIRE(FileUtils::last_write_time(test_file) == 0);
@@ -264,8 +260,7 @@ TEST_CASE("FileUtils::last_write_time and last_write_time_point work", "[last_wr
 TEST_CASE("FileUtils::file_size works", "[file_size]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  std::string dir = testController.createTempDirectory(format);
+  std::string dir = testController.createTempDirectory();
 
   std::string test_file = dir + FileUtils::get_separator() + "test.txt";
   REQUIRE(FileUtils::file_size(test_file) == 0);
@@ -293,8 +288,7 @@ TEST_CASE("FileUtils::computeChecksum works", "[computeChecksum]") {
 
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  std::string dir = testController.createTempDirectory(format);
+  std::string dir = testController.createTempDirectory();
 
   std::string test_file = dir + FileUtils::get_separator() + "test.txt";
   REQUIRE(FileUtils::computeChecksum(test_file, 0) == CHECKSUM_OF_0_BYTES);
@@ -338,8 +332,7 @@ TEST_CASE("FileUtils::computeChecksum with large files", "[computeChecksum]") {
 
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  std::string dir = testController.createTempDirectory(format);
+  std::string dir = testController.createTempDirectory();
 
   std::string test_file = dir + FileUtils::get_separator() + "test.txt";
   REQUIRE(FileUtils::computeChecksum(test_file, 0) == CHECKSUM_OF_0_BYTES);
@@ -383,8 +376,7 @@ TEST_CASE("FileUtils::computeChecksum with large files", "[computeChecksum]") {
 TEST_CASE("FileUtils::set_permissions", "[TestSetPermissions]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto path = dir + FileUtils::get_separator() + "test_file.txt";
   std::ofstream outfile(path, std::ios::out | std::ios::binary);
 
@@ -398,8 +390,7 @@ TEST_CASE("FileUtils::set_permissions", "[TestSetPermissions]") {
 TEST_CASE("FileUtils::exists", "[TestExists]") {
   TestController testController;
 
-  char format[] = "/tmp/gt.XXXXXX";
-  auto dir = testController.createTempDirectory(format);
+  auto dir = testController.createTempDirectory();
   auto path = dir + FileUtils::get_separator() + "test_file.txt";
   std::ofstream outfile(path, std::ios::out | std::ios::binary);
   auto invalid_path = dir + FileUtils::get_separator() + "test_file2.txt";
diff --git a/nanofi/tests/CAPITests.cpp b/nanofi/tests/CAPITests.cpp
index 05a0efc..0d973d3 100644
--- a/nanofi/tests/CAPITests.cpp
+++ b/nanofi/tests/CAPITests.cpp
@@ -134,10 +134,8 @@ TEST_CASE("Set valid and invalid properties", "[setProcesssorProperties]") {
 TEST_CASE("get file and put file", "[getAndPutFile]") {
   TestController testController;
 
-  char src_format[] = "/tmp/gt.XXXXXX";
-  char put_format[] = "/tmp/pt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
-  auto putfiledir = testController.createTempDirectory(put_format);
+  auto sourcedir = testController.createTempDirectory();
+  auto putfiledir = testController.createTempDirectory();
   auto instance = create_instance_obj();
   REQUIRE(instance != nullptr);
   flow *test_flow = create_new_flow(instance);
@@ -183,8 +181,7 @@ TEST_CASE("get file and put file", "[getAndPutFile]") {
 TEST_CASE("Test manipulation of attributes", "[testAttributes]") {
   TestController testController;
 
-  char src_format[] = "/tmp/gt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
+  auto sourcedir = testController.createTempDirectory();
 
   create_testfile_for_getfile(sourcedir.c_str());
 
@@ -259,8 +256,7 @@ TEST_CASE("Test manipulation of attributes", "[testAttributes]") {
 
 TEST_CASE("Test error handling callback", "[errorHandling]") {
   TestController testController;
-  char src_format[] = "/tmp/gt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
+  auto sourcedir = testController.createTempDirectory();
 
   auto instance = create_instance_obj();
   REQUIRE(instance != nullptr);
@@ -305,8 +301,7 @@ TEST_CASE("Test error handling callback", "[errorHandling]") {
 TEST_CASE("Test standalone processors", "[testStandalone]") {
   TestController testController;
 
-  char src_format[] = "/tmp/gt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
+  auto sourcedir = testController.createTempDirectory();
 
   create_testfile_for_getfile(sourcedir.c_str());
 
@@ -353,10 +348,8 @@ TEST_CASE("Test standalone processors", "[testStandalone]") {
 TEST_CASE("Test interaction of flow and standlone processors", "[testStandaloneWithFlow]") {
   TestController testController;
 
-  char src_format[] = "/tmp/gt.XXXXXX";
-  char put_format[] = "/tmp/pt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
-  auto putfiledir = testController.createTempDirectory(put_format);
+  auto sourcedir = testController.createTempDirectory();
+  auto putfiledir = testController.createTempDirectory();
 
   create_testfile_for_getfile(sourcedir.c_str());
 
@@ -398,8 +391,7 @@ TEST_CASE("Test standalone processors with file input", "[testStandaloneWithFile
   TestController testController;
 
   enable_logging();
-  char src_format[] = "/tmp/gt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
+  auto sourcedir = testController.createTempDirectory();
   std::string path = create_testfile_for_getfile(sourcedir.c_str());
 
   standalone_processor* extract_test = create_processor("ExtractText", NULL);
@@ -424,8 +416,7 @@ TEST_CASE("Test standalone processors with file input", "[testStandaloneWithFile
 TEST_CASE("Test custom processor", "[TestCutomProcessor]") {
   TestController testController;
 
-  char src_format[] = "/tmp/gt.XXXXXX";
-  auto sourcedir = testController.createTempDirectory(src_format);
+  auto sourcedir = testController.createTempDirectory();
 
   create_testfile_for_getfile(sourcedir.c_str());
 
diff --git a/nanofi/tests/CTestsBase.h b/nanofi/tests/CTestsBase.h
index ba30098..98f4a3f 100644
--- a/nanofi/tests/CTestsBase.h
+++ b/nanofi/tests/CTestsBase.h
@@ -128,8 +128,7 @@ class TestControllerWithTemporaryWorkingDirectory {
 public:
   TestControllerWithTemporaryWorkingDirectory()
     : old_cwd_(get_current_working_directory()) {
-    char format[] = "/tmp/ctest_temp_dir.XXXXXX";
-    std::string temp_dir = test_controller_.createTempDirectory(format);
+    std::string temp_dir = test_controller_.createTempDirectory();
     int result = change_current_working_directory(temp_dir.c_str());
     if (result != 0) {
       throw std::runtime_error("Could not change to temporary directory " + temp_dir);