You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ma...@apache.org on 2023/10/12 06:24:16 UTC

[solr-sandbox] branch main updated: Add serialization unit test. (#66)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new a760a4c  Add serialization unit test. (#66)
a760a4c is described below

commit a760a4caa266a21460d5976a05242dc756867ab3
Author: Andrzej BiaƂecki <ab...@sigram.com>
AuthorDate: Thu Oct 12 08:24:10 2023 +0200

    Add serialization unit test. (#66)
---
 crossdc-commons/build.gradle                       | 16 ++++++++++
 .../common/MirroredSolrRequestSerializerTest.java  | 36 ++++++++++++++++++++++
 gradlew                                            |  0
 3 files changed, 52 insertions(+)

diff --git a/crossdc-commons/build.gradle b/crossdc-commons/build.gradle
index 57cb915..b926137 100644
--- a/crossdc-commons/build.gradle
+++ b/crossdc-commons/build.gradle
@@ -40,6 +40,22 @@ dependencies {
     }
     implementation 'org.apache.kafka:kafka-clients:2.8.1'
     implementation 'com.google.guava:guava:14.0'
+    testImplementation 'org.slf4j:slf4j-api:2.0.5'
+    testImplementation 'org.hamcrest:hamcrest:2.2'
+    testImplementation 'junit:junit:4.13.2'
+    testImplementation('org.mockito:mockito-inline:5.2.0')
+
+    testImplementation group: 'org.apache.solr', name: 'solr-core', version: '8.11.2', {
+        exclude group: "org.apache.logging.log4j", module: "*"
+        exclude group: "org.slf4j", module: "*"
+        exclude group: "org.eclipse.jetty", module: "jetty-http"
+        exclude group: "org.eclipse.jetty", module: "jetty-server"
+        exclude group: "org.eclipse.jetty", module: "jetty-servlet"
+    }
+    testImplementation group: 'org.apache.solr', name: 'solr-test-framework', version: '8.11.2', {
+        exclude group: "org.apache.logging.log4j", module: "*"
+        exclude group: "org.slf4j", module: "*"
+    }
 }
 
 jar.enabled = false
diff --git a/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java b/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java
new file mode 100644
index 0000000..da6478f
--- /dev/null
+++ b/crossdc-commons/src/test/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializerTest.java
@@ -0,0 +1,36 @@
+package org.apache.solr.crossdc.common;
+
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.TestUtil;
+import org.apache.solr.client.solrj.request.UpdateRequest;
+import org.apache.solr.common.SolrInputDocument;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+public class MirroredSolrRequestSerializerTest extends LuceneTestCase {
+
+  private static final byte[] EMPTY_ARR = new byte[3];
+
+  @Test
+  public void testSerializationBufferOptimization() throws Exception {
+    MirroredSolrRequestSerializer serializer = new MirroredSolrRequestSerializer();
+    UpdateRequest req = new UpdateRequest();
+    SolrInputDocument doc = new SolrInputDocument();
+    req.add(doc);
+    for (int i = 0; i < 100; i++) {
+      // very small docs produce trailing zeroes due to the optimization in ExposedByteArrayOutputStream
+      String fieldValue = TestUtil.randomRealisticUnicodeString(random(), i * 100, i * 100);
+      doc.setField("test", fieldValue);
+      MirroredSolrRequest mirroredRequest = new MirroredSolrRequest(req);
+      byte[] data = serializer.serialize("test", mirroredRequest);
+      if (Arrays.equals(Arrays.copyOfRange(data, data.length - EMPTY_ARR.length, data.length), EMPTY_ARR)) {
+        System.err.println("TRAILING ZEROES! buf len=" + data.length);
+      }
+      // fortunately deserialization skips these trailing zeroes
+      MirroredSolrRequest deserialized = serializer.deserialize("test", data);
+      String deserValue = (String) ((UpdateRequest) deserialized.getSolrRequest()).getDocuments().get(0).getFieldValue("test");
+      assertEquals(fieldValue, deserValue);
+    }
+  }
+}
diff --git a/gradlew b/gradlew
old mode 100644
new mode 100755