package org.limewire.rudp;
import junit.framework.TestCase;
public class DataWindowTest extends TestCase {
public void testAddData() {
DataWindow window = new DataWindow(20, 0);
assertFalse(window.hasReadableData());
StubDataMessage msg1 = new StubDataMessage(0);
DataRecord rec = window.addData(msg1);
assertTrue(window.hasReadableData());
assertSame(msg1, rec.msg);
StubDataMessage msg2 = new StubDataMessage(0);
rec = window.addData(msg2);
assertTrue(window.hasReadableData());
assertSame(msg1, rec.msg);
}
public void testGetWindowSize() {
DataWindow window = new DataWindow(2, 0);
assertEquals(2, window.getWindowSize());
try {
window = new DataWindow(0, 0);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
try {
window = new DataWindow(-1, 0);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
}
public void testClearEarlyReadBlocks() {
DataWindow window = new DataWindow(2, 0);
assertFalse(window.hasReadableData());
assertEquals(2, window.getWindowSpace());
DataRecord rec1 = window.addData(new StubDataMessage(0));
assertTrue(window.hasReadableData());
assertEquals(1, window.getWindowSpace());
window.clearEarlyReadBlocks();
assertNotNull(window.getBlock(0));
assertEquals(1, window.getWindowSpace());
rec1.read = true;
window.clearEarlyReadBlocks();
assertEquals(2, window.getWindowSpace());
assertFalse(window.hasReadableData());
assertNull(window.getBlock(0));
rec1 = window.addData(new StubDataMessage(1));
DataRecord rec2 = window.addData(new StubDataMessage(2));
assertTrue(window.hasReadableData());
window.clearEarlyReadBlocks();
assertNull(window.getBlock(0));
assertNotNull(window.getBlock(1));
assertTrue(window.hasReadableData());
rec2.read = true;
window.clearEarlyReadBlocks();
assertTrue(window.hasReadableData());
assertEquals(0, window.getWindowSpace());
assertNotNull(window.getBlock(1));
assertNotNull(window.getBlock(2));
rec1.read = true;
window.clearEarlyReadBlocks();
assertFalse(window.hasReadableData());
assertEquals(2, window.getWindowSpace());
assertNull(window.getBlock(1));
assertNull(window.getBlock(2));
}
public void testAdvanceWindow() {
DataWindow window = new DataWindow(2, 5);
assertEquals(5, window.getWindowStart());
DataRecord rec1;
try {
rec1 = window.addData(new StubDataMessage(4));
fail("Expected IllegalStateException, got: " + rec1);
} catch (IllegalStateException expected) {
}
assertEquals(5, window.getWindowStart());
rec1 = window.addData(new StubDataMessage(5));
rec1.read = true;
assertEquals(5, window.getWindowStart());
window.clearEarlyReadBlocks();
assertEquals(6, window.getWindowStart());
try {
rec1 = window.addData(new StubDataMessage(5));
fail("Expected IllegalStateException, got: " + rec1);
} catch (IllegalStateException expected) {
}
}
public void testGetUsedSpots() {
DataWindow window = new DataWindow(2, 0);
assertEquals(0, window.getUsedSpots());
DataRecord rec1 = window.addData(new StubDataMessage(0));
assertEquals(1, window.getUsedSpots());
rec1 = window.addData(new StubDataMessage(0));
rec1.read = true;
assertEquals(0, window.getUsedSpots());
window.clearEarlyReadBlocks();
assertEquals(0, window.getUsedSpots());
DataRecord rec2 = window.addData(new StubDataMessage(2));
assertEquals(1, window.getUsedSpots());
rec2 = window.addData(new StubDataMessage(2));
assertEquals(1, window.getUsedSpots());
rec1 = window.addData(new StubDataMessage(1));
assertEquals(2, window.getUsedSpots());
rec1.read = true;
rec2.read = true;
// TODO remove following line
window.clearEarlyReadBlocks();
assertEquals(0, window.getUsedSpots());
}
public void testHasReadable() {
DataWindow window = new DataWindow(2, 0);
assertFalse(window.hasReadableData());
DataRecord rec2 = window.addData(new StubDataMessage(1));
assertFalse(window.hasReadableData());
rec2.read = true;
assertFalse(window.hasReadableData());
DataRecord rec1 = window.addData(new StubDataMessage(0));
assertTrue(window.hasReadableData());
rec1.read = true;
// TODO remove following line
window.clearEarlyReadBlocks();
assertFalse(window.hasReadableData());
}
}