package org.webpieces.recording.api;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import org.junit.Assert;
import org.junit.Test;
public class TestBasicRecordPlayback {
private static final int BASE2 = 400;
private static final int BASE1 = 200;
@Test
public void testRecordPlayback() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
runRecording(out);
byte[] data = out.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(data);
runPlayback(in);
}
private void runPlayback(ByteArrayInputStream in) {
Playback playback = RecordingPlaybackFactory.createPlayback(in, 1);
ByteBuffer first = playback.getNextPacket();
testBufferContents(first, BASE1);
ByteBuffer second = playback.getNextPacket();
testBufferContents(second, BASE2);
ByteBuffer nullPacket = playback.getNextPacket();
Assert.assertNull(nullPacket);
}
private void runRecording(ByteArrayOutputStream out) {
Recorder recorder = RecordingPlaybackFactory.createRecorder(out, 1);
ByteBuffer first = createBufferWithBase(200);
recorder.record(first);
//buffer needs to be still readable/untouched so recorders don't interfere with client logic that uses it..
testBufferContents(first, BASE1);
ByteBuffer second = createBufferWithBase(BASE2);
recorder.record(second);
}
private ByteBuffer createBufferWithBase(int base) {
ByteBuffer first = ByteBuffer.allocate(400);
for(int i = 0; i < 10; i++) {
first.putInt(base+i);
}
first.flip();
return first;
}
private void testBufferContents(ByteBuffer first, int base) {
for(int i = 0; i < 10; i++) {
Assert.assertEquals(base+i, first.getInt());
}
}
}