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 {