diff --git a/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesIT.java b/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesIT.java
index bb63a4a..8fad5ed 100644
--- a/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesIT.java
+++ b/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesIT.java
@@ -39,9 +39,9 @@
 import com.google.inject.name.Named;
 import java.io.File;
 import java.nio.file.Path;
-import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -68,6 +68,7 @@
   private static final String TEST_CACHE_FILENAME_TUNED =
       TEST_CACHE_NAME + "_" + TEST_CACHE_VERSION + AutoAdjustCaches.TUNED_INFIX;
   private static final String TEST_CACHE_KEY_100_CHARS = new String(new char[100]);
+  private static final Function<String, Boolean> MATCH_ALL = (n) -> true;
 
   private static final ImmutableList<String> EXPECTED_CACHES =
       ImmutableList.of(MERGEABILITY, DIFF, DIFF_SUMMARY, ACCOUNTS, PERSISTED_PROJECTS);
@@ -127,16 +128,8 @@
     adminSshSession.exec(SSH_CMD);
 
     adminSshSession.assertSuccess();
-    File cacheDir = sitePaths.resolve(cfg.getString("cache", null, "directory")).toFile();
     Set<String> tunedCaches =
-        Stream.of(Objects.requireNonNull(cacheDir.listFiles()))
-            .filter(file -> !file.isDirectory())
-            .map(File::getName)
-            .filter(
-                n ->
-                    n.contains(TUNED_INFIX)
-                        && n.matches(".*(" + String.join("|", EXPECTED_CACHES) + ").*"))
-            .collect(Collectors.toSet());
+        tunedFileNamesSet(n -> n.matches(".*(" + String.join("|", EXPECTED_CACHES) + ").*"));
 
     assertThat(tunedCaches.size()).isEqualTo(EXPECTED_CACHES.size());
   }
@@ -152,7 +145,7 @@
 
     assertThat(configResult(tuneResult, CONFIG_HEADER).getSubsections("cache"))
         .doesNotContain(TEST_CACHE_NAME);
-    assertThat(Joiner.on('\n').join(listTunedFileNames()))
+    assertThat(Joiner.on('\n').join(tunedFileNamesSet(MATCH_ALL)))
         .doesNotContain(TEST_CACHE_FILENAME_TUNED);
   }
 
@@ -164,7 +157,9 @@
 
     assertThat(configResult(tuneResult, CONFIG_HEADER).getSubsections("cache"))
         .contains(TEST_CACHE_NAME);
-    assertThat(Joiner.on('\n').join(listTunedFileNames())).contains(TEST_CACHE_FILENAME_TUNED);
+    assertThat(
+            Joiner.on('\n').join(tunedFileNamesSet((n) -> n.contains(TEST_CACHE_FILENAME_TUNED))))
+        .isNotEmpty();
   }
 
   @Test
@@ -185,7 +180,7 @@
     resp.assertCreated();
 
     assertThat(configResult(resp.getEntityContent(), null).getSubsections("cache")).isNotEmpty();
-    assertThat(listTunedFileNames()).isNotEmpty();
+    assertThat(tunedFileNamesSet(MATCH_ALL)).isNotEmpty();
   }
 
   private Config configResult(String result, @Nullable String configHeader)
@@ -195,12 +190,12 @@
     return configResult;
   }
 
-  private List<String> listTunedFileNames() {
+  private Set<String> tunedFileNamesSet(Function<String, Boolean> fileNameFilter) {
     Path cachePath = sitePaths.resolve(cfg.getString("cache", null, "directory"));
     return Stream.of(Objects.requireNonNull(cachePath.toFile().listFiles()))
         .filter(file -> !file.isDirectory())
         .map(File::getName)
-        .filter(n -> n.contains(TUNED_INFIX))
-        .collect(Collectors.toList());
+        .filter(n -> n.contains(TUNED_INFIX) && fileNameFilter.apply(n))
+        .collect(Collectors.toSet());
   }
 }
