use of org.apache.geode.internal.offheap.OffHeapStoredObject in project geode by apache.
the class OldValueImporterTestBase method testValueSerialization.
@Test
public void testValueSerialization() throws Exception {
byte[] bytes = new byte[1024];
HeapDataOutputStream hdos = new HeapDataOutputStream(bytes);
OldValueImporter imsg = createImporter();
// null byte array value
{
OldValueImporter omsg = createImporter();
omsg.importOldBytes(null, false);
toData(omsg, hdos);
fromData(imsg, bytes);
assertEquals(null, getOldValueFromImporter(imsg));
}
// null object value
{
OldValueImporter omsg = createImporter();
omsg.importOldObject(null, true);
toData(omsg, hdos);
fromData(imsg, bytes);
assertEquals(null, getOldValueFromImporter(imsg));
}
// simple byte array
{
byte[] baValue = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
OldValueImporter omsg = createImporter();
omsg.importOldBytes(baValue, false);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(baValue, (byte[]) getOldValueFromImporter(imsg));
}
// String in serialized form
{
String stringValue = "1,2,3,4,5,6,7,8,9";
byte[] stringValueBlob = EntryEventImpl.serialize(stringValue);
OldValueImporter omsg = createImporter();
omsg.importOldBytes(stringValueBlob, true);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(stringValueBlob, ((VMCachedDeserializable) getOldValueFromImporter(imsg)).getSerializedValue());
}
// String in object form
{
String stringValue = "1,2,3,4,5,6,7,8,9";
byte[] stringValueBlob = EntryEventImpl.serialize(stringValue);
OldValueImporter omsg = createImporter();
omsg.importOldObject(stringValue, true);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(stringValueBlob, ((VMCachedDeserializable) getOldValueFromImporter(imsg)).getSerializedValue());
}
// off-heap DataAsAddress byte array
{
MemoryAllocatorImpl sma = MemoryAllocatorImpl.createForUnitTest(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new SlabImpl[] { new SlabImpl(1024 * 1024) });
try {
byte[] baValue = new byte[] { 1, 2 };
TinyStoredObject baValueSO = (TinyStoredObject) sma.allocateAndInitialize(baValue, false, false);
OldValueImporter omsg = createImporter();
omsg.importOldObject(baValueSO, false);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(baValue, (byte[]) getOldValueFromImporter(imsg));
} finally {
MemoryAllocatorImpl.freeOffHeapMemory();
}
}
// off-heap Chunk byte array
{
MemoryAllocatorImpl sma = MemoryAllocatorImpl.createForUnitTest(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new SlabImpl[] { new SlabImpl(1024 * 1024) });
try {
byte[] baValue = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
OffHeapStoredObject baValueSO = (OffHeapStoredObject) sma.allocateAndInitialize(baValue, false, false);
OldValueImporter omsg = createImporter();
omsg.importOldObject(baValueSO, false);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(baValue, (byte[]) getOldValueFromImporter(imsg));
} finally {
MemoryAllocatorImpl.freeOffHeapMemory();
}
}
// off-heap DataAsAddress String
{
MemoryAllocatorImpl sma = MemoryAllocatorImpl.createForUnitTest(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new SlabImpl[] { new SlabImpl(1024 * 1024) });
try {
String baValue = "12";
byte[] baValueBlob = BlobHelper.serializeToBlob(baValue);
TinyStoredObject baValueSO = (TinyStoredObject) sma.allocateAndInitialize(baValueBlob, true, false);
OldValueImporter omsg = createImporter();
omsg.importOldObject(baValueSO, true);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(baValueBlob, ((VMCachedDeserializable) getOldValueFromImporter(imsg)).getSerializedValue());
} finally {
MemoryAllocatorImpl.freeOffHeapMemory();
}
}
// off-heap Chunk String
{
MemoryAllocatorImpl sma = MemoryAllocatorImpl.createForUnitTest(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new SlabImpl[] { new SlabImpl(1024 * 1024) });
try {
String baValue = "12345678";
byte[] baValueBlob = BlobHelper.serializeToBlob(baValue);
OffHeapStoredObject baValueSO = (OffHeapStoredObject) sma.allocateAndInitialize(baValueBlob, true, false);
OldValueImporter omsg = createImporter();
omsg.importOldObject(baValueSO, true);
hdos = new HeapDataOutputStream(bytes);
toData(omsg, hdos);
fromData(imsg, bytes);
assertArrayEquals(baValueBlob, ((VMCachedDeserializable) getOldValueFromImporter(imsg)).getSerializedValue());
} finally {
MemoryAllocatorImpl.freeOffHeapMemory();
}
}
}
use of org.apache.geode.internal.offheap.OffHeapStoredObject in project geode by apache.
the class OffHeapByteBufferByteSourceJUnitTest method createByteSource.
@Override
protected ByteSource createByteSource(byte[] bytes) {
StoredObject so = MemoryAllocatorImpl.getAllocator().allocateAndInitialize(bytes, false, false);
if (so instanceof OffHeapStoredObject) {
OffHeapStoredObject c = (OffHeapStoredObject) so;
ByteBuffer bb = c.createDirectByteBuffer();
if (bb == null) {
fail("could not create a direct ByteBuffer for an off-heap Chunk");
}
return ByteSourceFactory.create(bb);
} else {
// So for this test just wrap the original bytes.
return ByteSourceFactory.wrap(bytes);
}
}
Aggregations