/
SSTableTest.java
77 lines (67 loc) · 2.74 KB
/
SSTableTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package org.apache.cassandra.io;
import org.apache.cassandra.ServerTest;
import org.apache.cassandra.dht.OrderPreservingPartitioner;
import org.apache.cassandra.db.FileStruct;
import org.apache.cassandra.utils.BloomFilter;
import org.testng.annotations.Test;
import java.io.File;
import java.io.IOException;
import java.util.*;
public class SSTableTest extends ServerTest {
@Test
public void testSingleWrite() throws IOException {
File f = File.createTempFile("sstable", "");
SSTable ssTable;
// write test data
ssTable = new SSTable(f.getParent(), f.getName(), new OrderPreservingPartitioner());
BloomFilter bf = new BloomFilter(1000, 8);
Random random = new Random();
byte[] bytes = new byte[1024];
random.nextBytes(bytes);
String key = Integer.toString(1);
ssTable.append(key, bytes);
bf.add(key);
ssTable.close(bf);
// verify
SSTable.indexMetadataMap_.clear(); // force reloading the index
ssTable = new SSTable(f.getPath() + "-Data.db", new OrderPreservingPartitioner());
FileStruct fs = new FileStruct(SequenceFile.bufferedReader(ssTable.dataFile_, 128 * 1024), new OrderPreservingPartitioner());
fs.seekTo(key);
int size = fs.getBufIn().readInt();
byte[] bytes2 = new byte[size];
fs.getBufIn().readFully(bytes2);
assert Arrays.equals(bytes2, bytes);
}
@Test
public void testManyWrites() throws IOException {
File f = File.createTempFile("sstable", "");
SSTable ssTable;
TreeMap<String, byte[]> map = new TreeMap<String,byte[]>();
for ( int i = 100; i < 1000; ++i )
{
map.put(Integer.toString(i), ("Avinash Lakshman is a good man: " + i).getBytes());
}
// write
ssTable = new SSTable(f.getParent(), f.getName(), new OrderPreservingPartitioner());
BloomFilter bf = new BloomFilter(1000, 8);
for (String key: map.navigableKeySet())
{
ssTable.append(key, map.get(key));
}
ssTable.close(bf);
// verify
SSTable.indexMetadataMap_.clear(); // force reloading the index
List<String> keys = new ArrayList(map.keySet());
Collections.shuffle(keys);
ssTable = new SSTable(f.getPath() + "-Data.db", new OrderPreservingPartitioner());
FileStruct fs = new FileStruct(SequenceFile.bufferedReader(ssTable.dataFile_, 128 * 1024), new OrderPreservingPartitioner());
for (String key : keys)
{
fs.seekTo(key);
int size = fs.getBufIn().readInt();
byte[] bytes2 = new byte[size];
fs.getBufIn().readFully(bytes2);
assert Arrays.equals(bytes2, map.get(key));
}
}
}