You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ad...@apache.org on 2017/02/24 14:48:53 UTC

svn commit: r1784281 - in /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling: CheckInvalidRepositoryTest.java CheckRepositoryTestBase.java

Author: adulceanu
Date: Fri Feb 24 14:48:53 2017
New Revision: 1784281

URL: http://svn.apache.org/viewvc?rev=1784281&view=rev
Log:
OAK-5600 - Test coverage for CheckCommand
Created a more complex invalid revision
Added new test for a broken partial path

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java?rev=1784281&r1=1784280&r2=1784281&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java Fri Feb 24 14:48:53 2017
@@ -68,11 +68,13 @@ public class CheckInvalidRepositoryTest
         
         assertExpectedOutput(strOut.toString(), Lists.newArrayList("Checked 7 nodes and 21 properties", "Path / is consistent", 
                  "Searched through 2 revisions"));
-        assertExpectedOutput(strErr.toString(), Lists.newArrayList("Error while traversing /z"));
+        
+        // not sure whether first traversal will fail because of "/a" or "/z" 
+        assertExpectedOutput(strErr.toString(), Lists.newArrayList("Error while traversing /"));
     }
     
     @Test
-    public void testBrokenPathWithoutValidRevision() {
+    public void testPartialBrokenPathWithoutValidRevision() {
         StringWriter strOut = new StringWriter();
         StringWriter strErr = new StringWriter();
         
@@ -99,4 +101,34 @@ public class CheckInvalidRepositoryTest
         assertExpectedOutput(strOut.toString(), Lists.newArrayList("No good revision found"));
         assertExpectedOutput(strErr.toString(), Lists.newArrayList("Error while traversing /z", "Path /z not found"));
     }
+    
+    @Test
+    public void testPartialBrokenPathWithValidRevision() {
+        StringWriter strOut = new StringWriter();
+        StringWriter strErr = new StringWriter();
+        
+        PrintWriter outWriter = new PrintWriter(strOut, true);
+        PrintWriter errWriter = new PrintWriter(strErr, true);
+        
+        Set<String> filterPaths = new LinkedHashSet<>();
+        filterPaths.add("/a");
+        
+        Check.builder()
+        .withPath(new File(temporaryFolder.getRoot().getAbsolutePath()))
+        .withJournal("journal.log")
+        .withDebugInterval(Long.MAX_VALUE)
+        .withCheckBinaries(true)
+        .withFilterPaths(filterPaths)
+        .withOutWriter(outWriter)
+        .withErrWriter(errWriter)
+        .build()
+        .run();
+        
+        outWriter.close();
+        errWriter.close();
+        
+        assertExpectedOutput(strOut.toString(), Lists.newArrayList("Checked 1 nodes and 1 properties", "Path /a is consistent", 
+                "Searched through 2 revisions"));
+        assertExpectedOutput(strErr.toString(), Lists.newArrayList("Error while traversing /a"));
+    }
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java?rev=1784281&r1=1784280&r2=1784281&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java Fri Feb 24 14:48:53 2017
@@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.segmen
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.RandomAccessFile;
@@ -88,15 +89,29 @@ public class CheckRepositoryTestBase {
         SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
         NodeBuilder builder = nodeStore.getRoot().builder();
 
+        // add a new child "z"
         addChildWithBlobProperties(nodeStore, builder, "z", 5);
+        
+        // add a new property value to existing child "a"
+        addChildWithBlobProperties(nodeStore, builder, "a", 1);
 
         NodeState after = nodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         // get record number to corrupt (NODE record for "z")
         SegmentNodeState child = (SegmentNodeState) after.getChildNode("z");
-        int recordNumber = child.getRecordId().getRecordNumber();
+        int zRecordNumber = child.getRecordId().getRecordNumber();
+        
+        // get record number to corrupt (NODE record for "a")
+        child = (SegmentNodeState) after.getChildNode("a");
+        int aRecordNumber = child.getRecordId().getRecordNumber();
+        
         fileStore.close();
 
+        corruptRecord(zRecordNumber);
+        corruptRecord(aRecordNumber);
+    }
+
+    private void corruptRecord(int recordNumber) throws FileNotFoundException, IOException {
         //since the filestore was closed after writing the first revision, we're always dealing with the 2nd tar file
         RandomAccessFile file = new RandomAccessFile(new File(temporaryFolder.getRoot(),"data00001a.tar"), "rw");