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

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


The following commit(s) were added to refs/heads/branch_9x by this push:
     new eb07d72af28 SOLR-17379: Fix date parsing in Java 23, remove Lucene 
TestSecurityManager (#3154)
eb07d72af28 is described below

commit eb07d72af281ea426b8d44006636fcf81094b745
Author: Houston Putman <[email protected]>
AuthorDate: Tue Feb 4 11:36:45 2025 -0800

    SOLR-17379: Fix date parsing in Java 23, remove Lucene TestSecurityManager 
(#3154)
    
    * Fix system exit in test - by removing that part of the test
    
    (cherry picked from commit b779ed0590e36f69f7d1ce17e99dc936ab46752f)
    
    Co-authored-by: Chris Hostetter <[email protected]>
---
 gradle/testing/randomization.gradle                |  2 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |  8 +++-
 .../solr/security/BasicAuthIntegrationTest.java    | 36 +++-----------
 .../ParsingFieldUpdateProcessorsTest.java          | 55 ++++++++++------------
 4 files changed, 39 insertions(+), 62 deletions(-)

diff --git a/gradle/testing/randomization.gradle 
b/gradle/testing/randomization.gradle
index 68405f39404..63c177a6400 100644
--- a/gradle/testing/randomization.gradle
+++ b/gradle/testing/randomization.gradle
@@ -214,7 +214,7 @@ allprojects {
                   javaSecurityPolicy: javaSecurityPolicy
               )
           )
-          systemProperty 'java.security.manager', 
"org.apache.lucene.tests.util.TestSecurityManager"
+          systemProperty 'java.security.manager', "default"
 
           def gradleUserHome = project.gradle.getGradleUserHomeDir()
           systemProperty 'gradle.lib.dir', 
Paths.get(project.class.location.toURI()).parent.toAbsolutePath().toString().replace('\\',
 '/')
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
 
b/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
index f06f4a4af68..69b9af7e990 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
@@ -186,7 +186,13 @@ public class ParseDateFieldUpdateProcessorFactory extends 
FieldMutatingUpdatePro
           return Date.from(parseInstant(parser, srcStringVal, parsePosition));
         } catch (DateTimeParseException e) {
           if (log.isDebugEnabled()) {
-            log.debug("value '{}' is not parseable with format '{}'", 
srcStringVal, parser);
+            log.debug(
+                "value '{}' is not parseable with format '{}' (using {} + {})",
+                srcStringVal,
+                parser,
+                parser.getLocale(),
+                parser.getZone(),
+                e);
           }
         }
       }
diff --git 
a/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java 
b/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
index 3e10adbd44e..a8396c1047a 100644
--- a/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
@@ -20,10 +20,7 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Collections.singletonMap;
 
 import com.codahale.metrics.MetricRegistry;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.PrintStream;
 import java.lang.invoke.MethodHandles;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -36,8 +33,6 @@ import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ByteArrayEntity;
-import org.apache.solr.cli.SolrCLI;
-import org.apache.solr.cli.StatusTool;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -298,25 +293,6 @@ public class BasicAuthIntegrationTest extends 
SolrCloudAuthTestCase {
       verifySecurityStatus(cl, baseUrl + "/admin/info/key", "key", 
NOT_NULL_PREDICATE, 20);
       assertAuthMetricsMinimums(17, 8, 8, 1, 0, 0);
 
-      String[] toolArgs = new String[] {"status", "--solr-url", baseUrl};
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      PrintStream stdoutSim = new PrintStream(baos, true, 
StandardCharsets.UTF_8.name());
-      StatusTool tool = new StatusTool(stdoutSim);
-      try {
-        System.setProperty("basicauth", "harry:HarryIsUberCool");
-        tool.runTool(SolrCLI.processCommandLineArgs(tool, toolArgs));
-        Map<?, ?> obj = (Map<?, ?>) Utils.fromJSON(new 
ByteArrayInputStream(baos.toByteArray()));
-        assertTrue(obj.containsKey("version"));
-        assertTrue(obj.containsKey("startTime"));
-        assertTrue(obj.containsKey("uptime"));
-        assertTrue(obj.containsKey("memory"));
-      } catch (Exception e) {
-        log.error(
-            "RunExampleTool failed due to: {}; stdout from tool prior to 
failure: {}",
-            e,
-            baos.toString(StandardCharsets.UTF_8.name())); // nowarn
-      }
-
       SolrParams params = new MapSolrParams(Collections.singletonMap("q", 
"*:*"));
       // Query that fails due to missing credentials
       exp =
@@ -326,7 +302,7 @@ public class BasicAuthIntegrationTest extends 
SolrCloudAuthTestCase {
                 cluster.getSolrClient().query(COLLECTION, params);
               });
       assertEquals(401, exp.code());
-      assertAuthMetricsMinimums(19, 8, 8, 1, 2, 0);
+      assertAuthMetricsMinimums(18, 8, 8, 1, 1, 0);
       assertPkiAuthMetricsMinimums(3, 3, 0, 0, 0, 0);
 
       // Query that succeeds
