From 058cb0572adf809a0162c3e7ed6ae00b41cbdf44 Mon Sep 17 00:00:00 2001 From: Rob Rudin Date: Tue, 20 Jan 2026 15:25:47 -0500 Subject: [PATCH] MLE-26427 Couple more tests for incremental write Just verifying that text / binary work as expected. Also improved an existing test to use a different hash field name. --- .../filter/IncrementalWriteTest.java | 50 ++++++++++++++++--- .../ml-config/databases/content-database.json | 9 ++++ 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/datamovement/filter/IncrementalWriteTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/datamovement/filter/IncrementalWriteTest.java index 723296b72..0ac60b97a 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/datamovement/filter/IncrementalWriteTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/datamovement/filter/IncrementalWriteTest.java @@ -6,10 +6,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.marklogic.client.document.*; import com.marklogic.client.impl.DocumentWriteOperationImpl; -import com.marklogic.client.io.DocumentMetadataHandle; -import com.marklogic.client.io.Format; -import com.marklogic.client.io.JacksonHandle; -import com.marklogic.client.io.StringHandle; +import com.marklogic.client.io.*; import com.marklogic.client.test.Common; import org.junit.jupiter.api.Test; @@ -156,7 +153,7 @@ void noRangeIndexForFieldWithEval() { @Test void customTimestampKeyName() { filter = IncrementalWriteFilter.newBuilder() - .hashKeyName("incrementalWriteHash") + .hashKeyName("myWriteHash") .timestampKeyName("myTimestamp") .build(); @@ -165,8 +162,9 @@ void customTimestampKeyName() { DocumentMetadataHandle metadata = Common.client.newDocumentManager().readMetadata("/incremental/test/doc-1.xml", new DocumentMetadataHandle()); + assertNotNull(metadata.getMetadataValues().get("myWriteHash")); assertNotNull(metadata.getMetadataValues().get("myTimestamp")); - assertNotNull(metadata.getMetadataValues().get("incrementalWriteHash")); + assertFalse(metadata.getMetadataValues().containsKey("incrementalWriteHash")); assertFalse(metadata.getMetadataValues().containsKey("incrementalWriteTimestamp")); } @@ -190,6 +188,46 @@ void nullIsIgnoredForKeyNames() { assertNotNull(metadata.getMetadataValues().get("incrementalWriteTimestamp")); } + @Test + void textDocument() { + final DocumentWriteOperation writeOp = new DocumentWriteOperationImpl("/incremental/test/doc.txt", METADATA, + new StringHandle("Hello world")); + + docs.add(writeOp); + writeDocs(docs); + assertEquals(1, writtenCount.get()); + assertEquals(0, skippedCount.get()); + + // Write the same text document again + docs = new ArrayList<>(); + docs.add(writeOp); + writeDocs(docs); + assertEquals(1, writtenCount.get()); + assertEquals(1, skippedCount.get(), "This is a sanity check to verify that text files work as expected. " + + "Exclusions can't yet be specified for them since we only support JSON Pointer and XPath so far. It may " + + "be worth supporting regex-based exclusions for text files in the future."); + } + + @Test + void binaryDocument() { + byte[] binaryContent = "Binary content example".getBytes(); + final DocumentWriteOperation writeOp = new DocumentWriteOperationImpl("/incremental/test/doc.bin", METADATA, + new BytesHandle(binaryContent).withFormat(Format.BINARY)); + + docs.add(writeOp); + writeDocs(docs); + assertEquals(1, writtenCount.get()); + assertEquals(0, skippedCount.get()); + + // Write the same binary document again + docs = new ArrayList<>(); + docs.add(writeOp); + writeDocs(docs); + assertEquals(1, writtenCount.get()); + assertEquals(1, skippedCount.get(), "Another sanity check to make sure that binary documents work as " + + "expected. Exclusions cannot be specified for them."); + } + private void verifyIncrementalWriteWorks() { writeTenDocuments(); verifyDocumentsHasHashInMetadataKey(); diff --git a/test-app/src/main/ml-config/databases/content-database.json b/test-app/src/main/ml-config/databases/content-database.json index 4e869464f..8ca808124 100644 --- a/test-app/src/main/ml-config/databases/content-database.json +++ b/test-app/src/main/ml-config/databases/content-database.json @@ -197,6 +197,15 @@ "fast-phrase-searches": false, "fast-case-sensitive-searches": false, "fast-diacritic-sensitive-searches": false + }, + { + "field-name": "myWriteHash", + "metadata": "", + "stemmed-searches": "off", + "word-searches": false, + "fast-phrase-searches": false, + "fast-case-sensitive-searches": false, + "fast-diacritic-sensitive-searches": false } ], "range-field-index": [