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