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 am...@apache.org on 2022/11/08 04:03:14 UTC

[jackrabbit-oak] branch trunk updated: OAK-9984: FlatFileSplitterTest reliably failing (#745)

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

amitj pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 003aa69836 OAK-9984: FlatFileSplitterTest reliably failing (#745)
003aa69836 is described below

commit 003aa698363c1c35c66a9dd0028744f4c67179fa
Author: Amit Jain <am...@apache.org>
AuthorDate: Tue Nov 8 09:33:07 2022 +0530

    OAK-9984: FlatFileSplitterTest reliably failing (#745)
    
    - Replace file length comparisons with file content comparison
    - Creating temporary files in the ./target directory
---
 .../document/flatfile/FlatFileSplitterTest.java    | 66 +++++++++++++++++-----
 .../oak/index/DocumentStoreIndexerIT.java          | 10 ++++
 2 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileSplitterTest.java b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileSplitterTest.java
index 0e95be6eb2..0824e92bd6 100644
--- a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileSplitterTest.java
+++ b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileSplitterTest.java
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.OakInitializer;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.Compression;
+import org.apache.jackrabbit.oak.commons.FileIOUtils;
 import org.apache.jackrabbit.oak.index.indexer.document.IndexerConfiguration;
 import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry;
 import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition;
@@ -38,6 +39,7 @@ import org.apache.jackrabbit.oak.spi.blob.MemoryBlobStore;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.EditorHook;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.contrib.java.lang.system.RestoreSystemProperties;
@@ -49,17 +51,20 @@ import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Scanner;
 import java.util.Set;
 import java.util.Stack;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
@@ -75,10 +80,19 @@ public class FlatFileSplitterTest {
     private MemoryBlobStore store = new MemoryBlobStore();
     private NodeStateEntryReader entryReader = new NodeStateEntryReader(store);
     @Rule
-    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+    public TemporaryFolder temporaryFolder = new TemporaryFolder(new File("target"));
     @Rule
     public final TestRule restoreSystemProperties = new RestoreSystemProperties();
-
+    
+    @Before
+    public void setup() throws IOException {
+        try {
+            System.setProperty("java.io.tmpdir", temporaryFolder.newFolder("systemp").getAbsolutePath());
+        } catch (IOException e) {
+            throw e;
+        }
+    }
+    
     @Test
     public void ntBaseSkipSplit() throws IOException, IllegalAccessException {
         Set<String> splitNodeTypeNames = new HashSet<>();
@@ -88,7 +102,8 @@ public class FlatFileSplitterTest {
         List<File> flatFileList = splitter.split(false);
 
         assertEquals(1, flatFileList.size());
-        assertEquals(flatFile, flatFileList.get(0));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -99,7 +114,8 @@ public class FlatFileSplitterTest {
         List<File> flatFileList = splitter.split(false);
 
         assertEquals(1, flatFileList.size());
-        assertEquals(flatFile, flatFileList.get(0));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -111,7 +127,8 @@ public class FlatFileSplitterTest {
         List<File> flatFileList = splitter.split(false);
 
         assertEquals(1, flatFileList.size());
-        assertEquals(flatFile.length(), flatFileList.get(0).length());
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -122,10 +139,10 @@ public class FlatFileSplitterTest {
         FileUtils.copyFile(flatFile, copied);
         FlatFileSplitter splitter = createTestSplitter(copied, 0, Integer.MAX_VALUE, false, splitNodeTypeNames);
 
-        long originalSize = flatFile.length();
         List<File> flatFileList = splitter.split();
 
-        assertEquals(originalSize, getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
         assertTrue(flatFile.exists());
         assertTrue(!copied.exists());
     }
@@ -143,7 +160,8 @@ public class FlatFileSplitterTest {
         assertEquals(1, countLines(flatFileList.get(0)));
         assertEquals(1, countLines(flatFileList.get(1)));
         assertEquals(1, countLines(flatFileList.get(2)));
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList)); 
     }
 
     @Test
@@ -160,7 +178,8 @@ public class FlatFileSplitterTest {
         assertEquals("no-split", startLineType(flatFileList.get(0)));
         assertEquals(4, countLines(flatFileList.get(1)));
         assertEquals("no-split", startLineType(flatFileList.get(1)));
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -181,7 +200,8 @@ public class FlatFileSplitterTest {
         assertEquals("split", startLineType(flatFileList.get(2)));
         assertEquals(2, countLines(flatFileList.get(3)));
         assertEquals("no-split", startLineType(flatFileList.get(3)));
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -201,7 +221,8 @@ public class FlatFileSplitterTest {
         assertEquals("no-split-2", startLineType(flatFileList.get(1)));
         assertEquals(1, countLines(flatFileList.get(2)));
         assertEquals(1, countLines(flatFileList.get(3)));
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -225,7 +246,8 @@ public class FlatFileSplitterTest {
         assertEquals("split", startLineType(flatFileList.get(2)));
         assertEquals(2, countLines(flatFileList.get(3)));
         assertEquals("no-split-4", startLineType(flatFileList.get(3)));
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
     }
 
     @Test
@@ -241,7 +263,8 @@ public class FlatFileSplitterTest {
         List<File> flatFileList = splitter.split(false);
 
         assertEquals(expectedSplitSize, flatFileList.size());
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
         assertEquals(startLine(flatFile), startLine(flatFileList.get(0)));
         for (int i = 1; i < flatFileList.size(); i++) {
             assertEquals(assetNodeType, startLineType(flatFileList.get(i)));
@@ -270,7 +293,8 @@ public class FlatFileSplitterTest {
         List<File> flatFileList = splitter.split(false);
 
         assertTrue(expectedSplitSize <= flatFileList.size());
-        assertEquals(flatFile.length(), getTotalSize(flatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(flatFile)),
+            readAllFilesAsSet(flatFileList));
         assertEquals(startLineType(flatFile), startLineType(flatFileList.get(0)));
         String expectedSplitPoint = "/etc|{\"jcr:primaryType\":\"nam:sling:Folder\"}";
         assertEquals(expectedSplitPoint, startLine(flatFileList.get(1)));
@@ -307,7 +331,8 @@ public class FlatFileSplitterTest {
         }
 
         assertTrue(expectedSplitSize <= flatFileList.size());
-        assertEquals(rawFlatFile.length(), getTotalSize(rawFlatFileList));
+        assertEquals(readAllFilesAsSet(Collections.singletonList(rawFlatFile)),
+            readAllFilesAsSet(rawFlatFileList));
     }
 
     @Test
@@ -533,4 +558,15 @@ public class FlatFileSplitterTest {
             }
         }
     }
+    
+    private static Set<String> readAllFilesAsSet(List<File> files) {
+        Set<String> set = files.stream().flatMap(file -> {
+            try (InputStream is = Files.newInputStream(file.toPath())) {
+                return FileIOUtils.readStringsAsSet(is, false).stream();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }).collect(Collectors.toSet());
+        return set;
+    }
 }
diff --git a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java
index 685e300bbe..520dfe2e36 100644
--- a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java
+++ b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java
@@ -73,6 +73,7 @@ import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.junit.After;
 import org.junit.Assume;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
@@ -118,6 +119,15 @@ public class DocumentStoreIndexerIT extends AbstractIndexCommandTest {
     }
 
     DocumentNodeStore dns;
+
+    @Before
+    public void setup() throws IOException {
+        try {
+            System.setProperty("java.io.tmpdir", temporaryFolder.newFolder("systemp").getAbsolutePath());
+        } catch (IOException e) {
+            throw e;
+        }
+    }
     
     @After
     public void tear() {