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 b5c71bc5573 SOLR-18196: Tests: Java serialization for QueryResponse
and SimpleOrderedMap (#4995)
b5c71bc5573 is described below
commit b5c71bc5573c4e31b4cee5a7965d73587fc0ae58
Author: Nick <[email protected]>
AuthorDate: Fri Oct 2 20:06:44 2026 -0600
SOLR-18196: Tests: Java serialization for QueryResponse and
SimpleOrderedMap (#4995)
---
.../client/solrj/response/QueryResponseTest.java | 40 ++++++++++++++++++++++
.../solr/common/util/SimpleOrderedMapTest.java | 36 +++++++++++++++++++
2 files changed, 76 insertions(+)
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
index 0fb8a7c1cfc..98609d6447a 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
@@ -16,9 +16,13 @@
*/
package org.apache.solr.client.solrj.response;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
@@ -27,6 +31,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.lucene.tests.util.TestRuleLimitSysouts.Limit;
+import org.apache.lucene.util.SuppressForbidden;
import org.apache.solr.SolrTestCase;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.util.NamedList;
@@ -320,4 +325,39 @@ public class QueryResponseTest extends SolrTestCase {
assertTrue(values[0] instanceof SimpleOrderedMap);
assertTrue(values[1] instanceof SimpleOrderedMap);
}
+
+ @Test
+ @SuppressForbidden(
+ reason = "testing a same-version Java serialization round-trip on
locally generated data")
+ public void testQueryResponseSerialization() throws Exception {
+ XMLResponseParser parser = new XMLResponseParser();
+ NamedList<Object> response;
+ try (SolrResourceLoader loader = new
SolrResourceLoader(Path.of("").toAbsolutePath());
+ InputStream is = loader.openResource("solrj/sampleDebugResponse.xml"))
{
+ assertNotNull(is);
+ try (Reader in = new InputStreamReader(is, StandardCharsets.UTF_8)) {
+ response = parser.processResponse(in);
+ }
+ }
+
+ QueryResponse qr = new QueryResponse(response);
+ // Guard against a vacuous pass: the fixture must be non-trivial for the
+ // round-trip comparison below to mean anything.
+ assertEquals(2, qr.getResults().getNumFound());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try (ObjectOutputStream out = new ObjectOutputStream(baos)) {
+ out.writeObject(qr);
+ }
+
+ QueryResponse deserialized;
+ try (ObjectInputStream ois =
+ new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()))) {
+ deserialized = (QueryResponse) ois.readObject();
+ }
+
+ // QueryResponse implements no equals(), so compare the underlying
response rendering
+ // instead: a single structural comparison replacing field-by-field
assertions.
+ assertEquals(qr.getResponse().toString(),
deserialized.getResponse().toString());
+ }
}
diff --git
a/solr/solrj/src/test/org/apache/solr/common/util/SimpleOrderedMapTest.java
b/solr/solrj/src/test/org/apache/solr/common/util/SimpleOrderedMapTest.java
index f50216f4848..7ba23a88f51 100644
--- a/solr/solrj/src/test/org/apache/solr/common/util/SimpleOrderedMapTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/util/SimpleOrderedMapTest.java
@@ -16,10 +16,16 @@
*/
package org.apache.solr.common.util;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.lucene.util.SuppressForbidden;
import org.apache.solr.SolrTestCase;
import org.junit.Test;
@@ -39,6 +45,36 @@ public class SimpleOrderedMapTest extends SolrTestCase {
assertEquals(2, map.nvPairs.get(3));
}
+ @Test
+ @SuppressForbidden(
+ reason = "testing a same-version Java serialization round-trip on
locally generated data")
+ public void testJavaSerializationRoundTrip() throws Exception {
+ SimpleOrderedMap<Object> original = new SimpleOrderedMap<>();
+ original.put("one", 1);
+ original.put("two", "two");
+ original.put("aNull", null);
+ original.put(null, 4);
+ SimpleOrderedMap<Object> nested = new SimpleOrderedMap<>();
+ nested.put("match", true);
+ nested.put("value", 1.4886642f);
+ original.put("nested", nested);
+ original.put("categories", List.of("electronics", "memory"));
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try (ObjectOutputStream out = new ObjectOutputStream(baos)) {
+ out.writeObject(original);
+ }
+
+ SimpleOrderedMap<?> deserialized;
+ try (ObjectInputStream in =
+ new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()))) {
+ deserialized = (SimpleOrderedMap<?>) in.readObject();
+ }
+
+ // One structural comparison covers size, order, keys, values and nesting.
+ assertEquals(original, deserialized);
+ }
+
@Test
public void testEquals() {
var map2 = new SimpleOrderedMap<Integer>();