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

FrankChen021 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 593191fc793 fix: secure temporary files and resource lookups (#19822)
593191fc793 is described below

commit 593191fc793c6d2745f45512bee84ccd8d4fd869
Author: Frank Chen <[email protected]>
AuthorDate: Mon Aug 31 14:17:52 2026 +0800

    fix: secure temporary files and resource lookups (#19822)
    
    * Fix CodeQL temporary file and resource lookup warnings
    
    * test: validate resource lookups before file output
    
    * Keep mapped spatial test indexes alive
    
    * test: clean up spatial index resources
---
 .../benchmark/FrontCodedIndexedBenchmark.java      |  6 +-
 .../druid/benchmark/GenericIndexedBenchmark.java   |  2 +-
 .../benchmark/indexing/IndexMergeBenchmark.java    |  6 +-
 .../druid/storage/aliyun/OssDataSegmentPusher.java | 39 +++++----
 ...ListBasedDruidToTimelineEventConverterTest.java | 26 ++++--
 .../cassandra/CassandraDataSegmentPusher.java      | 56 +++++++------
 .../cloudfiles/CloudFilesDataSegmentPusher.java    |  4 +-
 ...pressedBigDecimalAggregatorGroupByTestBase.java | 28 ++++---
 ...ssedBigDecimalAggregatorTimeseriesTestBase.java | 47 ++++++++---
 .../graphite/WhiteListBasedConverterTest.java      | 25 ++++--
 .../movingaverage/MovingAverageQueryTest.java      | 10 ++-
 .../storage/azure/AzureDataSegmentPusher.java      |  3 +-
 .../storage/google/GoogleDataSegmentPusher.java    |  3 +-
 .../HdfsFileTimestampVersionFinderTest.java        |  9 +-
 .../storage/hdfs/HdfsDataSegmentPullerTest.java    |  9 +-
 .../druid/indexing/kafka/KafkaIndexTaskTest.java   |  2 +-
 .../indexing/kinesis/KinesisIndexTaskTest.java     |  2 +-
 .../OffHeapNamespaceExtractionCacheManager.java    |  3 +-
 .../druid/storage/s3/S3DataSegmentPusher.java      | 39 +++++----
 .../druid/java/util/metrics/CgroupCpuMonitor.java  |  6 +-
 .../data/input/impl/prefetch/JsonIteratorTest.java | 20 +++--
 .../java/org/apache/druid/frame/FrameTest.java     | 11 ++-
 .../common/io/smoosh/SmooshedFileMapperTest.java   |  6 +-
 .../org/apache/druid/query/DoubleStorageTest.java  | 19 +++--
 .../org/apache/druid/segment/EmptyIndexTest.java   |  8 +-
 .../segment/IndexMergerV9WithSpatialIndexTest.java | 96 +++++++++++-----------
 .../java/org/apache/druid/segment/TestIndex.java   | 11 +--
 .../segment/filter/SpatialFilterBonusTest.java     | 10 +--
 .../druid/segment/filter/SpatialFilterTest.java    | 10 +--
 .../apache/druid/metadata/input/SqlEntityTest.java |  7 +-
 .../druid/metadata/input/SqlInputSourceTest.java   | 23 +-----
 .../loading/LocalDataSegmentPullerTest.java        |  2 +-
 .../druid/sql/calcite/BaseCalciteQueryTest.java    | 16 ++--
 33 files changed, 304 insertions(+), 260 deletions(-)

diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/FrontCodedIndexedBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/FrontCodedIndexedBenchmark.java
index 023806e73a8..bdcb582a1ee 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/FrontCodedIndexedBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/FrontCodedIndexedBenchmark.java
@@ -155,13 +155,13 @@ public class FrontCodedIndexedBenchmark
       
frontCodedIndexedWriterIncrementalBuckets.write(StringUtils.toUtf8Nullable(next));
     }
     smooshDirFrontCoded = FileUtils.createTempDir();
-    fileFrontCoded = File.createTempFile("frontCodedIndexedBenchmark", "meta");
+    fileFrontCoded = new File(smooshDirFrontCoded, "meta");
 
     smooshDirGeneric = FileUtils.createTempDir();
-    fileGeneric = File.createTempFile("genericIndexedBenchmark", "meta");
+    fileGeneric = new File(smooshDirGeneric, "meta");
 
     smooshDirFrontCodedIncrementalBuckets = FileUtils.createTempDir();
-    fileFrontCodedIncrementalBuckets = 
File.createTempFile("frontCodedIndexedBenchmarkv1Buckets", "meta");
+    fileFrontCodedIncrementalBuckets = new 
File(smooshDirFrontCodedIncrementalBuckets, "meta");
 
     EncodingSizeProfiler.encodedSize = (int) ("generic".equals(indexType)
                                               ? 
genericIndexedWriter.getSerializedSize()
diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/GenericIndexedBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/GenericIndexedBenchmark.java
index 8ddb283ac8f..9f2423f902b 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/GenericIndexedBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/GenericIndexedBenchmark.java
@@ -122,7 +122,7 @@ public class GenericIndexedBenchmark
       genericIndexedWriter.write(element.array());
     }
     smooshDir = FileUtils.createTempDir();
-    file = File.createTempFile("genericIndexedBenchmark", "meta");
+    file = new File(smooshDir, "meta");
 
     try (FileChannel fileChannel =
              FileChannel.open(file.toPath(), StandardOpenOption.CREATE, 
StandardOpenOption.WRITE);
diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/indexing/IndexMergeBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/indexing/IndexMergeBenchmark.java
index e1886768448..8d981dacbd6 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/indexing/IndexMergeBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/indexing/IndexMergeBenchmark.java
@@ -148,9 +148,7 @@ public class IndexMergeBenchmark
   @OutputTimeUnit(TimeUnit.MICROSECONDS)
   public void mergeV9(Blackhole blackhole) throws Exception
   {
-    File tmpFile = File.createTempFile("IndexMergeBenchmark-MERGEDFILE-V9-" + 
System.currentTimeMillis(), ".TEMPFILE");
-    tmpFile.delete();
-    FileUtils.mkdirp(tmpFile);
+    final File tmpFile = 
FileUtils.createTempDir("IndexMergeBenchmark-MERGEDFILE-V9-");
     try {
       log.info(tmpFile.getAbsolutePath() + " isFile: " + tmpFile.isFile() + " 
isDir:" + tmpFile.isDirectory());
 
@@ -167,7 +165,7 @@ public class IndexMergeBenchmark
       blackhole.consume(mergedFile);
     }
     finally {
-      tmpFile.delete();
+      FileUtils.deleteDirectory(tmpFile);
     }
   }
 
diff --git 
a/extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java
 
b/extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java
index 177d4dc1965..1eba054bff3 100644
--- 
a/extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java
+++ 
b/extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java
@@ -32,6 +32,7 @@ import org.apache.druid.utils.CompressionUtils;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.nio.file.Files;
 import java.util.Map;
 
 public class OssDataSegmentPusher implements DataSegmentPusher
@@ -64,27 +65,29 @@ public class OssDataSegmentPusher implements 
DataSegmentPusher
     final String path = OssUtils.constructSegmentPath(config.getPrefix(), 
storageDirSuffix);
     log.debug("Copying segment[%s] to OSS at location[%s]", inSegment.getId(), 
path);
 
-    final File zipOutFile = File.createTempFile("druid", "index.zip");
-    final long indexSize = CompressionUtils.zip(indexFilesDir, zipOutFile);
+    final File zipOutFile = Files.createTempFile("druid", 
"index.zip").toFile();
+    try {
+      final long indexSize = CompressionUtils.zip(indexFilesDir, zipOutFile);
 
-    final DataSegment outSegment = inSegment.withSize(indexSize)
-                                            
.withLoadSpec(makeLoadSpec(config.getBucket(), path))
-                                            
.withBinaryVersion(SegmentUtils.getVersionFromDir(indexFilesDir));
+      final DataSegment outSegment = inSegment.withSize(indexSize)
+                                              
.withLoadSpec(makeLoadSpec(config.getBucket(), path))
+                                              
.withBinaryVersion(SegmentUtils.getVersionFromDir(indexFilesDir));
 
-    try {
-      return OssUtils.retry(
-          () -> {
-            OssUtils.uploadFileIfPossible(client, config.getBucket(), path, 
zipOutFile);
+      try {
+        return OssUtils.retry(
+            () -> {
+              OssUtils.uploadFileIfPossible(client, config.getBucket(), path, 
zipOutFile);
 
-            return outSegment;
-          }
-      );
-    }
-    catch (OSSException e) {
-      throw new IOException(e);
-    }
-    catch (Exception e) {
-      throw new RuntimeException(e);
+              return outSegment;
+            }
+        );
+      }
+      catch (OSSException e) {
+        throw new IOException(e);
+      }
+      catch (Exception e) {
+        throw new RuntimeException(e);
+      }
     }
     finally {
       log.debug("Deleting temporary cached index.zip");
diff --git 
a/extensions-contrib/ambari-metrics-emitter/src/test/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverterTest.java
 
b/extensions-contrib/ambari-metrics-emitter/src/test/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverterTest.java
index ff735ce9e5f..4e7eacd11a8 100644
--- 
a/extensions-contrib/ambari-metrics-emitter/src/test/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverterTest.java
+++ 
b/extensions-contrib/ambari-metrics-emitter/src/test/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverterTest.java
@@ -25,6 +25,7 @@ import 
org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -32,10 +33,16 @@ import org.junit.jupiter.params.provider.MethodSource;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.file.Files;
+import java.util.Objects;
 
 public class WhiteListBasedDruidToTimelineEventConverterTest
 {
+  @TempDir
+  public File temporaryFolder;
+
   private static final String PREFIX = "druid";
   private static final String HOSTNAME = "testHost:8080";
   private static final String SERVICE_NAME = "historical";
@@ -92,14 +99,17 @@ public class WhiteListBasedDruidToTimelineEventConverterTest
   @Test
   public void testWhiteListedStringArrayDimension() throws IOException
   {
-    File mapFile = File.createTempFile("testing-" + System.nanoTime(), 
".json");
-    mapFile.deleteOnExit();
-
-    try (OutputStream outputStream = new FileOutputStream(mapFile)) {
-      IOUtils.copyLarge(
-          
getClass().getResourceAsStream("/testWhiteListedStringArrayDimension.json"),
-          outputStream
-      );
+    final File mapFile = Files.createTempFile(temporaryFolder.toPath(), 
"whiteList-", ".json").toFile();
+
+    try (
+        final InputStream inputStream = Objects.requireNonNull(
+            WhiteListBasedDruidToTimelineEventConverterTest.class
+                
.getResourceAsStream("/testWhiteListedStringArrayDimension.json"),
+            "Missing test resource: /testWhiteListedStringArrayDimension.json"
+        );
+        final OutputStream outputStream = new FileOutputStream(mapFile)
+    ) {
+      IOUtils.copyLarge(inputStream, outputStream);
     }
 
     WhiteListBasedDruidToTimelineEventConverter converter = new 
WhiteListBasedDruidToTimelineEventConverter(
diff --git 
a/extensions-contrib/cassandra-storage/src/main/java/org/apache/druid/storage/cassandra/CassandraDataSegmentPusher.java
 
b/extensions-contrib/cassandra-storage/src/main/java/org/apache/druid/storage/cassandra/CassandraDataSegmentPusher.java
index 126467c10a9..a9f5c966e13 100644
--- 
a/extensions-contrib/cassandra-storage/src/main/java/org/apache/druid/storage/cassandra/CassandraDataSegmentPusher.java
+++ 
b/extensions-contrib/cassandra-storage/src/main/java/org/apache/druid/storage/cassandra/CassandraDataSegmentPusher.java
@@ -70,40 +70,42 @@ public class CassandraDataSegmentPusher extends 
CassandraStorage implements Data
   @Override
   public DataSegment pushToPath(File indexFilesDir, DataSegment segment, 
String storageDirSuffix) throws IOException
   {
-    String key = JOINER.join(
+    final String key = JOINER.join(
         config.getKeyspace().isEmpty() ? null : config.getKeyspace(),
         storageDirSuffix
-        );
+    );
     // Create index
-    final File compressedIndexFile = File.createTempFile("druid", "index.zip");
-    long indexSize = CompressionUtils.zip(indexFilesDir, compressedIndexFile);
-    log.info("Wrote compressed file [%s] to [%s]", 
compressedIndexFile.getAbsolutePath(), key);
+    final File compressedIndexFile = Files.createTempFile("druid", 
"index.zip").toFile();
+    try {
+      final long indexSize = CompressionUtils.zip(indexFilesDir, 
compressedIndexFile);
+      log.info("Wrote compressed file [%s] to [%s]", 
compressedIndexFile.getAbsolutePath(), key);
+
+      final int version = SegmentUtils.getVersionFromDir(indexFilesDir);
 
-    int version = SegmentUtils.getVersionFromDir(indexFilesDir);
+      try (final InputStream fileStream = 
Files.newInputStream(compressedIndexFile.toPath())) {
+        final long start = System.currentTimeMillis();
+        ChunkedStorage.newWriter(indexStorage, key, fileStream)
+                      .withConcurrencyLevel(CONCURRENCY).call();
+        final byte[] json = jsonMapper.writeValueAsBytes(segment);
+        final MutationBatch mutation = this.keyspace.prepareMutationBatch();
+        mutation.withRow(descriptorStorage, key)
+                .putColumn("lastmodified", System.currentTimeMillis(), null)
+                .putColumn("descriptor", json, null);
+        mutation.execute();
+        log.info("Wrote index to C* in [%s] ms", System.currentTimeMillis() - 
start);
+      }
+      catch (Exception e) {
+        throw new IOException(e);
+      }
 
-    try (final InputStream fileStream = 
Files.newInputStream(compressedIndexFile.toPath())) {
-      long start = System.currentTimeMillis();
-      ChunkedStorage.newWriter(indexStorage, key, fileStream)
-                    .withConcurrencyLevel(CONCURRENCY).call();
-      byte[] json = jsonMapper.writeValueAsBytes(segment);
-      MutationBatch mutation = this.keyspace.prepareMutationBatch();
-      mutation.withRow(descriptorStorage, key)
-              .putColumn("lastmodified", System.currentTimeMillis(), null)
-              .putColumn("descriptor", json, null);
-      mutation.execute();
-      log.info("Wrote index to C* in [%s] ms", System.currentTimeMillis() - 
start);
+      return segment.withSize(indexSize)
+                    .withLoadSpec(ImmutableMap.of("type", "c*", "key", key))
+                    .withBinaryVersion(version);
     }
-    catch (Exception e) {
-      throw new IOException(e);
+    finally {
+      log.info("Deleting zipped index File[%s]", compressedIndexFile);
+      compressedIndexFile.delete();
     }
-
-    segment = segment.withSize(indexSize)
-                     .withLoadSpec(ImmutableMap.of("type", "c*", "key", key))
-                     .withBinaryVersion(version);
-
-    log.info("Deleting zipped index File[%s]", compressedIndexFile);
-    compressedIndexFile.delete();
-    return segment;
   }
 
   @Override
diff --git 
a/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesDataSegmentPusher.java
 
b/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesDataSegmentPusher.java
index 987530b2931..fab3b7d4065 100644
--- 
a/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesDataSegmentPusher.java
+++ 
b/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesDataSegmentPusher.java
@@ -72,8 +72,8 @@ public class CloudFilesDataSegmentPusher implements 
DataSegmentPusher
     File zipOutFile = null;
 
     try {
-      final File descFile = descriptorFile = File.createTempFile("descriptor", 
".json");
-      final File outFile = zipOutFile = File.createTempFile("druid", 
"index.zip");
+      final File descFile = descriptorFile = 
Files.createTempFile("descriptor", ".json").toFile();
+      final File outFile = zipOutFile = Files.createTempFile("druid", 
"index.zip").toFile();
 
       final long indexSize = CompressionUtils.zip(indexFilesDir, zipOutFile);
 
diff --git 
a/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorGroupByTestBase.java
 
b/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorGroupByTestBase.java
index 33cf6b01afd..9112d49ed95 100644
--- 
a/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorGroupByTestBase.java
+++ 
b/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorGroupByTestBase.java
@@ -37,9 +37,11 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
 import java.io.File;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TimeZone;
 
 
@@ -92,16 +94,22 @@ public abstract class 
CompressedBigDecimalAggregatorGroupByTestBase
   @Test
   public void testIngestAndGroupByAllQuery() throws Exception
   {
-    Sequence<ResultRow> seq = helper.createIndexAndRunQueryOnSegment(
-        this.getClass().getResourceAsStream("/" + "bd_test_data.csv"),
-        CompressedBigDecimalAggregatorTimeseriesTestBase.SCHEMA,
-        CompressedBigDecimalAggregatorTimeseriesTestBase.FORMAT,
-        cbdGroupByQueryConfig.getIngestionAggregators(),
-        0,
-        Granularities.NONE,
-        5,
-        cbdGroupByQueryConfig.getQuery()
-    );
+    final Sequence<ResultRow> seq;
+    try (final InputStream inputStream = Objects.requireNonNull(
+        
CompressedBigDecimalAggregatorGroupByTestBase.class.getResourceAsStream("/bd_test_data.csv"),
+        "Missing resource /bd_test_data.csv"
+    )) {
+      seq = helper.createIndexAndRunQueryOnSegment(
+          inputStream,
+          CompressedBigDecimalAggregatorTimeseriesTestBase.SCHEMA,
+          CompressedBigDecimalAggregatorTimeseriesTestBase.FORMAT,
+          cbdGroupByQueryConfig.getIngestionAggregators(),
+          0,
+          Granularities.NONE,
+          5,
+          cbdGroupByQueryConfig.getQuery()
+      );
+    }
 
     List<ResultRow> results = seq.toList();
     Assertions.assertEquals(1, results.size());
diff --git 
a/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorTimeseriesTestBase.java
 
b/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorTimeseriesTestBase.java
index 532b3c35b34..53f84d76009 100644
--- 
a/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorTimeseriesTestBase.java
+++ 
b/extensions-contrib/compressed-bigdecimal/src/test/java/org/apache/druid/compressedbigdecimal/aggregator/CompressedBigDecimalAggregatorTimeseriesTestBase.java
@@ -48,10 +48,15 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TimeZone;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -122,16 +127,22 @@ public abstract class 
CompressedBigDecimalAggregatorTimeseriesTestBase extends I
       String expected
   ) throws Exception
   {
-    Sequence seq = helper.createIndexAndRunQueryOnSegment(
-        this.getClass().getResourceAsStream("/" + "bd_test_data.csv"),
-        SCHEMA,
-        FORMAT,
-        ingestionAggregators,
-        0,
-        Granularities.NONE,
-        5,
-        query
-    );
+    final Sequence seq;
+    try (final InputStream inputStream = Objects.requireNonNull(
+        
CompressedBigDecimalAggregatorTimeseriesTestBase.class.getResourceAsStream("/bd_test_data.csv"),
+        "Missing resource /bd_test_data.csv"
+    )) {
+      seq = helper.createIndexAndRunQueryOnSegment(
+          inputStream,
+          SCHEMA,
+          FORMAT,
+          ingestionAggregators,
+          0,
+          Granularities.NONE,
+          5,
+          query
+      );
+    }
 
     TimeseriesResultValue result = ((Result<TimeseriesResultValue>) 
Iterables.getOnlyElement(seq.toList())).getValue();
     Map<String, Object> event = result.getBaseObject();
@@ -163,7 +174,7 @@ public abstract class 
CompressedBigDecimalAggregatorTimeseriesTestBase extends I
     final File segmentDir1 = new File(tempFolder, "segment1");
     FileUtils.mkdirp(segmentDir1);
     helper.createIndex(
-        new File(this.getClass().getResource("/" + 
"bd_test_data.csv").getFile()),
+        copyResourceToTemporaryFile("/bd_test_data.csv"),
         SCHEMA,
         FORMAT,
         ingestionAggregators,
@@ -175,7 +186,7 @@ public abstract class 
CompressedBigDecimalAggregatorTimeseriesTestBase extends I
     final File segmentDir2 = new File(tempFolder, "segment2");
     FileUtils.mkdirp(segmentDir2);
     helper.createIndex(
-        new File(this.getClass().getResource("/" + 
"bd_test_zero_data.csv").getFile()),
+        copyResourceToTemporaryFile("/bd_test_zero_data.csv"),
         SCHEMA,
         FORMAT,
         ingestionAggregators,
@@ -202,4 +213,16 @@ public abstract class 
CompressedBigDecimalAggregatorTimeseriesTestBase extends I
         event.get("cbdStringRevenue")
     );
   }
+
+  private File copyResourceToTemporaryFile(final String resource) throws 
IOException
+  {
+    final File resourceFile = Files.createTempFile(tempFolder.toPath(), 
"compressed-bigdecimal-", ".csv").toFile();
+    try (final InputStream inputStream = Objects.requireNonNull(
+        
CompressedBigDecimalAggregatorTimeseriesTestBase.class.getResourceAsStream(resource),
+        "Missing resource " + resource
+    )) {
+      Files.copy(inputStream, resourceFile.toPath(), 
StandardCopyOption.REPLACE_EXISTING);
+    }
+    return resourceFile;
+  }
 }
diff --git 
a/extensions-contrib/graphite-emitter/src/test/java/org/apache/druid/emitter/graphite/WhiteListBasedConverterTest.java
 
b/extensions-contrib/graphite-emitter/src/test/java/org/apache/druid/emitter/graphite/WhiteListBasedConverterTest.java
index 6cb014214e2..51ca40cef03 100644
--- 
a/extensions-contrib/graphite-emitter/src/test/java/org/apache/druid/emitter/graphite/WhiteListBasedConverterTest.java
+++ 
b/extensions-contrib/graphite-emitter/src/test/java/org/apache/druid/emitter/graphite/WhiteListBasedConverterTest.java
@@ -22,8 +22,10 @@ package org.apache.druid.emitter.graphite;
 import org.apache.commons.io.IOUtils;
 import org.apache.druid.jackson.DefaultObjectMapper;
 import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
+import org.apache.druid.testing.TemporaryFolderExtension;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -31,11 +33,16 @@ import org.junit.jupiter.params.provider.MethodSource;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Objects;
 
 
 public class WhiteListBasedConverterTest
 {
+  @RegisterExtension
+  public final TemporaryFolderExtension temporaryFolder = 
TemporaryFolderExtension.testCaseScoped();
+
   private static final String PREFIX = "druid";
   private static final String HOSTNAME = "testHost.yahoo.com:8080";
   private static final String SERVICE_NAME = "historical";
@@ -98,14 +105,16 @@ public class WhiteListBasedConverterTest
   @Test
   public void testWhiteListedStringArrayDimension() throws IOException
   {
-    File mapFile = File.createTempFile("testing-" + System.nanoTime(), 
".json");
-    mapFile.deleteOnExit();
-
-    try (OutputStream outputStream = new FileOutputStream(mapFile)) {
-      IOUtils.copyLarge(
-          
getClass().getResourceAsStream("/testWhiteListedStringArrayDimension.json"),
-          outputStream
-      );
+    final File mapFile = temporaryFolder.newFile("whiteList.json");
+
+    try (
+        final InputStream inputStream = Objects.requireNonNull(
+            
WhiteListBasedConverterTest.class.getResourceAsStream("/testWhiteListedStringArrayDimension.json"),
+            "Missing test resource: /testWhiteListedStringArrayDimension.json"
+        );
+        final OutputStream outputStream = new FileOutputStream(mapFile)
+    ) {
+      IOUtils.copyLarge(inputStream, outputStream);
     }
 
     WhiteListBasedConverter converter = new WhiteListBasedConverter(
diff --git 
a/extensions-contrib/moving-average-query/src/test/java/org/apache/druid/query/movingaverage/MovingAverageQueryTest.java
 
b/extensions-contrib/moving-average-query/src/test/java/org/apache/druid/query/movingaverage/MovingAverageQueryTest.java
index 960ced2fd1e..b431f50f252 100644
--- 
a/extensions-contrib/moving-average-query/src/test/java/org/apache/druid/query/movingaverage/MovingAverageQueryTest.java
+++ 
b/extensions-contrib/moving-average-query/src/test/java/org/apache/druid/query/movingaverage/MovingAverageQueryTest.java
@@ -94,6 +94,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ForkJoinPool;
@@ -183,9 +184,12 @@ public class MovingAverageQueryTest extends 
InitializedNullHandlingTest
     retryConfig = injector.getInstance(RetryQueryRunnerConfig.class);
     serverConfig = injector.getInstance(ServerConfig.class);
 
-    ObjectMapper reader = new ObjectMapper(new YAMLFactory());
-    try (final InputStream is = getClass().getResourceAsStream("/queryTests/" 
+ yamlFile)) {
-      config = reader.readValue(is, TestConfig.class);
+    final ObjectMapper reader = new ObjectMapper(new YAMLFactory());
+    try (final InputStream inputStream = Objects.requireNonNull(
+        MovingAverageQueryTest.class.getResourceAsStream("/queryTests/" + 
yamlFile),
+        "Missing query test resource " + yamlFile
+    )) {
+      config = reader.readValue(inputStream, TestConfig.class);
     }
   }
 
diff --git 
a/extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
 
b/extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
index 429c699b276..000f689552f 100644
--- 
a/extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
+++ 
b/extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
@@ -35,6 +35,7 @@ import org.joda.time.format.ISODateTimeFormat;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.nio.file.Files;
 import java.util.Map;
 
 /**
@@ -104,7 +105,7 @@ public class AzureDataSegmentPusher implements 
DataSegmentPusher
     File zipOutFile = null;
 
     try {
-      final File outFile = zipOutFile = File.createTempFile("index", ".zip");
+      final File outFile = zipOutFile = Files.createTempFile("index", 
".zip").toFile();
       final long size = CompressionUtils.zip(indexFilesDir, zipOutFile);
 
       return uploadDataSegment(segment, binaryVersion, size, outFile, 
azurePath);
diff --git 
a/extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentPusher.java
 
b/extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentPusher.java
index c5be311f647..1da95ad1aa5 100644
--- 
a/extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentPusher.java
+++ 
b/extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentPusher.java
@@ -35,6 +35,7 @@ import org.apache.druid.utils.CompressionUtils;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.nio.file.Files;
 import java.util.Map;
 
 public class GoogleDataSegmentPusher implements DataSegmentPusher
@@ -93,7 +94,7 @@ public class GoogleDataSegmentPusher implements 
DataSegmentPusher
     File indexFile = null;
 
     try {
-      indexFile = File.createTempFile("index", ".zip");
+      indexFile = Files.createTempFile("index", ".zip").toFile();
       final long indexSize = CompressionUtils.zip(indexFilesDir, indexFile);
       final String indexPath = buildPath(storageDirSuffix + "/" + "index.zip");
 
diff --git 
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsFileTimestampVersionFinderTest.java
 
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsFileTimestampVersionFinderTest.java
index 685d4e243dd..64cf259a6dd 100644
--- 
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsFileTimestampVersionFinderTest.java
+++ 
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsFileTimestampVersionFinderTest.java
@@ -21,7 +21,6 @@ package org.apache.druid.segment.loading;
 
 import com.google.common.io.ByteStreams;
 import org.apache.druid.java.util.common.FileUtils;
-import org.apache.druid.java.util.common.IOE;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.storage.hdfs.HdfsFileTimestampVersionFinder;
 import org.apache.hadoop.conf.Configuration;
@@ -57,17 +56,13 @@ public class HdfsFileTimestampVersionFinderTest
   @BeforeAll
   public static void setupStatic() throws IOException
   {
-    hdfsTmpDir = File.createTempFile("hdfsHandlerTest", "dir");
-    if (!hdfsTmpDir.delete()) {
-      throw new IOE("Unable to delete hdfsTmpDir [%s]", 
hdfsTmpDir.getAbsolutePath());
-    }
+    hdfsTmpDir = FileUtils.createTempDir("hdfsHandlerTest");
     conf = new Configuration(true);
     fileSystem = new LocalFileSystem();
     fileSystem.initialize(hdfsTmpDir.toURI(), conf);
     fileSystem.setWorkingDirectory(new Path(hdfsTmpDir.toURI()));
 
-    final File tmpFile = File.createTempFile("hdfsHandlerTest", ".data");
-    tmpFile.delete();
+    final File tmpFile = new File(hdfsTmpDir, "input.data");
     try {
       Files.copy(new ByteArrayInputStream(pathByteContents), tmpFile.toPath());
       try (OutputStream stream = fileSystem.create(filePath)) {
diff --git 
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
 
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
index c042749c5be..b951ffe3011 100644
--- 
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
+++ 
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
@@ -21,7 +21,6 @@ package org.apache.druid.storage.hdfs;
 
 import com.google.common.io.ByteStreams;
 import org.apache.druid.java.util.common.FileUtils;
-import org.apache.druid.java.util.common.IOE;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.segment.loading.SegmentLoadingException;
 import org.apache.druid.utils.CompressionUtils;
@@ -61,17 +60,13 @@ public class HdfsDataSegmentPullerTest
   @BeforeAll
   public static void setupStatic() throws IOException
   {
-    hdfsTmpDir = File.createTempFile("hdfsHandlerTest", "dir");
-    if (!hdfsTmpDir.delete()) {
-      throw new IOE("Unable to delete hdfsTmpDir [%s]", 
hdfsTmpDir.getAbsolutePath());
-    }
+    hdfsTmpDir = FileUtils.createTempDir("hdfsHandlerTest");
     conf = new Configuration(true);
     fileSystem = new LocalFileSystem();
     fileSystem.initialize(hdfsTmpDir.toURI(), conf);
     fileSystem.setWorkingDirectory(new Path(hdfsTmpDir.toURI()));
 
-    final File tmpFile = File.createTempFile("hdfsHandlerTest", ".data");
-    tmpFile.delete();
+    final File tmpFile = new File(hdfsTmpDir, "input.data");
     try {
       Files.copy(new ByteArrayInputStream(pathByteContents), tmpFile.toPath());
       try (OutputStream stream = fileSystem.create(filePath)) {
diff --git 
a/extensions-core/kafka-indexing-service/src/test/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTest.java
 
b/extensions-core/kafka-indexing-service/src/test/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTest.java
index f72fe6cc640..b4c15e867d7 100644
--- 
a/extensions-core/kafka-indexing-service/src/test/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTest.java
+++ 
b/extensions-core/kafka-indexing-service/src/test/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTest.java
@@ -313,7 +313,7 @@ public class KafkaIndexTaskTest extends 
SeekableStreamIndexTaskTestBase
     doHandoff = true;
     topic = getTopicName();
     records = generateRecords(topic);
-    reportsFile = File.createTempFile("KafkaIndexTaskTestReports-" + 
System.currentTimeMillis(), "json");
+    reportsFile = temporaryFolder.newFile("KafkaIndexTaskTestReports.json");
     makeToolboxFactory();
   }
 
diff --git 
a/extensions-core/kinesis-indexing-service/src/test/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskTest.java
 
b/extensions-core/kinesis-indexing-service/src/test/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskTest.java
index 832839e528c..d6282f8aeda 100644
--- 
a/extensions-core/kinesis-indexing-service/src/test/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskTest.java
+++ 
b/extensions-core/kinesis-indexing-service/src/test/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskTest.java
@@ -216,7 +216,7 @@ public class KinesisIndexTaskTest extends 
SeekableStreamIndexTaskTestBase
     maxParseExceptions = null;
     maxSavedParseExceptions = null;
     doHandoff = true;
-    reportsFile = File.createTempFile("KinesisIndexTaskTestReports-" + 
System.currentTimeMillis(), "json");
+    reportsFile = temporaryFolder.newFile("KinesisIndexTaskTestReports.json");
     maxRecordsPerPoll = 1;
     maxBytesPerPoll = 1_000_000;
 
diff --git 
a/extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/cache/OffHeapNamespaceExtractionCacheManager.java
 
b/extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/cache/OffHeapNamespaceExtractionCacheManager.java
index 48ccc63d3f3..54cc718c7dd 100644
--- 
a/extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/cache/OffHeapNamespaceExtractionCacheManager.java
+++ 
b/extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/cache/OffHeapNamespaceExtractionCacheManager.java
@@ -36,6 +36,7 @@ import org.mapdb.HTreeMap;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -170,7 +171,7 @@ public class OffHeapNamespaceExtractionCacheManager extends 
NamespaceExtractionC
   {
     super(lifecycle, serviceEmitter, config);
     try {
-      tmpFile = File.createTempFile("druidMapDB", getClass().getName());
+      tmpFile = Files.createTempFile("druidMapDB", 
getClass().getName()).toFile();
       log.info("Using file [%s] for mapDB off heap namespace cache", 
tmpFile.getAbsolutePath());
     }
     catch (IOException e) {
diff --git 
a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPusher.java
 
b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPusher.java
index 12d2cde8f65..b7da01bfbaa 100644
--- 
a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPusher.java
+++ 
b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPusher.java
@@ -34,6 +34,7 @@ import software.amazon.awssdk.services.s3.model.S3Exception;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.nio.file.Files;
 import java.util.Map;
 
 public class S3DataSegmentPusher implements DataSegmentPusher
@@ -76,27 +77,29 @@ public class S3DataSegmentPusher implements 
DataSegmentPusher
 
   private DataSegment pushZip(File indexFilesDir, DataSegment baseSegment, 
String s3Path) throws IOException
   {
-    final File zipOutFile = File.createTempFile("druid", "index.zip");
-    final long indexSize = CompressionUtils.zip(indexFilesDir, zipOutFile);
+    final File zipOutFile = Files.createTempFile("druid", 
"index.zip").toFile();
+    try {
+      final long indexSize = CompressionUtils.zip(indexFilesDir, zipOutFile);
 
-    final DataSegment outSegment = baseSegment.withSize(indexSize)
-                                              
.withLoadSpec(makeLoadSpec(config.getBucket(), s3Path))
-                                              
.withBinaryVersion(SegmentUtils.getVersionFromDir(indexFilesDir));
+      final DataSegment outSegment = baseSegment.withSize(indexSize)
+                                                
.withLoadSpec(makeLoadSpec(config.getBucket(), s3Path))
+                                                
.withBinaryVersion(SegmentUtils.getVersionFromDir(indexFilesDir));
 
-    try {
-      return S3Utils.retryS3Operation(
-          () -> {
-            S3Utils.uploadFileIfPossible(s3Client, config.getDisableAcl(), 
config.getBucket(), s3Path, zipOutFile);
+      try {
+        return S3Utils.retryS3Operation(
+            () -> {
+              S3Utils.uploadFileIfPossible(s3Client, config.getDisableAcl(), 
config.getBucket(), s3Path, zipOutFile);
 
-            return outSegment;
-          }
-      );
-    }
-    catch (S3Exception e) {
-      throw handlePushServiceException(e, indexSize);
-    }
-    catch (Exception e) {
-      throw new RuntimeException(e);
+              return outSegment;
+            }
+        );
+      }
+      catch (S3Exception e) {
+        throw handlePushServiceException(e, indexSize);
+      }
+      catch (Exception e) {
+        throw new RuntimeException(e);
+      }
     }
     finally {
       log.debug("Deleting temporary cached index.zip");
diff --git 
a/processing/src/main/java/org/apache/druid/java/util/metrics/CgroupCpuMonitor.java
 
b/processing/src/main/java/org/apache/druid/java/util/metrics/CgroupCpuMonitor.java
index 1c6dc7abcea..c00fb2faadc 100644
--- 
a/processing/src/main/java/org/apache/druid/java/util/metrics/CgroupCpuMonitor.java
+++ 
b/processing/src/main/java/org/apache/druid/java/util/metrics/CgroupCpuMonitor.java
@@ -123,9 +123,11 @@ public class CgroupCpuMonitor extends FeedDefiningMonitor
   private void initUzerHz()
   {
     try {
-      Process p = new ProcessBuilder("getconf", "CLK_TCK").start();
+      // getconf has no portable absolute location; the fixed command and 
argument intentionally use the service PATH.
+      // codeql[java/relative-path-command]
+      final Process p = new ProcessBuilder("getconf", "CLK_TCK").start();
       try (BufferedReader in = new BufferedReader(new 
InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8))) {
-        String line = in.readLine();
+        final String line = in.readLine();
         if (line != null) {
           userHz = Long.valueOf(line.trim());
         }
diff --git 
a/processing/src/test/java/org/apache/druid/data/input/impl/prefetch/JsonIteratorTest.java
 
b/processing/src/test/java/org/apache/druid/data/input/impl/prefetch/JsonIteratorTest.java
index 11d4fe1812c..fb09f813e19 100644
--- 
a/processing/src/test/java/org/apache/druid/data/input/impl/prefetch/JsonIteratorTest.java
+++ 
b/processing/src/test/java/org/apache/druid/data/input/impl/prefetch/JsonIteratorTest.java
@@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.druid.java.util.common.jackson.JacksonUtils;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -41,13 +42,16 @@ import java.util.Map;
 
 public class JsonIteratorTest
 {
+  @TempDir
+  public File temporaryFolder;
+
   @Test
   public void testSerde() throws IOException
   {
     final ObjectMapper mapper = new ObjectMapper(new SmileFactory());
-    List<Map<String, Object>> expectedList = 
ImmutableList.of(ImmutableMap.of("key1", "value1", "key2", 2));
-    File testFile = File.createTempFile("testfile", "");
-    TypeReference<Map<String, Object>> type = new TypeReference<>() {};
+    final List<Map<String, Object>> expectedList = 
ImmutableList.of(ImmutableMap.of("key1", "value1", "key2", 2));
+    final File testFile = new File(temporaryFolder, "testfile");
+    final TypeReference<Map<String, Object>> type = new TypeReference<>() {};
     try (FileOutputStream fos = new FileOutputStream(testFile)) {
       final JsonGenerator jg = mapper.getFactory().createGenerator(fos);
       final SerializerProvider serializers = 
mapper.getSerializerProviderInstance();
@@ -59,9 +63,13 @@ public class JsonIteratorTest
       jg.close();
     }
 
-    JsonIterator<Map<String, Object>> testJsonIterator = new 
JsonIterator<>(type, new FileInputStream(testFile), () -> {
-    }, mapper);
-    List<Map<String, Object>> actualList = new ArrayList<>();
+    final JsonIterator<Map<String, Object>> testJsonIterator = new 
JsonIterator<>(
+        type,
+        new FileInputStream(testFile),
+        () -> {},
+        mapper
+    );
+    final List<Map<String, Object>> actualList = new ArrayList<>();
     while (testJsonIterator.hasNext()) {
       actualList.add(testJsonIterator.next());
     }
diff --git a/processing/src/test/java/org/apache/druid/frame/FrameTest.java 
b/processing/src/test/java/org/apache/druid/frame/FrameTest.java
index a11277f833a..334f50e7a39 100644
--- a/processing/src/test/java/org/apache/druid/frame/FrameTest.java
+++ b/processing/src/test/java/org/apache/druid/frame/FrameTest.java
@@ -29,6 +29,7 @@ import org.apache.druid.frame.key.KeyColumn;
 import org.apache.druid.frame.key.KeyOrder;
 import org.apache.druid.frame.testutil.FrameSequenceBuilder;
 import org.apache.druid.java.util.common.ByteBufferUtils;
+import org.apache.druid.java.util.common.FileUtils;
 import org.apache.druid.java.util.common.io.Closer;
 import org.apache.druid.segment.CursorFactory;
 import org.apache.druid.segment.QueryableIndexCursorFactory;
@@ -226,8 +227,9 @@ public class FrameTest
         @Override
         Frame wrap(Closer closer) throws IOException
         {
-          final File file = File.createTempFile("frame-test", "");
-          closer.register(file::delete);
+          final File temporaryFolder = FileUtils.createTempDir("frame-test");
+          final File file = new File(temporaryFolder, "frame");
+          closer.register(() -> FileUtils.deleteDirectory(temporaryFolder));
           Files.write(FRAME_DATA, file);
           final MappedByteBuffer buf = Files.map(file);
           closer.register(() -> ByteBufferUtils.unmap(buf));
@@ -237,8 +239,9 @@ public class FrameTest
         @Override
         Frame decompress(Closer closer) throws IOException
         {
-          final File file = File.createTempFile("frame-test", "");
-          closer.register(file::delete);
+          final File temporaryFolder = FileUtils.createTempDir("frame-test");
+          final File file = new File(temporaryFolder, "frame");
+          closer.register(() -> FileUtils.deleteDirectory(temporaryFolder));
           Files.write(FRAME_DATA_COMPRESSED, file);
           final MappedByteBuffer buf = Files.map(file);
           closer.register(() -> ByteBufferUtils.unmap(buf));
diff --git 
a/processing/src/test/java/org/apache/druid/java/util/common/io/smoosh/SmooshedFileMapperTest.java
 
b/processing/src/test/java/org/apache/druid/java/util/common/io/smoosh/SmooshedFileMapperTest.java
index ce8ec246625..99819175b5f 100644
--- 
a/processing/src/test/java/org/apache/druid/java/util/common/io/smoosh/SmooshedFileMapperTest.java
+++ 
b/processing/src/test/java/org/apache/druid/java/util/common/io/smoosh/SmooshedFileMapperTest.java
@@ -69,7 +69,7 @@ public class SmooshedFileMapperTest
       final SegmentFileChannel writer = 
smoosher.addWithChannel(StringUtils.format("%d", 19), 4);
 
       for (int i = 0; i < 19; ++i) {
-        File tmpFile = File.createTempFile(StringUtils.format("smoosh-%s", i), 
".bin");
+        final File tmpFile = 
temporaryFolder.newFile(StringUtils.format("smoosh-%s.bin", i));
         Files.write(Ints.toByteArray(i), tmpFile);
         smoosher.add(StringUtils.format("%d", i), tmpFile);
         if (i == 10) {
@@ -122,7 +122,7 @@ public class SmooshedFileMapperTest
       writer.write(ByteBuffer.wrap(Ints.toByteArray(19)));
 
       for (int i = 0; i < 19; ++i) {
-        File tmpFile = File.createTempFile(StringUtils.format("smoosh-%s", i), 
".bin");
+        final File tmpFile = 
temporaryFolder.newFile(StringUtils.format("smoosh-%s.bin", i));
         Files.write(Ints.toByteArray(i), tmpFile);
         smoosher.add(StringUtils.format("%d", i), tmpFile);
         tmpFile.delete();
@@ -143,7 +143,7 @@ public class SmooshedFileMapperTest
       writer.write(ByteBuffer.wrap(Ints.toByteArray(19)));
 
       for (int i = 0; i < 19; ++i) {
-        File tmpFile = File.createTempFile(StringUtils.format("smoosh-%s", i), 
".bin");
+        final File tmpFile = 
temporaryFolder.newFile(StringUtils.format("smoosh-%s.bin", i));
         Files.write(Ints.toByteArray(i), tmpFile);
         smoosher.add(StringUtils.format("%s%d", prefix, i), tmpFile);
         tmpFile.delete();
diff --git 
a/processing/src/test/java/org/apache/druid/query/DoubleStorageTest.java 
b/processing/src/test/java/org/apache/druid/query/DoubleStorageTest.java
index 5886bb524e0..7e7e5446423 100644
--- a/processing/src/test/java/org/apache/druid/query/DoubleStorageTest.java
+++ b/processing/src/test/java/org/apache/druid/query/DoubleStorageTest.java
@@ -27,7 +27,6 @@ import org.apache.druid.data.input.impl.DimensionsSpec;
 import org.apache.druid.data.input.impl.MapInputRowParser;
 import org.apache.druid.data.input.impl.TimestampSpec;
 import org.apache.druid.java.util.common.DateTimes;
-import org.apache.druid.java.util.common.FileUtils;
 import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.query.aggregation.DoubleSumAggregatorFactory;
 import org.apache.druid.query.metadata.SegmentMetadataQueryConfig;
@@ -59,12 +58,14 @@ import 
org.apache.druid.segment.incremental.IncrementalIndexSchema;
 import org.apache.druid.segment.incremental.OnheapIncrementalIndex;
 import 
org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory;
 import org.apache.druid.testing.InitializedNullHandlingTest;
+import org.apache.druid.testing.TemporaryFolderExtension;
 import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.params.ParameterizedClass;
 import org.junit.jupiter.params.provider.MethodSource;
 
@@ -133,6 +134,9 @@ public class DoubleStorageTest extends 
InitializedNullHandlingTest
   private final SegmentAnalysis expectedSegmentAnalysis;
   private final String storeDoubleAs;
 
+  @RegisterExtension
+  public final TemporaryFolderExtension temporaryFolder = 
TemporaryFolderExtension.testCaseScoped();
+
   public DoubleStorageTest(
       String storeDoubleAs,
       SegmentAnalysis expectedSegmentAnalysis
@@ -256,7 +260,7 @@ public class DoubleStorageTest extends 
InitializedNullHandlingTest
   @BeforeEach
   public void setup() throws IOException
   {
-    index = buildIndex(storeDoubleAs);
+    index = buildIndex(storeDoubleAs, temporaryFolder.newFolder());
   }
 
   @Test
@@ -318,7 +322,8 @@ public class DoubleStorageTest extends 
InitializedNullHandlingTest
     ScanQueryRunnerTest.verify(expectedResults, results);
   }
 
-  private static QueryableIndex buildIndex(String storeDoubleAsFloat) throws 
IOException
+  private static QueryableIndex buildIndex(final String storeDoubleAsFloat, 
final File indexDirectory)
+      throws IOException
   {
     String oldValue = 
System.getProperty(ColumnHolder.DOUBLE_STORAGE_TYPE_PROPERTY);
     System.setProperty(ColumnHolder.DOUBLE_STORAGE_TYPE_PROPERTY, 
storeDoubleAsFloat);
@@ -351,12 +356,8 @@ public class DoubleStorageTest extends 
InitializedNullHandlingTest
     } else {
       System.setProperty(ColumnHolder.DOUBLE_STORAGE_TYPE_PROPERTY, oldValue);
     }
-    File someTmpFile = File.createTempFile("billy", "yay");
-    someTmpFile.delete();
-    FileUtils.mkdirp(someTmpFile);
-    INDEX_MERGER_V9.persist(index, someTmpFile, IndexSpec.getDefault(), null);
-    someTmpFile.delete();
-    return INDEX_IO.loadIndex(someTmpFile);
+    INDEX_MERGER_V9.persist(index, indexDirectory, IndexSpec.getDefault(), 
null);
+    return INDEX_IO.loadIndex(indexDirectory);
   }
 
   @AfterEach
diff --git 
a/processing/src/test/java/org/apache/druid/segment/EmptyIndexTest.java 
b/processing/src/test/java/org/apache/druid/segment/EmptyIndexTest.java
index e3b169474a1..2113da5eadb 100644
--- a/processing/src/test/java/org/apache/druid/segment/EmptyIndexTest.java
+++ b/processing/src/test/java/org/apache/druid/segment/EmptyIndexTest.java
@@ -65,13 +65,7 @@ public class EmptyIndexTest
   @Test
   public void testEmptyIndex() throws Exception
   {
-    File tmpDir = File.createTempFile("emptyIndex", "");
-    if (!tmpDir.delete()) {
-      throw new IllegalStateException("tmp delete failed");
-    }
-    if (!tmpDir.mkdir()) {
-      throw new IllegalStateException("tmp mkdir failed");
-    }
+    final File tmpDir = FileUtils.createTempDir("emptyIndex");
 
     try {
       IncrementalIndex emptyIndex = new OnheapIncrementalIndex.Builder()
diff --git 
a/processing/src/test/java/org/apache/druid/segment/IndexMergerV9WithSpatialIndexTest.java
 
b/processing/src/test/java/org/apache/druid/segment/IndexMergerV9WithSpatialIndexTest.java
index 5e100be81be..cf436ccdcd7 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/IndexMergerV9WithSpatialIndexTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/IndexMergerV9WithSpatialIndexTest.java
@@ -30,6 +30,7 @@ import org.apache.druid.java.util.common.DateTimes;
 import org.apache.druid.java.util.common.FileUtils;
 import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.java.util.common.granularity.Granularities;
+import org.apache.druid.java.util.common.io.Closer;
 import org.apache.druid.query.Druids;
 import org.apache.druid.query.FinalizeResultsQueryRunner;
 import org.apache.druid.query.QueryPlus;
@@ -51,6 +52,7 @@ import 
org.apache.druid.segment.incremental.OnheapIncrementalIndex;
 import org.apache.druid.segment.writeout.SegmentWriteOutMediumFactory;
 import org.apache.druid.testing.InitializedNullHandlingTest;
 import org.joda.time.Interval;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedClass;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -73,6 +75,7 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
 {
 
   public static final int NUM_POINTS = 5000;
+  private static final Closer RESOURCE_CLOSER = Closer.create();
   private static Interval DATA_INTERVAL = 
Intervals.of("2013-01-01/2013-01-07");
 
   private static AggregatorFactory[] METRIC_AGGS = new AggregatorFactory[]{
@@ -90,7 +93,7 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
       IndexIO indexIO = TestHelper.getTestIndexIO();
 
       final IndexSpec indexSpec = IndexSpec.getDefault();
-      final IncrementalIndex rtIndex = makeIncrementalIndex();
+      final IncrementalIndex rtIndex = 
RESOURCE_CLOSER.register(makeIncrementalIndex());
       final QueryableIndex mMappedTestIndex = makeQueryableIndex(indexSpec, 
indexMergerV9, indexIO);
       final QueryableIndex mergedRealtimeIndex = 
makeMergedQueryableIndex(indexSpec, indexMergerV9, indexIO);
       argumentArrays.add(new Object[] {new IncrementalIndexSegment(rtIndex, 
null)});
@@ -255,17 +258,10 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
   private static QueryableIndex makeQueryableIndex(IndexSpec indexSpec, 
IndexMergerV9 indexMergerV9, IndexIO indexIO)
       throws IOException
   {
-    IncrementalIndex theIndex = makeIncrementalIndex();
-    File tmpFile = File.createTempFile("billy", "yay");
-    tmpFile.delete();
-    FileUtils.mkdirp(tmpFile);
-
-    try {
+    final File tmpFile = createTempDir("spatial-index");
+    try (final IncrementalIndex theIndex = makeIncrementalIndex()) {
       indexMergerV9.persist(theIndex, tmpFile, indexSpec, null);
-      return indexIO.loadIndex(tmpFile);
-    }
-    finally {
-      FileUtils.deleteDirectory(tmpFile);
+      return RESOURCE_CLOSER.register(indexIO.loadIndex(tmpFile));
     }
   }
 
@@ -275,8 +271,8 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
       IndexIO indexIO
   )
   {
-    try {
-      IncrementalIndex first = new OnheapIncrementalIndex.Builder()
+    try (final Closer closer = Closer.create()) {
+      final IncrementalIndex first = closer.register(new 
OnheapIncrementalIndex.Builder()
           .setIndexSchema(
               new IncrementalIndexSchema.Builder()
                   .withMinTimestamp(DATA_INTERVAL.getStartMillis())
@@ -300,9 +296,9 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
                   ).build()
           )
           .setMaxRowCount(1000)
-          .build();
+          .build());
 
-      IncrementalIndex second = new OnheapIncrementalIndex.Builder()
+      final IncrementalIndex second = closer.register(new 
OnheapIncrementalIndex.Builder()
           .setIndexSchema(
               new IncrementalIndexSchema.Builder()
                   .withMinTimestamp(DATA_INTERVAL.getStartMillis())
@@ -326,9 +322,9 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
                   ).build()
           )
           .setMaxRowCount(1000)
-          .build();
+          .build());
 
-      IncrementalIndex third = new OnheapIncrementalIndex.Builder()
+      final IncrementalIndex third = closer.register(new 
OnheapIncrementalIndex.Builder()
           .setIndexSchema(
               new IncrementalIndexSchema.Builder()
                   .withMinTimestamp(DATA_INTERVAL.getStartMillis())
@@ -352,7 +348,7 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
                   ).build()
           )
           .setMaxRowCount(NUM_POINTS)
-          .build();
+          .build());
 
       first.add(
           new MapBasedInputRow(
@@ -476,13 +472,12 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
       }
 
 
-      File tmpFile = File.createTempFile("yay", "who");
-      tmpFile.delete();
+      final File tmpFile = createTempDir("spatial-index-merge");
 
-      File firstFile = new File(tmpFile, "first");
-      File secondFile = new File(tmpFile, "second");
-      File thirdFile = new File(tmpFile, "third");
-      File mergedFile = new File(tmpFile, "merged");
+      final File firstFile = new File(tmpFile, "first");
+      final File secondFile = new File(tmpFile, "second");
+      final File thirdFile = new File(tmpFile, "third");
+      final File mergedFile = new File(tmpFile, "merged");
 
       FileUtils.mkdirp(firstFile);
       FileUtils.mkdirp(secondFile);
@@ -493,31 +488,21 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
       indexMergerV9.persist(second, DATA_INTERVAL, secondFile, indexSpec, 
null);
       indexMergerV9.persist(third, DATA_INTERVAL, thirdFile, indexSpec, null);
 
-      try {
-        QueryableIndex mergedRealtime = indexIO.loadIndex(
-            indexMergerV9.mergeQueryableIndex(
-                Arrays.asList(
-                    indexIO.loadIndex(firstFile),
-                    indexIO.loadIndex(secondFile),
-                    indexIO.loadIndex(thirdFile)
-                ),
-                true,
-                METRIC_AGGS,
-                mergedFile,
-                indexSpec,
-                null,
-                -1
-            )
-        );
-        return mergedRealtime;
-
-      }
-      finally {
-        FileUtils.deleteDirectory(firstFile);
-        FileUtils.deleteDirectory(secondFile);
-        FileUtils.deleteDirectory(thirdFile);
-        FileUtils.deleteDirectory(mergedFile);
-      }
+      return RESOURCE_CLOSER.register(indexIO.loadIndex(
+          indexMergerV9.mergeQueryableIndex(
+              Arrays.asList(
+                  closer.register(indexIO.loadIndex(firstFile)),
+                  closer.register(indexIO.loadIndex(secondFile)),
+                  closer.register(indexIO.loadIndex(thirdFile))
+              ),
+              true,
+              METRIC_AGGS,
+              mergedFile,
+              indexSpec,
+              null,
+              -1
+          )
+      ));
 
     }
     catch (IOException e) {
@@ -525,6 +510,19 @@ public class IndexMergerV9WithSpatialIndexTest extends 
InitializedNullHandlingTe
     }
   }
 
+  private static File createTempDir(final String prefix)
+  {
+    final File tmpFile = FileUtils.createTempDir(prefix);
+    RESOURCE_CLOSER.register(() -> FileUtils.deleteDirectory(tmpFile));
+    return tmpFile;
+  }
+
+  @AfterAll
+  public static void tearDown() throws IOException
+  {
+    RESOURCE_CLOSER.close();
+  }
+
   private final Segment segment;
 
   public IndexMergerV9WithSpatialIndexTest(Segment segment)
diff --git a/processing/src/test/java/org/apache/druid/segment/TestIndex.java 
b/processing/src/test/java/org/apache/druid/segment/TestIndex.java
index fd7ef370b1d..3b383bccc91 100644
--- a/processing/src/test/java/org/apache/druid/segment/TestIndex.java
+++ b/processing/src/test/java/org/apache/druid/segment/TestIndex.java
@@ -270,8 +270,8 @@ public class TestIndex
       IncrementalIndex top = makeSampleNumericTopIncrementalIndex();
       IncrementalIndex bottom = makeSampleNumericBottomIncrementalIndex();
 
-      File tmpFile = File.createTempFile("yay", "who");
-      tmpFile.delete();
+      final File tmpFile = FileUtils.createTempDir("test-index-merge");
+      tmpFile.deleteOnExit();
 
       File topFile = new File(tmpFile, "top");
       File bottomFile = new File(tmpFile, "bottom");
@@ -520,9 +520,10 @@ public class TestIndex
   public static QueryableIndex persistAndMemoryMap(IncrementalIndex index, 
IndexSpec indexSpec)
   {
     try {
-      File someTmpFile = File.createTempFile("billy", "yay");
-      someTmpFile = persist(index, indexSpec, someTmpFile);
-      return INDEX_IO.loadIndex(someTmpFile);
+      final File temporaryFolder = FileUtils.createTempDir("test-index");
+      temporaryFolder.deleteOnExit();
+      final File persistedFile = persist(index, indexSpec, new 
File(temporaryFolder, "index"));
+      return INDEX_IO.loadIndex(persistedFile);
     }
     catch (IOException e) {
       throw new RuntimeException(e);
diff --git 
a/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterBonusTest.java
 
b/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterBonusTest.java
index f0c0090fc92..f3f8e35fe0f 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterBonusTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterBonusTest.java
@@ -246,10 +246,8 @@ public class SpatialFilterBonusTest
   private static QueryableIndex makeQueryableIndex(IndexSpec indexSpec, 
IndexMerger indexMerger, IndexIO indexIO)
       throws IOException
   {
-    IncrementalIndex theIndex = makeIncrementalIndex();
-    File tmpFile = File.createTempFile("billy", "yay");
-    tmpFile.delete();
-    FileUtils.mkdirp(tmpFile);
+    final IncrementalIndex theIndex = makeIncrementalIndex();
+    final File tmpFile = FileUtils.createTempDir("spatial-filter");
     tmpFile.deleteOnExit();
 
     indexMerger.persist(theIndex, tmpFile, indexSpec, null);
@@ -424,8 +422,8 @@ public class SpatialFilterBonusTest
       }
 
 
-      File tmpFile = File.createTempFile("yay", "who");
-      tmpFile.delete();
+      final File tmpFile = FileUtils.createTempDir("spatial-filter-merge");
+      tmpFile.deleteOnExit();
 
       File firstFile = new File(tmpFile, "first");
       File secondFile = new File(tmpFile, "second");
diff --git 
a/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterTest.java
 
b/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterTest.java
index 16ac7f2d423..16c65a209ec 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/filter/SpatialFilterTest.java
@@ -300,10 +300,8 @@ public class SpatialFilterTest extends 
InitializedNullHandlingTest
 
   private static QueryableIndex makeQueryableIndex(IndexSpec indexSpec) throws 
IOException
   {
-    IncrementalIndex theIndex = makeIncrementalIndex();
-    File tmpFile = File.createTempFile("billy", "yay");
-    tmpFile.delete();
-    FileUtils.mkdirp(tmpFile);
+    final IncrementalIndex theIndex = makeIncrementalIndex();
+    final File tmpFile = FileUtils.createTempDir("spatial-filter");
     tmpFile.deleteOnExit();
 
     INDEX_MERGER.persist(theIndex, tmpFile, indexSpec, null);
@@ -513,8 +511,8 @@ public class SpatialFilterTest extends 
InitializedNullHandlingTest
       }
 
 
-      File tmpFile = File.createTempFile("yay", "who");
-      tmpFile.delete();
+      final File tmpFile = FileUtils.createTempDir("spatial-filter-merge");
+      tmpFile.deleteOnExit();
 
       File firstFile = new File(tmpFile, "first");
       File secondFile = new File(tmpFile, "second");
diff --git 
a/server/src/test/java/org/apache/druid/metadata/input/SqlEntityTest.java 
b/server/src/test/java/org/apache/druid/metadata/input/SqlEntityTest.java
index 8fc350cf9e1..e9c1d7945b6 100644
--- a/server/src/test/java/org/apache/druid/metadata/input/SqlEntityTest.java
+++ b/server/src/test/java/org/apache/druid/metadata/input/SqlEntityTest.java
@@ -27,6 +27,7 @@ import org.apache.druid.data.input.InputRow;
 import org.apache.druid.data.input.MapBasedInputRow;
 import org.apache.druid.metadata.TestDerbyConnector;
 import org.apache.druid.segment.TestHelper;
+import org.apache.druid.testing.TemporaryFolderExtension;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -43,6 +44,8 @@ public class SqlEntityTest
 {
   @RegisterExtension
   public final TestDerbyConnector.DerbyConnectorRule derbyConnectorRule = new 
TestDerbyConnector.DerbyConnectorRule();
+  @RegisterExtension
+  public final TemporaryFolderExtension temporaryFolder = 
TemporaryFolderExtension.testCaseScoped();
 
   private final ObjectMapper mapper = TestHelper.makeSmileMapper();
   private TestDerbyConnector derbyConnector;
@@ -65,7 +68,7 @@ public class SqlEntityTest
     derbyConnector = derbyConnectorRule.getConnector();
     SqlTestUtils testUtils = new SqlTestUtils(derbyConnector);
     final InputRow expectedRow = testUtils.createTableWithRows(TABLE_NAME_1, 
1).get(0);
-    File tmpFile = File.createTempFile("testQueryResults", "");
+    final File tmpFile = temporaryFolder.newFile("testQueryResults");
     final String actualJson;
     try (final InputEntity.CleanableFile queryResult = 
SqlEntity.openCleanableFile(
         VALID_SQL,
@@ -90,7 +93,7 @@ public class SqlEntityTest
     derbyConnector = derbyConnectorRule.getConnector();
     SqlTestUtils testUtils = new SqlTestUtils(derbyConnector);
     testUtils.createTableWithRows(TABLE_NAME_1, 1);
-    File tmpFile = File.createTempFile("testQueryResults", "");
+    final File tmpFile = temporaryFolder.newFile("testQueryResults");
     Assertions.assertTrue(tmpFile.exists());
 
     Assertions.assertThrows(
diff --git 
a/server/src/test/java/org/apache/druid/metadata/input/SqlInputSourceTest.java 
b/server/src/test/java/org/apache/druid/metadata/input/SqlInputSourceTest.java
index b8d3af57f4c..f2ad9370f0a 100644
--- 
a/server/src/test/java/org/apache/druid/metadata/input/SqlInputSourceTest.java
+++ 
b/server/src/test/java/org/apache/druid/metadata/input/SqlInputSourceTest.java
@@ -38,15 +38,14 @@ import org.apache.druid.data.input.InputStats;
 import org.apache.druid.data.input.impl.DimensionsSpec;
 import org.apache.druid.data.input.impl.InputStatsImpl;
 import org.apache.druid.data.input.impl.TimestampSpec;
-import org.apache.druid.java.util.common.FileUtils;
 import org.apache.druid.java.util.common.parsers.CloseableIterator;
 import org.apache.druid.metadata.MetadataStorageConnectorConfig;
 import org.apache.druid.metadata.SQLInputSourceDatabaseConnector;
 import org.apache.druid.metadata.TestDerbyConnector;
 import org.apache.druid.segment.TestHelper;
 import org.apache.druid.server.initialization.JdbcAccessSecurityConfig;
+import org.apache.druid.testing.TemporaryFolderExtension;
 import org.easymock.EasyMock;
-import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -66,7 +65,6 @@ import java.util.stream.Stream;
 
 public class SqlInputSourceTest
 {
-  private static final List<File> INPUT_SOURCE_TMP_DIRS = new ArrayList<>();
   private final String TABLE_1 = "FOOS_TABLE_1";
   private final String TABLE_2 = "FOOS_TABLE_2";
 
@@ -80,6 +78,8 @@ public class SqlInputSourceTest
 
   @RegisterExtension
   public final TestDerbyConnector.DerbyConnectorRule derbyConnectorRule = new 
TestDerbyConnector.DerbyConnectorRule();
+  @RegisterExtension
+  public final TemporaryFolderExtension temporaryFolder = 
TemporaryFolderExtension.testCaseScoped();
   private final ObjectMapper mapper = TestHelper.makeSmileMapper();
   private TestDerbyConnector derbyConnector;
 
@@ -91,24 +91,9 @@ public class SqlInputSourceTest
     }
   }
 
-  @AfterAll
-  public static void teardown() throws IOException
-  {
-    for (File dir : INPUT_SOURCE_TMP_DIRS) {
-      org.apache.commons.io.FileUtils.forceDelete(dir);
-    }
-  }
-
   private File createInputSourceTmpDir(String dirSuffix) throws IOException
   {
-    final File inputSourceTempDir = File.createTempFile(
-        SqlInputSourceTest.class.getSimpleName(),
-        dirSuffix
-    );
-    org.apache.commons.io.FileUtils.forceDelete(inputSourceTempDir);
-    FileUtils.mkdirp(inputSourceTempDir);
-    INPUT_SOURCE_TMP_DIRS.add(inputSourceTempDir);
-    return inputSourceTempDir;
+    return temporaryFolder.newFolder(SqlInputSourceTest.class.getSimpleName() 
+ dirSuffix);
   }
 
   @Test
diff --git 
a/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPullerTest.java
 
b/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPullerTest.java
index 72facd2c48d..ae882dbcdd2 100644
--- 
a/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPullerTest.java
+++ 
b/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPullerTest.java
@@ -79,7 +79,7 @@ public class LocalDataSegmentPullerTest
   @Test
   public void simpleGZTest() throws IOException, SegmentLoadingException
   {
-    File zipFile = File.createTempFile("gztest", ".gz");
+    final File zipFile = temporaryFolder.newFile("gztest.gz");
     File unZipFile = new File(
         tmpDir,
         Files.getNameWithoutExtension(
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java
index 8da0570f7b4..7e4e8612458 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java
@@ -109,6 +109,7 @@ import javax.annotation.Nullable;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1555,14 +1556,13 @@ public class BaseCalciteQueryTest extends 
CalciteTestBase
   public File getResourceAsTemporaryFile(final String resource)
   {
     final File file = newTempFile("resourceAsTempFile");
-    final InputStream stream = getClass().getResourceAsStream(resource);
-
-    if (stream == null) {
-      throw new RE(StringUtils.format("No such resource [%s]", resource));
-    }
-
-    try {
-      ByteStreams.copy(stream, Files.newOutputStream(file.toPath()));
+    try (final InputStream stream = 
BaseCalciteQueryTest.class.getResourceAsStream(resource)) {
+      if (stream == null) {
+        throw new RE(StringUtils.format("No such resource [%s]", resource));
+      }
+      try (final OutputStream outputStream = 
Files.newOutputStream(file.toPath())) {
+        ByteStreams.copy(stream, outputStream);
+      }
     }
     catch (IOException e) {
       throw new RuntimeException(e);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to