You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2025/04/02 02:44:20 UTC

(solr) branch main updated: SOLR-16903: Path: fixes for tests (#3300)

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

dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new b832db750aa SOLR-16903: Path: fixes for tests (#3300)
b832db750aa is described below

commit b832db750aab2f097110cef040174c80f86493bc
Author: Matthew Biscocho <54...@users.noreply.github.com>
AuthorDate: Tue Apr 1 22:44:13 2025 -0400

    SOLR-16903: Path: fixes for tests (#3300)
    
    * Need FilterPath.unwrap sometimes
    * Fix Path.startsWith(String) usage.
    * ZkSubcommandsTest wasn't actually checking downloaded with original.
    
    
    Co-authored-by: David Smiley <ds...@apache.org>
---
 .../org/apache/solr/cli/ZkSubcommandsTest.java     | 83 ++++++++++------------
 .../solr/cloud/MissingSegmentRecoveryTest.java     |  4 +-
 .../solr/handler/TestReplicationHandler.java       |  4 +-
 .../solr/handler/TestStressThreadBackup.java       |  3 +-
 .../org/apache/solr/update/CustomTLogDirTest.java  |  2 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |  2 +-
 6 files changed, 47 insertions(+), 51 deletions(-)

diff --git a/solr/core/src/test/org/apache/solr/cli/ZkSubcommandsTest.java b/solr/core/src/test/org/apache/solr/cli/ZkSubcommandsTest.java
index 4dc8a159b7a..6fce5e80127 100644
--- a/solr/core/src/test/org/apache/solr/cli/ZkSubcommandsTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/ZkSubcommandsTest.java
@@ -26,6 +26,7 @@ import java.nio.file.Path;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
+import org.apache.lucene.tests.mockfile.FilterPath;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.cloud.AbstractDistribZkTestBase;
 import org.apache.solr.cloud.AbstractZkTestCase;
@@ -376,10 +377,11 @@ public class ZkSubcommandsTest extends SolrTestCaseJ4 {
     assertEquals(confsetname, collectionProps.getStr("configName"));
 
     // test down config
-    Path configSetDir =
-        tmpDir.resolve(
-            "solrtest-confdropspot-" + this.getClass().getName() + "-" + System.nanoTime());
-    assertFalse(Files.exists(configSetDir));
+    Path destDir =
+        FilterPath.unwrap(
+            tmpDir.resolve(
+                "solrtest-confdropspot-" + this.getClass().getName() + "-" + System.nanoTime()));
+    assertFalse(Files.exists(destDir));
 
     args =
         new String[] {
@@ -387,15 +389,14 @@ public class ZkSubcommandsTest extends SolrTestCaseJ4 {
           "--conf-name",
           confsetname,
           "--conf-dir",
-          configSetDir.toString(),
+          destDir.toString(),
           "-z",
           zkServer.getZkAddress()
         };
 
     assertEquals(0, CLITestHelper.runTool(args, ConfigSetDownloadTool.class));
 
-    Path confSetDir = configSetDir.resolve("conf");
-    try (Stream<Path> filesStream = Files.list(confSetDir)) {
+    try (Stream<Path> filesStream = Files.list(destDir.resolve("conf"))) {
       List<Path> files = filesStream.toList();
       zkFiles =
           zkClient.getChildren(ZkConfigSetService.CONFIGS_ZKNODE + "/" + confsetname, null, true);
@@ -406,45 +407,35 @@ public class ZkSubcommandsTest extends SolrTestCaseJ4 {
       assertEquals("Comparing downloaded files to what is in ZK", files.size(), zkFiles.size());
     }
 
-    Path sourceConfDir = ExternalPaths.TECHPRODUCTS_CONFIGSET;
-    // filter out all directories starting with . (e.g. .svn)
-    try (Stream<Path> stream = Files.walk(sourceConfDir)) {
-      List<Path> files =
-          stream
-              .filter(Files::isRegularFile)
-              .filter(path -> path.getFileName().startsWith("."))
-              .toList();
-      files.forEach(
-          (sourceFile) -> {
-            int indexOfRelativePath =
-                sourceFile
-                    .toString()
-                    .lastIndexOf(
-                        "sample_techproducts_configs"
-                            + sourceFile.getFileSystem().getSeparator()
-                            + "conf");
-            String relativePathofFile = sourceFile.toString().substring(indexOfRelativePath + 33);
-            Path downloadedFile = confDir.resolve(relativePathofFile);
-            if (ConfigSetService.UPLOAD_FILENAME_EXCLUDE_PATTERN
-                .matcher(relativePathofFile)
-                .matches()) {
-              assertFalse(
-                  sourceFile + " exists in ZK, downloaded:" + downloadedFile,
-                  Files.exists(downloadedFile));
-            } else {
-              assertTrue(
-                  downloadedFile + " does not exist source:" + sourceFile,
-                  Files.exists(downloadedFile));
-              try {
-                assertEquals(
-                    relativePathofFile + " content changed",
-                    -1,
-                    Files.mismatch(sourceFile, downloadedFile));
-              } catch (IOException e) {
-                throw new RuntimeException(e);
-              }
-            }
-          });
+    // compare the original source with the downloaded destination
+    try (Stream<Path> stream = Files.walk(ExternalPaths.TECHPRODUCTS_CONFIGSET)) {
+      stream
+          .filter(Files::isRegularFile)
+          .forEach(
+              (sourceFile) -> {
+                Path sourceFileRelative =
+                    ExternalPaths.TECHPRODUCTS_CONFIGSET.relativize(sourceFile);
+                Path downloadedFile = destDir.resolve("conf").resolve(sourceFileRelative);
+                if (ConfigSetService.UPLOAD_FILENAME_EXCLUDE_PATTERN
+                    .matcher(sourceFileRelative.toString())
+                    .matches()) {
+                  assertFalse(
+                      sourceFile + " exists in ZK, downloaded:" + downloadedFile,
+                      Files.exists(downloadedFile));
+                } else {
+                  assertTrue(
+                      downloadedFile + " does not exist source:" + sourceFile,
+                      Files.exists(downloadedFile));
+                  try {
+                    assertEquals(
+                        sourceFileRelative + " content changed",
+                        -1,
+                        Files.mismatch(sourceFile, downloadedFile));
+                  } catch (IOException e) {
+                    throw new RuntimeException(e);
+                  }
+                }
+              });
     }
 
     // test reset zk
diff --git a/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java b/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java
index 084bf5a254e..93610a7cff1 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java
@@ -114,7 +114,9 @@ public class MissingSegmentRecoveryTest extends SolrCloudTestCase {
         cluster.getReplicaJetty(replica).getCoreContainer().getCore(replica.getCoreName())) {
       Path indexDir = Path.of(core.getDataDir(), "index");
       try (Stream<Path> files = Files.list(indexDir)) {
-        return files.filter((file) -> file.getFileName().startsWith("segments_")).toList();
+        return files
+            .filter((file) -> file.getFileName().toString().startsWith("segments_"))
+            .toList();
       }
     }
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
index 29abe10f3e7..1a1d0ac3265 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
@@ -1038,7 +1038,9 @@ public class TestReplicationHandler extends SolrTestCaseJ4 {
       return (int)
           files
               .filter(
-                  (file) -> Files.isDirectory(file) && !file.getFileName().startsWith("snapshot"))
+                  (file) ->
+                      Files.isDirectory(file)
+                          && !file.getFileName().toString().startsWith("snapshot"))
               .count();
     }
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java b/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java
index e8ee01898d3..5357fc45e82 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java
@@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.Term;
@@ -288,7 +289,7 @@ public class TestStressThreadBackup extends SolrCloudTestCase {
           numBackupsToCheck);
       try (Stream<Path> files = Files.list(backupDir)) {
         // insure consistent (arbitrary) ordering before shuffling
-        final List<Path> allBackups = files.sorted().toList();
+        final List<Path> allBackups = files.sorted().collect(Collectors.toList());
         Collections.shuffle(allBackups, random());
         for (int i = 0; i < numBackupsToCheck; i++) {
           final Path backup = allBackups.get(i);
diff --git a/solr/core/src/test/org/apache/solr/update/CustomTLogDirTest.java b/solr/core/src/test/org/apache/solr/update/CustomTLogDirTest.java
index 1f575cc5406..c796c8356de 100644
--- a/solr/core/src/test/org/apache/solr/update/CustomTLogDirTest.java
+++ b/solr/core/src/test/org/apache/solr/update/CustomTLogDirTest.java
@@ -53,7 +53,7 @@ public class CustomTLogDirTest extends SolrTestCaseJ4 {
 
     Path instanceDir = FilterPath.unwrap(coreRootDir.resolve(collectionName));
 
-    Path ulogDir = LuceneTestCase.createTempDir();
+    Path ulogDir = FilterPath.unwrap(LuceneTestCase.createTempDir());
     // absolute path spec that falls outside of the instance and data dirs for the
     // associated core, is assumed to already by namespaced by purpose (tlog). We
     // expect it to be further namespaced by core name.
diff --git a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
index 0e156982941..991cd178f89 100644
--- a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
@@ -1172,7 +1172,7 @@ public abstract class BaseDistributedSearchTestCase extends SolrTestCaseJ4 {
    * is in place.
    */
   protected void seedSolrHome(Path jettyHome) throws IOException {
-    PathUtils.copyDirectory(getSolrHome(), jettyHome);
+    PathUtils.copyDirectory(getSolrHome(), jettyHome, StandardCopyOption.REPLACE_EXISTING);
     String solrxml = getSolrXml();
     if (solrxml != null) {
       Files.copy(