/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import org.ldaptive.jaas.LdapCredential; import org.ldaptive.jaas.LdapDnPrincipal; import org.ldaptive.jaas.LdapGroup; import org.ldaptive.jaas.LdapPrincipal; import org.ldaptive.jaas.LdapRole; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * Test that objects that implement {@link Serializable} can be serialized. * * @author Middleware Services */ public class SerializableTest { /** * Serializable test data. * * @return serializable objects */ @DataProvider(name = "objects") public Object[][] createSerializable() { final LdapAttribute attr1 = new LdapAttribute("string-name", "string-value1", "string-value2"); final LdapAttribute attr2 = new LdapAttribute("binary-name", new byte[] {0x00, 0x01, }, new byte[] {0x02, 0x03, }); final LdapEntry entry1 = new LdapEntry("entry-dn1", attr1, attr2); final LdapEntry entry2 = new LdapEntry("entry-dn2", attr1, attr2); final SearchResult result = new SearchResult(entry1, entry2); final LdapPrincipal prin = new LdapPrincipal("principal-name", entry1); final LdapDnPrincipal dnPrin = new LdapDnPrincipal("dn-principal-name", entry2); final LdapRole role = new LdapRole("role-name"); final LdapCredential cred = new LdapCredential("credential"); final LdapGroup group = new LdapGroup("principal-group-name"); group.addMember(prin); group.addMember(dnPrin); group.addMember(role); return new Object[][] { new Object[] {attr1, }, new Object[] {attr2, }, new Object[] {entry1, }, new Object[] {entry2, }, new Object[] {result, }, new Object[] {prin, }, new Object[] {role, }, new Object[] {cred, }, new Object[] {group, }, }; } /** * @param s serializable object to test * * @throws Exception On test failure. */ @Test(groups = {"serialize"}, dataProvider = "objects") public void testSerialize(final Serializable s) throws Exception { Assert.assertEquals(deserialize(serialize(s)), s); } /** * Serializes the supplied object. * * @param s to serialize * * @return serialized object * * @throws Exception if object cannot be serialized */ private byte[] serialize(final Serializable s) throws Exception { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); try (ObjectOutputStream oos = new ObjectOutputStream(bos)) { oos.writeObject(s); return bos.toByteArray(); } finally { bos.close(); } } /** * Deserializes the supplied byte array. * * @param b to deserialize * * @return deserialized object * * @throws Exception if object cannot be deserialized */ private Object deserialize(final byte[] b) throws Exception { try (ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(b))) { return is.readObject(); } } }