package org.reveno.atp.core.serialization; import org.junit.Assert; import org.junit.Test; import org.reveno.atp.api.domain.RepositoryData; import org.reveno.atp.core.api.TransactionCommitInfo; import org.reveno.atp.core.api.serialization.RepositoryDataSerializer; import org.reveno.atp.core.api.serialization.TransactionInfoSerializer; import org.reveno.atp.core.channel.ChannelBuffer; import org.reveno.atp.core.impl.TransactionCommitInfoImpl; import java.util.Arrays; import java.util.HashMap; public class SerializersTest { @Test public void defaultJavaTest() { DefaultJavaSerializer ser = new DefaultJavaSerializer(); test(ser, ser); } @Test public void protostuffTest() { ProtostuffSerializer ser = new ProtostuffSerializer(); ser.registerTransactionType(User.class); test(ser, ser); } @Test(expected = RuntimeException.class) public void protostuffExceptionTest() { ProtostuffSerializer ser = new ProtostuffSerializer(); ser.registerTransactionType(Empty.class); test(ser, ser); } public void test(TransactionInfoSerializer tiSer, RepositoryDataSerializer rdSer) { final User u1 = new User("Artem", 22); final User u2 = new User("Maxim", 28); RepositoryData data = new RepositoryData(new HashMap<>()); data.data.put(User.class, new HashMap<>()); data.data.get(User.class).put(1L, u1); data.data.get(User.class).put(2L, u2); ChannelBuffer buffer = new ChannelBuffer(java.nio.ByteBuffer.allocate(1024 * 1024)); rdSer.serialize(data, buffer); buffer.getBuffer().flip(); data = rdSer.deserialize(buffer); Assert.assertEquals(u1, data.data.get(User.class).get(1L)); Assert.assertEquals(u2, data.data.get(User.class).get(2L)); buffer.clear(); TransactionCommitInfo ti = new TransactionCommitInfoImpl.PojoBuilder().create() .transactionId(2).time(4).transactionCommits(Arrays.asList(new Object[] { u1, u2 })); tiSer.serialize(ti, buffer); buffer.getBuffer().flip(); ti = tiSer.deserialize(new TransactionCommitInfoImpl.PojoBuilder(), buffer); Assert.assertEquals(ti.transactionId(), 2L); Assert.assertEquals(ti.time(), 4); Assert.assertSame(2, ti.transactionCommits().size()); Assert.assertEquals(u1, ti.transactionCommits().get(0)); Assert.assertEquals(u2, ti.transactionCommits().get(1)); } public static class Empty {} }