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

mthomsen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/master by this push:
     new 9c8f404  NIFI-6554 fix oid parsing for PutMongo processor
9c8f404 is described below

commit 9c8f40415e61ee421e6f12d4e145f07984393f91
Author: andrew <[email protected]>
AuthorDate: Wed Aug 14 18:48:12 2019 +0300

    NIFI-6554 fix oid parsing for PutMongo processor
    
    This closes #3650
    
    Signed-off-by: Mike Thomsen <[email protected]>
---
 .../org/apache/nifi/processors/mongodb/PutMongo.java | 10 ++++++++--
 .../nifi/processors/mongodb/MongoWriteTestBase.java  |  2 ++
 .../apache/nifi/processors/mongodb/PutMongoIT.java   | 20 ++++++++++++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java
 
b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java
index a62620f..e9bf09e 100644
--- 
a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java
+++ 
b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java
@@ -255,8 +255,14 @@ public class PutMongo extends AbstractMongoProcessor {
 
     private Document parseUpdateKey(String updateKey, Map doc) {
         Document retVal;
-        if (updateKey.equals("_id") && ObjectId.isValid(((String) 
doc.get(updateKey)))) {
-            retVal = new Document("_id", new ObjectId((String) 
doc.get(updateKey)));
+        if (updateKey.equals("_id")) {
+            if (doc.get("_id") instanceof ObjectId) {
+                retVal = new Document("_id", doc.get("_id"));
+            } else if (ObjectId.isValid((String) doc.get("_id"))){
+                retVal = new Document("_id", new ObjectId((String) 
doc.get("_id")));
+            } else {
+                retVal = new Document("_id", doc.get("_id"));
+            }
         } else if (updateKey.contains(",")) {
             String[] parts = updateKey.split(",[\\s]*");
             retVal = new Document();
diff --git 
a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/MongoWriteTestBase.java
 
b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/MongoWriteTestBase.java
index 7294ade..814d78f 100644
--- 
a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/MongoWriteTestBase.java
+++ 
b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/MongoWriteTestBase.java
@@ -32,6 +32,8 @@ public class MongoWriteTestBase {
     protected static final String COLLECTION_NAME = "test";
     protected String DATABASE_NAME;
 
+    protected static Document oidDocument = Document.parse("{\"_id\": 
{\"$oid\": \"5cd1a7376264b959a71588c1\"}}");
+
     protected static final List<Document> DOCUMENTS = Arrays.asList(
             new Document("_id", "doc_1").append("a", 1).append("b", 
2).append("c", 3),
             new Document("_id", "doc_2").append("a", 1).append("b", 
2).append("c", 4),
diff --git 
a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
 
b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
index de08a80..cb78f97 100644
--- 
a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
+++ 
b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
@@ -392,6 +392,26 @@ public class PutMongoIT extends MongoWriteTestBase {
     }
 
     @Test
+    public void testUpsertWithOid() throws Exception {
+        TestRunner runner = init(PutMongo.class);
+        runner.setProperty(PutMongo.UPDATE_QUERY_KEY, "_id");
+        byte[] bytes = documentToByteArray(oidDocument);
+
+        runner.setProperty(PutMongo.MODE, "update");
+        runner.setProperty(PutMongo.UPSERT, "true");
+        runner.enqueue(bytes);
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(PutMongo.REL_SUCCESS, 1);
+        MockFlowFile out = 
runner.getFlowFilesForRelationship(PutMongo.REL_SUCCESS).get(0);
+        out.assertContentEquals(bytes);
+
+        // verify 1 doc inserted into the collection
+        assertEquals(1, collection.count());
+        assertEquals(oidDocument, collection.find().first());
+    }
+
+    @Test
     public void testUpdate() throws Exception {
         TestRunner runner = init(PutMongo.class);
         runner.setProperty(PutMongo.UPDATE_QUERY_KEY, "_id");

Reply via email to