package org.mapdb;
import org.mapdb.volume.Volume;
import java.util.LinkedList;
import static org.junit.Assert.*;
/**
* Test if sequence is matching
*/
public class WALSequence implements WriteAheadLog.WALReplay {
final java.util.LinkedList<Object[]> seq;
static final String beforeReplayStart = "beforeReplayStart";
static final String writeLong = "writeLong";
static final String writeRecord = "writeRecord";
static final String writeByteArray = "writeByteArray";
static final String commit = "commit";
static final String rollback = "rollback";
static final String writeTombstone = "writeTombstone";
static final String writePreallocate = "writePreallocate";
public WALSequence(Object[]... params) {
seq = new LinkedList<Object[]>();
for(Object[] p:params){
seq.add(p);
}
}
@Override
public void beforeReplayStart() {
Object[] r = seq.remove();
assertEquals(beforeReplayStart, r[0]);
assertEquals(1,r.length);
}
@Override
public void writeLong(long offset, long value) {
Object[] r = seq.remove();
assertEquals(writeLong, r[0]);
assertEquals(offset,r[1]);
assertEquals(value,r[2]);
assertEquals(3,r.length);
}
@Override
public void writeRecord(long recid, long walId, Volume vol, long volOffset, int length) {
Object[] r = seq.remove();
byte[] data = new byte[length];
vol.getData(volOffset, data,0,data.length);
assertEquals(writeRecord, r[0]);
assertEquals(recid,r[1]);
assertEquals(walId, r[2]);
assertArrayEquals(data, (byte[]) r[3]);
assertEquals(4,r.length);
}
@Override
public void writeByteArray(long offset, long walId, Volume vol, long volOffset, int length) {
Object[] r = seq.remove();
byte[] data = new byte[length];
vol.getData(volOffset, data,0,data.length);
assertEquals(writeByteArray, r[0]);
assertEquals(offset, r[1]);
assertEquals(walId, r[2]);
assertArrayEquals(data, (byte[]) r[3]);
assertEquals(4,r.length);
}
@Override
public void afterReplayFinished() {
assertTrue(seq.isEmpty());
}
@Override
public void commit() {
Object[] r = seq.remove();
assertEquals(commit, r[0]);
assertEquals(1,r.length);
}
@Override
public void rollback() {
Object[] r = seq.remove();
assertEquals(rollback, r[0]);
assertEquals(1,r.length);
}
@Override
public void writeTombstone(long recid) {
Object[] r = seq.remove();
assertEquals(writeTombstone, r[0]);
assertEquals(recid, r[1]);
assertEquals(2,r.length);
}
@Override
public void writePreallocate(long recid) {
Object[] r = seq.remove();
assertEquals(writePreallocate, r[0]);
assertEquals(recid, r[1]);
assertEquals(2,r.length);
}
}