Author: mduerig
Date: Fri Jan  8 21:04:18 2016
New Revision: 1723792

URL: http://svn.apache.org/viewvc?rev=1723792&view=rev
Log:
OAK-3857: Simplify SegmentGraphTest
Simplify segment graph test by using a hard coded file store

Added:
    
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/
    
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/segment/
    
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/segment/file-store.zip
Modified:
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraphTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraphTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraphTest.java?rev=1723792&r1=1723791&r2=1723792&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraphTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraphTest.java
 Fri Jan  8 21:04:18 2016
@@ -24,114 +24,68 @@ import static com.google.common.collect.
 import static com.google.common.collect.Sets.newHashSet;
 import static java.io.File.createTempFile;
 import static java.util.Collections.singleton;
-import static 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static 
org.apache.jackrabbit.oak.plugins.segment.SegmentGraph.parseSegmentGraph;
 import static org.junit.Assert.assertEquals;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
-import java.util.concurrent.Callable;
-
-import javax.annotation.Nonnull;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Multiset;
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentGraph.Graph;
-import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
-import 
org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.CleanupType;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 public class SegmentGraphTest {
-    private final Set<UUID> segments = newHashSet();
-    private final Map<UUID, Set<UUID>> references = newHashMap();
-
-    private final Set<String> gcGenerations = newHashSet();
-    private final Map<String, Set<String>> gcReferences = newHashMap();
+    private final Set<UUID> segments = newHashSet(
+        UUID.fromString("5be0c2ea-b6ba-4f80-acad-657a20f920b6"),
+        UUID.fromString("fdaca71e-f71e-4f19-abf5-144e8c85f9e3"),
+        UUID.fromString("53be3b93-87fa-487f-a2fc-7c17e639c231"),
+        UUID.fromString("2eae0bc2-d3dd-4ba4-a765-70c38073437d"),
+        UUID.fromString("ab61b8c9-222c-4119-a73b-5f61c0bc4741"),
+        UUID.fromString("38c42dde-5928-4cc3-a483-37185d6971e4")
+    );
+
+    private final Map<UUID, Set<UUID>> references = ImmutableMap.<UUID, 
Set<UUID>>of(
+        UUID.fromString("5be0c2ea-b6ba-4f80-acad-657a20f920b6"),
+            
newHashSet(UUID.fromString("2eae0bc2-d3dd-4ba4-a765-70c38073437d")),
+        UUID.fromString("fdaca71e-f71e-4f19-abf5-144e8c85f9e3"),
+            
newHashSet(UUID.fromString("ab61b8c9-222c-4119-a73b-5f61c0bc4741")),
+        UUID.fromString("2eae0bc2-d3dd-4ba4-a765-70c38073437d"),
+            
newHashSet(UUID.fromString("2fdaca71e-f71e-4f19-abf5-144e8c85f9e3"),
+                       UUID.fromString("ab61b8c9-222c-4119-a73b-5f61c0bc4741"))
+    );
+
+    private final Set<String> gcGenerations = newHashSet("0", "1");
+    private final Map<String, Set<String>> gcReferences = ImmutableMap.of(
+        "0", singleton("0"),
+        "1", singleton("0")
+    );
 
     private File storeDir;
 
-    private void addSegment(SegmentNodeState node) {
-        segments.add(node.getRecordId().asUUID());
-    }
-
-    private void addReference(SegmentNodeState from, SegmentNodeState to) {
-        addReference(references, from, to);
-    }
-
-    private static void addReference(Map<UUID, Set<UUID>> map, 
SegmentNodeState from, SegmentNodeState to) {
-        UUID fromUUID = from.getRecordId().asUUID();
-        UUID toUUID = to.getRecordId().asUUID();
-        Set<UUID> tos = map.get(fromUUID);
-        if (tos == null) {
-            tos = newHashSet();
-            map.put(fromUUID, tos);
-        }
-        tos.add(toUUID);
-    }
-
     @Before
     public void setup() throws IOException {
         storeDir = createTempFile(SegmentGraph.class.getSimpleName(), null);
         storeDir.delete();
         storeDir.mkdir();
 
+        unzip(SegmentGraphTest.class.getResourceAsStream("file-store.zip"), 
storeDir);
+
         FileStore store = FileStore.newFileStore(storeDir).create();
-        CompactionStrategy strategy = new CompactionStrategy(false, false, 
CleanupType.CLEAN_NONE, 0, (byte) 0) {
-            @Override
-            public boolean compacted(@Nonnull Callable<Boolean> setHead) 
throws Exception {
-                return setHead.call();
-            }
-        };
-        strategy.setPersistCompactionMap(false);
-        store.setCompactionStrategy(strategy);
-
-        addSegment(store.getHead());
-
-        SegmentWriter writer = store.createSegmentWriter("testWriter");
-        SegmentNodeState node1 = writer.writeNode(EMPTY_NODE);
-        addSegment(node1);
-        writer.flush();
-
-        SegmentNodeState node2 = writer.writeNode(EMPTY_NODE);
-        addSegment(node2);
-        addReference(node2, node1);  // Through the respective templates, 
which are de-duplicated
-        writer.flush();
-
-        NodeBuilder builder = EMPTY_NODE.builder();
-        builder.setChildNode("foo", node1);
-        builder.setChildNode("bar", node2);
-
-        SegmentNodeState node3 = writer.writeNode(builder.getNodeState());
-        addSegment(node3);
-        addReference(node3, node1);
-        addReference(node3, node2);
-        writer.flush();
-
-        store.setHead(store.getHead(), node3);
-
-        store.compact();
-        addSegment(store.getHead());
-        builder = node3.builder();
-        builder.setProperty("p", 42);
-        SegmentNodeState node4 = writer.writeNode(builder.getNodeState());
-        addReference(node4, node3);
-        addSegment(node4);
-        store.setHead(store.getHead(), node4);
-
-        store.close();
-
-        gcGenerations.add("0");
-        gcGenerations.add("1");
-        gcReferences.put("0", singleton("0"));
-        gcReferences.put("1", singleton("0"));
     }
 
     @After
@@ -145,7 +99,11 @@ public class SegmentGraphTest {
         try {
             Graph<UUID> segmentGraph = parseSegmentGraph(store);
             assertEquals(segments, newHashSet(segmentGraph.vertices()));
-            assertEquals(references, toMap(segmentGraph.edges()));
+            Map<UUID, Set<UUID>> map = newHashMap();
+            for (Entry<UUID, Multiset<UUID>> entry : segmentGraph.edges()) {
+                map.put(entry.getKey(), entry.getValue().elementSet());
+            }
+            assertEquals(references, map);
         } finally {
             store.close();
         }
@@ -157,17 +115,29 @@ public class SegmentGraphTest {
         try {
             Graph<String> gcGraph = SegmentGraph.parseGCGraph(store);
             assertEquals(gcGenerations, newHashSet(gcGraph.vertices()));
-            assertEquals(gcReferences, toMap(gcGraph.edges()));
+            Map<String, Set<String>> map = newHashMap();
+            for (Entry<String, Multiset<String>> entry : gcGraph.edges()) {
+                map.put(entry.getKey(), entry.getValue().elementSet());
+            }
+            assertEquals(gcReferences, map);
         } finally {
             store.close();
         }
     }
 
-    private static <T> Map<T, Set<T>> toMap(Set<Entry<T, Multiset<T>>> 
entries) {
-        Map<T, Set<T>> map = newHashMap();
-        for (Entry<T, Multiset<T>> entry : entries) {
-            map.put(entry.getKey(), entry.getValue().elementSet());
+    private static void unzip(InputStream is, File target) throws IOException {
+        ZipInputStream zis = new ZipInputStream(is);
+        try {
+            for (ZipEntry entry = zis.getNextEntry(); entry != null; entry = 
zis.getNextEntry()) {
+                OutputStream out = new FileOutputStream(new File(target, 
entry.getName()));
+                try {
+                    IOUtils.copy(zis, out);
+                } finally {
+                    out.close();
+                }
+            }
+        } finally {
+            zis.close();
         }
-        return map;
     }
 }

Added: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/segment/file-store.zip
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/segment/file-store.zip?rev=1723792&view=auto
==============================================================================
Binary files 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/segment/file-store.zip
 (added) and 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/plugins/segment/file-store.zip
 Fri Jan  8 21:04:18 2016 differ


Reply via email to