diff --git a/src/clusterfuzz/_internal/base/utils.py b/src/clusterfuzz/_internal/base/utils.py index bb59e5c8651..a6dcd710fd2 100644 --- a/src/clusterfuzz/_internal/base/utils.py +++ b/src/clusterfuzz/_internal/base/utils.py @@ -23,6 +23,7 @@ import random import re import sys +import tempfile import time import urllib.parse import urllib.request @@ -1100,3 +1101,10 @@ def batched(iterator, batch_size): if batch: yield batch + + +def create_temp_file(directory: str, prefix: str, suffix: str) -> str: + """Creates a temporary file and returns its path.""" + fd, file_path = tempfile.mkstemp(dir=directory, prefix=prefix, suffix=suffix) + os.close(fd) + return file_path diff --git a/src/clusterfuzz/_internal/tests/core/base/utils_test.py b/src/clusterfuzz/_internal/tests/core/base/utils_test.py index 69bcfd122a1..24ad522ebed 100644 --- a/src/clusterfuzz/_internal/tests/core/base/utils_test.py +++ b/src/clusterfuzz/_internal/tests/core/base/utils_test.py @@ -720,3 +720,16 @@ def test_additional_prefix(self): """Test parsing manifest data with an added prefix.""" file_data = 'prefix123-20250402153042-utc-40773ac0-username_test123-cad6977-prod' self.assertIsNone(utils.parse_manifest_data(file_data)) + + +class CreateTempFileTest(unittest.TestCase): + """Tests for create_temp_file.""" + + def test_create_temp_file(self): + """Test create_temp_file creates a file and returns its path.""" + with tempfile.TemporaryDirectory() as tmpdir: + file_path = utils.create_temp_file(tmpdir, 'prefix_', '_suffix') + self.assertTrue(os.path.exists(file_path)) + self.assertTrue(file_path.startswith(tmpdir)) + self.assertIn('prefix_', file_path) + self.assertTrue(file_path.endswith('_suffix'))