aboutsummaryrefslogtreecommitdiff
path: root/other/java/client/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'other/java/client/src/test')
-rw-r--r--other/java/client/src/test/java/seaweedfs/client/SeaweedReadTest.java123
1 files changed, 113 insertions, 10 deletions
diff --git a/other/java/client/src/test/java/seaweedfs/client/SeaweedReadTest.java b/other/java/client/src/test/java/seaweedfs/client/SeaweedReadTest.java
index 44b833c90..6ad9edb2c 100644
--- a/other/java/client/src/test/java/seaweedfs/client/SeaweedReadTest.java
+++ b/other/java/client/src/test/java/seaweedfs/client/SeaweedReadTest.java
@@ -6,6 +6,7 @@ import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Random;
public class SeaweedReadTest {
@@ -13,17 +14,17 @@ public class SeaweedReadTest {
public void testNonOverlappingVisibleIntervals() throws IOException {
List<FilerProto.FileChunk> chunks = new ArrayList<>();
chunks.add(FilerProto.FileChunk.newBuilder()
- .setFileId("aaa")
- .setOffset(0)
- .setSize(100)
- .setMtime(1000)
- .build());
+ .setFileId("aaa")
+ .setOffset(0)
+ .setSize(100)
+ .setMtime(1000)
+ .build());
chunks.add(FilerProto.FileChunk.newBuilder()
- .setFileId("bbb")
- .setOffset(100)
- .setSize(133)
- .setMtime(2000)
- .build());
+ .setFileId("bbb")
+ .setOffset(100)
+ .setSize(133)
+ .setMtime(2000)
+ .build());
List<SeaweedRead.VisibleInterval> visibleIntervals = SeaweedRead.nonOverlappingVisibleIntervals(null, chunks);
for (SeaweedRead.VisibleInterval visibleInterval : visibleIntervals) {
@@ -61,4 +62,106 @@ public class SeaweedReadTest {
}
+
+ @Test
+ public void testReadResolvedChunks() throws IOException {
+ List<FilerProto.FileChunk> chunks = new ArrayList<>();
+ chunks.add(FilerProto.FileChunk.newBuilder()
+ .setFileId("a")
+ .setOffset(0)
+ .setSize(100)
+ .setMtime(1)
+ .build());
+ chunks.add(FilerProto.FileChunk.newBuilder()
+ .setFileId("b")
+ .setOffset(50)
+ .setSize(100)
+ .setMtime(2)
+ .build());
+ chunks.add(FilerProto.FileChunk.newBuilder()
+ .setFileId("c")
+ .setOffset(200)
+ .setSize(50)
+ .setMtime(3)
+ .build());
+ chunks.add(FilerProto.FileChunk.newBuilder()
+ .setFileId("d")
+ .setOffset(250)
+ .setSize(50)
+ .setMtime(4)
+ .build());
+ chunks.add(FilerProto.FileChunk.newBuilder()
+ .setFileId("e")
+ .setOffset(175)
+ .setSize(100)
+ .setMtime(5)
+ .build());
+
+ List<SeaweedRead.VisibleInterval> visibleIntervals = ReadChunks.readResolvedChunks(chunks);
+ for (SeaweedRead.VisibleInterval visibleInterval : visibleIntervals) {
+ System.out.println("visible:" + visibleInterval);
+ }
+
+ Assert.assertEquals(4, visibleIntervals.size());
+
+ SeaweedRead.VisibleInterval visibleInterval = visibleIntervals.get(0);
+ Assert.assertEquals(visibleInterval.start, 0);
+ Assert.assertEquals(visibleInterval.stop, 50);
+ Assert.assertEquals(visibleInterval.modifiedTime, 1);
+ Assert.assertEquals(visibleInterval.fileId, "a");
+
+ visibleInterval = visibleIntervals.get(1);
+ Assert.assertEquals(visibleInterval.start, 50);
+ Assert.assertEquals(visibleInterval.stop, 150);
+ Assert.assertEquals(visibleInterval.modifiedTime, 2);
+ Assert.assertEquals(visibleInterval.fileId, "b");
+
+ visibleInterval = visibleIntervals.get(2);
+ Assert.assertEquals(visibleInterval.start, 175);
+ Assert.assertEquals(visibleInterval.stop, 275);
+ Assert.assertEquals(visibleInterval.modifiedTime, 5);
+ Assert.assertEquals(visibleInterval.fileId, "e");
+
+ visibleInterval = visibleIntervals.get(3);
+ Assert.assertEquals(visibleInterval.start, 275);
+ Assert.assertEquals(visibleInterval.stop, 300);
+ Assert.assertEquals(visibleInterval.modifiedTime, 4);
+ Assert.assertEquals(visibleInterval.fileId, "d");
+
+ }
+
+
+ @Test
+ public void testRandomizedReadResolvedChunks() throws IOException {
+ Random random = new Random();
+ int limit = 1024*1024;
+ long[] array = new long[limit];
+ List<FilerProto.FileChunk> chunks = new ArrayList<>();
+ for (long ts=0;ts<1024;ts++){
+ int x = random.nextInt(limit);
+ int y = random.nextInt(limit);
+ int size = Math.min(Math.abs(x-y), 1024);
+ chunks.add(randomWrite(array, Math.min(x,y), size, ts));
+ }
+
+ List<SeaweedRead.VisibleInterval> visibleIntervals = ReadChunks.readResolvedChunks(chunks);
+ for (SeaweedRead.VisibleInterval visibleInterval : visibleIntervals) {
+ System.out.println("visible:" + visibleInterval);
+ for (int i = (int) visibleInterval.start; i<visibleInterval.stop; i++) {
+ Assert.assertEquals(array[i], visibleInterval.modifiedTime);
+ }
+ }
+
+ }
+ private FilerProto.FileChunk randomWrite(long[] array, int start, int size, long ts) {
+ for (int i=start;i<start+size;i++) {
+ array[i] = ts;
+ }
+ return FilerProto.FileChunk.newBuilder()
+ .setFileId("")
+ .setOffset(start)
+ .setSize(size)
+ .setMtime(ts)
+ .build();
+ }
}