@@ -334,11 +310,11 @@ public class BasicAuthIntegrationTest extends 
SolrCloudAuthTestCase {
       req.setBasicAuthCredentials("harry", "HarryIsUberCool");
       cluster.getSolrClient().request(req, COLLECTION);
 
-      assertAuthMetricsMinimums(20, 8, 8, 1, 2, 0);
+      assertAuthMetricsMinimums(20, 8, 8, 1, 1, 0);
       assertPkiAuthMetricsMinimums(10, 10, 0, 0, 0, 0);
 
       addDocument("harry", "HarryIsUberCool", "id", "5");
-      assertAuthMetricsMinimums(23, 11, 9, 1, 2, 0);
+      assertAuthMetricsMinimums(22, 11, 9, 1, 1, 0);
       assertPkiAuthMetricsMinimums(14, 14, 0, 0, 0, 0);
 
       // Reindex collection depends on streaming request that needs to 
authenticate against new
@@ -347,14 +323,14 @@ public class BasicAuthIntegrationTest extends 
SolrCloudAuthTestCase {
           CollectionAdminRequest.reindexCollection(COLLECTION);
       reindexReq.setBasicAuthCredentials("harry", "HarryIsUberCool");
       cluster.getSolrClient().request(reindexReq, COLLECTION);
-      assertAuthMetricsMinimums(24, 12, 9, 1, 2, 0);
+      assertAuthMetricsMinimums(23, 12, 9, 1, 1, 0);
       assertPkiAuthMetricsMinimums(15, 15, 0, 0, 0, 0);
 
       // Validate forwardCredentials
       assertEquals(
           1,
           executeQuery(params("q", "id:5"), "harry", 
"HarryIsUberCool").getResults().getNumFound());
-      assertAuthMetricsMinimums(25, 13, 9, 1, 2, 0);
+      assertAuthMetricsMinimums(24, 13, 9, 1, 1, 0);
       assertPkiAuthMetricsMinimums(19, 19, 0, 0, 0, 0);
       executeCommand(
           baseUrl + authcPrefix,
@@ -373,7 +349,7 @@ public class BasicAuthIntegrationTest extends 
SolrCloudAuthTestCase {
       assertEquals(
           1,
           executeQuery(params("q", "id:5"), "harry", 
"HarryIsUberCool").getResults().getNumFound());
-      assertAuthMetricsMinimums(32, 20, 9, 1, 2, 0);
+      assertAuthMetricsMinimums(31, 20, 9, 1, 1, 0);
       assertPkiAuthMetricsMinimums(19, 19, 0, 0, 0, 0);
 
       executeCommand(
diff --git 
a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
 
b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
index 7e78a49da9c..c19aeaf516a 100644
--- 
a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
+++ 
b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
@@ -26,6 +26,7 @@ import java.time.ZoneId;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.time.temporal.TemporalAccessor;
 import java.util.Date;
 import java.util.HashMap;
@@ -1064,43 +1065,37 @@ public class ParsingFieldUpdateProcessorsTest extends 
UpdateProcessorTestBase {
     final String inputString = "Thu Nov 13 04:35:51 AKST 2008"; // asctime + 
timezone1
 
     final long expectTs = 1226583351000L;
-    assertEquals(
-        expectTs,
-        DateTimeFormatter.ofPattern(dateFormat, Locale.ENGLISH)
-            .withZone(ZoneId.of("UTC"))
-            .parse(inputString, Instant::from)
-            .toEpochMilli());
 
-    // ensure english locale and root locale return the same date
-    assertEquals(
-        expectTs + "",
-        DateTimeFormatter.ofPattern(dateFormat, Locale.ENGLISH)
-            .withZone(ZoneId.of("UTC"))
-            .parse(inputString, Instant::from)
-            .toEpochMilli(),
-        DateTimeFormatter.ofPattern(dateFormat, Locale.ROOT)
-            .withZone(ZoneId.of("UTC"))
-            .parse(inputString, Instant::from)
-            .toEpochMilli());
+    try {
+      // ensure english locale and root locale return the same date
+      assertEquals(
+          expectTs,
+          DateTimeFormatter.ofPattern(dateFormat, Locale.ENGLISH)
+              .withZone(ZoneId.of("UTC"))
+              .parse(inputString, Instant::from)
+              .toEpochMilli());
+
+      assertEquals(
+          expectTs,
+          DateTimeFormatter.ofPattern(dateFormat, Locale.ROOT)
+              .withZone(ZoneId.of("UTC"))
+              .parse(inputString, Instant::from)
+              .toEpochMilli());
+    } catch (DateTimeParseException e) {
+      // If the JVM's java.locale.providers can't parse these, there is no 
hope of this test passing
+      assumeNoException("JVM's Locale provider is incompatible with this 
test", e);
+    }
 
     assertParsedDate(
         inputString,
         Date.from(Instant.ofEpochMilli(expectTs)),
         "parse-date-patterns-default-config");
 
-    // A bug in Java 9 (not in 8) causes this to fail!  (not fixed yet?!)
-    // see https://bugs.openjdk.java.net/browse/JDK-8189784
-    if (System.getProperty("java.version").startsWith("1.8.")) {
-      // with daylight savings time timezone
-      assertParsedDate(
-          "Fri Oct 7 05:14:15 AKDT 2005",
-          Date.from(inst20051007131415()),
-          "parse-date-patterns-default-config");
-    } else {
-      System.err.println(
-          "Didn't test AKDT because only Java 1.8 does this right!  This Java 
version is: "
-              + System.getProperty("java.version"));
-    }
+    // with daylight savings time timezone
+    assertParsedDate(
+        "Fri Oct 7 05:14:15 AKDT 2005",
+        Date.from(inst20051007131415()),
+        "parse-date-patterns-default-config");
   }
 
   public void testEDTZone() throws IOException {

Reply via email to