package com.orientechnologies.orient.core.serialization.serializer.binary.impl; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.serialization.serializer.record.ORecordSerializer; import com.orientechnologies.orient.core.serialization.serializer.record.ORecordSerializerFactory; import com.orientechnologies.orient.core.serialization.serializer.record.binary.ORecordSerializationDebug; import com.orientechnologies.orient.core.serialization.serializer.record.binary.ORecordSerializerBinary; import com.orientechnologies.orient.core.serialization.serializer.record.binary.ORecordSerializerBinaryDebug; public class ORecordSerializerBinaryDebugTest { private ORecordSerializer previous; @BeforeMethod public void before() { previous = ODatabaseDocumentTx.getDefaultSerializer(); ODatabaseDocumentTx.setDefaultSerializer(new ORecordSerializerBinary()); } @AfterMethod public void after() { ODatabaseDocumentTx.setDefaultSerializer(previous); } @Test public void testSimpleDocumentDebug() { ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory:" + ORecordSerializerBinaryDebugTest.class.getSimpleName()); db.create(); try { ODocument doc = new ODocument(); doc.field("test", "test"); doc.field("anInt", 2); doc.field("anDouble", 2D); byte[] bytes = doc.toStream(); ORecordSerializerBinaryDebug debugger = new ORecordSerializerBinaryDebug(); ORecordSerializationDebug debug = debugger.deserializeDebug(bytes, db); assertEquals(debug.properties.size(), 3); assertEquals(debug.properties.get(0).name, "test"); assertEquals(debug.properties.get(0).type, OType.STRING); assertEquals(debug.properties.get(0).value, "test"); assertEquals(debug.properties.get(1).name, "anInt"); assertEquals(debug.properties.get(1).type, OType.INTEGER); assertEquals(debug.properties.get(1).value, 2); assertEquals(debug.properties.get(2).name, "anDouble"); assertEquals(debug.properties.get(2).type, OType.DOUBLE); assertEquals(debug.properties.get(2).value, 2D); } finally { db.drop(); } } @Test public void testSchemaFullDocumentDebug() { ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory:" + ORecordSerializerBinaryDebugTest.class.getSimpleName()); db.create(); try { OClass clazz = db.getMetadata().getSchema().createClass("some"); clazz.createProperty("testP", OType.STRING); clazz.createProperty("theInt", OType.INTEGER); ODocument doc = new ODocument("some"); doc.field("testP", "test"); doc.field("theInt", 2); doc.field("anDouble", 2D); byte[] bytes = doc.toStream(); ORecordSerializerBinaryDebug debugger = new ORecordSerializerBinaryDebug(); ORecordSerializationDebug debug = debugger.deserializeDebug(bytes, db); assertEquals(debug.properties.size(), 3); assertEquals(debug.properties.get(0).name, "testP"); assertEquals(debug.properties.get(0).type, OType.STRING); assertEquals(debug.properties.get(0).value, "test"); assertEquals(debug.properties.get(1).name, "theInt"); assertEquals(debug.properties.get(1).type, OType.INTEGER); assertEquals(debug.properties.get(1).value, 2); assertEquals(debug.properties.get(2).name, "anDouble"); assertEquals(debug.properties.get(2).type, OType.DOUBLE); assertEquals(debug.properties.get(2).value, 2D); } finally { db.drop(); } } @Test public void testSimpleBrokenDocumentDebug() { ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory:" + ORecordSerializerBinaryDebugTest.class.getSimpleName()); db.create(); try { ODocument doc = new ODocument(); doc.field("test", "test"); doc.field("anInt", 2); doc.field("anDouble", 2D); byte[] bytes = doc.toStream(); byte[] brokenBytes = new byte[bytes.length - 10]; System.arraycopy(bytes, 0, brokenBytes, 0, bytes.length - 10); ORecordSerializerBinaryDebug debugger = new ORecordSerializerBinaryDebug(); ORecordSerializationDebug debug = debugger.deserializeDebug(brokenBytes, db); assertEquals(debug.properties.size(), 3); assertEquals(debug.properties.get(0).name, "test"); assertEquals(debug.properties.get(0).type, OType.STRING); assertEquals(debug.properties.get(0).faildToRead, true); assertNotNull(debug.properties.get(0).readingException); assertEquals(debug.properties.get(1).name, "anInt"); assertEquals(debug.properties.get(1).type, OType.INTEGER); assertEquals(debug.properties.get(1).faildToRead, true); assertNotNull(debug.properties.get(1).readingException); assertEquals(debug.properties.get(2).name, "anDouble"); assertEquals(debug.properties.get(2).type, OType.DOUBLE); assertEquals(debug.properties.get(2).faildToRead, true); assertNotNull(debug.properties.get(2).readingException); } finally { db.drop(); } } @Test public void testBrokenSchemaFullDocumentDebug() { ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory:" + ORecordSerializerBinaryDebugTest.class.getSimpleName()); db.create(); try { OClass clazz = db.getMetadata().getSchema().createClass("some"); clazz.createProperty("testP", OType.STRING); clazz.createProperty("theInt", OType.INTEGER); ODocument doc = new ODocument("some"); doc.field("testP", "test"); doc.field("theInt", 2); doc.field("anDouble", 2D); byte[] bytes = doc.toStream(); byte[] brokenBytes = new byte[bytes.length - 10]; System.arraycopy(bytes, 0, brokenBytes, 0, bytes.length - 10); ORecordSerializerBinaryDebug debugger = new ORecordSerializerBinaryDebug(); ORecordSerializationDebug debug = debugger.deserializeDebug(brokenBytes, db); assertEquals(debug.properties.size(), 3); assertEquals(debug.properties.get(0).name, "testP"); assertEquals(debug.properties.get(0).type, OType.STRING); assertEquals(debug.properties.get(0).faildToRead, true); assertNotNull(debug.properties.get(0).readingException); assertEquals(debug.properties.get(1).name, "theInt"); assertEquals(debug.properties.get(1).type, OType.INTEGER); assertEquals(debug.properties.get(1).faildToRead, true); assertNotNull(debug.properties.get(1).readingException); assertEquals(debug.properties.get(2).name, "anDouble"); assertEquals(debug.properties.get(2).type, OType.DOUBLE); assertEquals(debug.properties.get(2).faildToRead, true); assertNotNull(debug.properties.get(2).readingException); } finally { db.drop(); } } }