package ser.unit.tests; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.util.HashSet; import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.nustaq.serialization.FSTConfiguration; import org.nustaq.serialization.FSTObjectOutput; import ser.unit.tests.externalizable.BeanTestClass2; import ser.unit.tests.externalizable.ExternalizableTestClass; public class TestFastSerializationBean2 { @Test public void serializationTest() throws IOException, ClassNotFoundException { // Instantiation of the ExternalizableTestClass object int integer = 10; String path = "path"; ExternalizableTestClass object = new ExternalizableTestClass(integer, path); Set<ExternalizableTestClass> set = new HashSet<ExternalizableTestClass>(); set.add(object); BeanTestClass2 bean = new BeanTestClass2(object, set); // when serialized and deserialized, the integer value of all ExternalizableTestClass objects should be // overwritten by readResolve and set to 1. // Java // 1. serialize byte[] data1; try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bos)) { out.writeObject(bean); data1 = bos.toByteArray(); } // 2. deserialize BeanTestClass2 bean1; try (ByteArrayInputStream bis = new ByteArrayInputStream(data1); ObjectInput in = new ObjectInputStream(bis)) { bean1 = (BeanTestClass2) in.readObject(); } Assert.assertEquals(1, bean1.getObject().getInteger()); Assert.assertEquals(1, ((ExternalizableTestClass) bean1.getSet().toArray()[0]).getInteger()); // FST // 1. serialize FSTConfiguration config = FSTConfiguration.createDefaultConfiguration(); FSTObjectOutput out2 = config.getObjectOutput(); out2.writeObject(bean); byte[] data2 = out2.getCopyOfWrittenBuffer(); out2.close(); // 2. deserialize BeanTestClass2 bean2 = (BeanTestClass2) config.getObjectInput(data2).readObject(); Assert.assertEquals(1, bean2.getObject().getInteger()); Assert.assertEquals(1, ((ExternalizableTestClass) bean2.getSet().toArray()[0]).getInteger()); } }