package com.orientechnologies.orient.core.index.sbtree.local;
import java.nio.ByteBuffer;
import java.util.Random;
import com.orientechnologies.common.directmemory.OByteBufferPool;
import com.orientechnologies.orient.core.storage.cache.OCacheEntry;
import com.orientechnologies.orient.core.storage.cache.OCachePointer;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OLogSequenceNumber;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.orientechnologies.orient.core.storage.impl.local.paginated.base.ODurablePage;
/**
* @author Andrey Lomakin (a.lomakin-at-orientechnologies.com)
* @since 10/1/13
*/
@Test
public class SBTreeValuePageTest {
public void fillPageDataTest() throws Exception {
OByteBufferPool bufferPool = OByteBufferPool.instance();
ByteBuffer bufferOne = bufferPool.acquireDirect(true);
OCachePointer cachePointerOne = new OCachePointer(bufferOne, bufferPool, new OLogSequenceNumber(0, 0), 0, 0);
cachePointerOne.incrementReferrer();
OCacheEntry cacheEntryOne = new OCacheEntry(0, 0, cachePointerOne, false);
cacheEntryOne.acquireExclusiveLock();
OSBTreeValuePage valuePageOne = new OSBTreeValuePage(cacheEntryOne, null, true);
byte[] data = new byte[ODurablePage.MAX_PAGE_SIZE_BYTES + 100];
Random random = new Random();
random.nextBytes(data);
int offset = valuePageOne.fillBinaryContent(data, 0);
Assert.assertEquals(offset, OSBTreeValuePage.MAX_BINARY_VALUE_SIZE);
ByteBuffer bufferTwo = bufferPool.acquireDirect(true);
OCachePointer cachePointerTwo = new OCachePointer(bufferTwo, bufferPool, new OLogSequenceNumber(0, 0), 0, 0);
cachePointerTwo.incrementReferrer();
OCacheEntry cacheEntryTwo = new OCacheEntry(0, 0, cachePointerTwo, false);
cacheEntryTwo.acquireExclusiveLock();
OSBTreeValuePage valuePageTwo = new OSBTreeValuePage(cacheEntryTwo, null, true);
offset = valuePageTwo.fillBinaryContent(data, offset);
Assert.assertEquals(offset, data.length);
valuePageOne.setNextPage(100);
Assert.assertEquals(valuePageOne.getNextPage(), 100);
byte[] readData = new byte[data.length];
offset = valuePageOne.readBinaryContent(readData, 0);
Assert.assertEquals(offset, OSBTreeValuePage.MAX_BINARY_VALUE_SIZE);
offset = valuePageTwo.readBinaryContent(readData, offset);
Assert.assertEquals(offset, data.length);
Assert.assertEquals(data, readData);
cacheEntryOne.releaseExclusiveLock();
cacheEntryTwo.releaseExclusiveLock();
cachePointerOne.decrementReferrer();
cachePointerTwo.decrementReferrer();
}
public void testFreeListPointer() throws Exception {
OByteBufferPool bufferPool = OByteBufferPool.instance();
ByteBuffer buffer = bufferPool.acquireDirect(true);
OCachePointer cachePointer = new OCachePointer(buffer, bufferPool, new OLogSequenceNumber(0, 0), 0, 0);
cachePointer.incrementReferrer();
OCacheEntry cacheEntry = new OCacheEntry(0, 0, cachePointer, false);
cacheEntry.acquireExclusiveLock();
OSBTreeValuePage valuePage = new OSBTreeValuePage(cacheEntry, null, true);
valuePage.setNextFreeListPage(124);
Assert.assertEquals(valuePage.getNextFreeListPage(), 124);
cacheEntry.releaseExclusiveLock();
cachePointer.decrementReferrer();
}
}