Author: mreutegg
Date: Mon May  8 10:20:06 2017
New Revision: 1794318

URL: http://svn.apache.org/viewvc?rev=1794318&view=rev
Log:
OAK-6181: MongoMissingLastRevSeeker may return incomplete candidate set

Add ignored test

Modified:
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoMissingLastRevSeekerTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoMissingLastRevSeekerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoMissingLastRevSeekerTest.java?rev=1794318&r1=1794317&r2=1794318&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoMissingLastRevSeekerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoMissingLastRevSeekerTest.java
 Mon May  8 10:20:06 2017
@@ -18,14 +18,29 @@
  */
 package org.apache.jackrabbit.oak.plugins.document.mongo;
 
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.MissingLastRevSeeker;
 import org.apache.jackrabbit.oak.plugins.document.MongoUtils;
+import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
+import org.apache.jackrabbit.oak.plugins.document.Revision;
+import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
+import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
+import static 
org.apache.jackrabbit.oak.plugins.document.util.Utils.getIdFromPath;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeTrue;
 
@@ -34,6 +49,7 @@ public class MongoMissingLastRevSeekerTe
     private MongoConnection c;
     private String dbName;
     private DocumentMK.Builder builder;
+    private MongoDocumentStore store;
     private DocumentNodeStore ns;
 
     @Before
@@ -41,7 +57,9 @@ public class MongoMissingLastRevSeekerTe
         c = MongoUtils.getConnection();
         assumeTrue(c != null);
         dbName = c.getDB().getName();
+        MongoUtils.dropCollections(c.getDB());
         builder = new DocumentMK.Builder().setMongoDB(c.getDB());
+        store = (MongoDocumentStore) builder.getDocumentStore();
         ns = builder.getNodeStore();
     }
 
@@ -53,11 +71,45 @@ public class MongoMissingLastRevSeekerTe
         if (c != null) {
             c.close();
         }
-        MongoUtils.dropDatabase(dbName);
+        MongoUtils.dropCollections(dbName);
     }
 
     @Test
     public void missingLastRevSeeker() throws Exception {
         assertTrue(builder.createMissingLastRevSeeker() instanceof 
MongoMissingLastRevSeeker);
     }
+
+    @Ignore("OAK-6181")
+    @Test
+    public void completeResult() throws Exception {
+        final int NUM_DOCS = 200;
+        // populate the store
+        List<UpdateOp> ops = Lists.newArrayList();
+        for (int i = 0; i < NUM_DOCS; i++) {
+            UpdateOp op = new UpdateOp(getIdFromPath("/node-" + i), true);
+            NodeDocument.setModified(op, new Revision(i * 5000, 0, 1));
+            ops.add(op);
+        }
+        assertTrue(store.create(NODES, ops));
+
+        Set<String> ids = Sets.newHashSet();
+        boolean updated = false;
+        MissingLastRevSeeker seeker = builder.createMissingLastRevSeeker();
+        for (NodeDocument doc : seeker.getCandidates(0)) {
+            if (!updated) {
+                // as soon as we have the first document, update /node-0
+                UpdateOp op = new UpdateOp(getIdFromPath("/node-0"), false);
+                // and push out the _modified timestamp
+                NodeDocument.setModified(op, new Revision(NUM_DOCS * 5000, 0, 
1));
+                // even after the update the document matches the query
+                assertNotNull(store.findAndUpdate(NODES, op));
+                updated = true;
+            }
+            if (doc.getPath().startsWith("/node-")) {
+                ids.add(doc.getId());
+            }
+        }
+        // seeker must return all documents
+        assertEquals(NUM_DOCS, ids.size());
+    }
 }


Reply via email to