From 29dd6526f2a86a312578a9ee5d743e8150eacd97 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Thu, 13 Sep 2018 12:40:37 -0400 Subject: add more junit coverage to new Serializer class Removed calls to superclass methods so that appropriate exceptions are thrown. Better comments for new tests. Removed @Ignore from tests. Removed tabs from pom. Change-Id: I97fa63951eed4c2ac5ce0a267d8da5134a2a1c71 Issue-ID: POLICY-1106 Signed-off-by: Jim Hahn --- .../onap/policy/common/utils/io/Serializer.java | 64 +++++++++++++++++++--- 1 file changed, 55 insertions(+), 9 deletions(-) (limited to 'utils-test/src/main/java/org') diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/io/Serializer.java b/utils-test/src/main/java/org/onap/policy/common/utils/io/Serializer.java index 740aad47..227b810a 100644 --- a/utils-test/src/main/java/org/onap/policy/common/utils/io/Serializer.java +++ b/utils-test/src/main/java/org/onap/policy/common/utils/io/Serializer.java @@ -31,6 +31,11 @@ import java.io.ObjectOutputStream; */ public class Serializer { + /** + * Factory to access various objects. May be overridden for junit tests. + */ + private static Factory factory = new Factory(); + /** * The constructor. */ @@ -40,15 +45,20 @@ public class Serializer { /** * Serializes an object into a byte array. - * + * * @param object the object to be serialized * @return the byte array containing the serialized object * @throws IOException if an error occurs */ public static byte[] serialize(T object) throws IOException { - try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - try (ObjectOutputStream oos = new ObjectOutputStream(out)) { - oos.writeObject(object); + try (ByteArrayOutputStream out = factory.makeByteArrayOutputStream()) { + try (ObjectOutputStream oos = factory.makeObjectOutputStream(out)) { + /* + * writeObject() is final and mockito can't mock final methods. In + * addition, powermock seemed to be having difficulty with the junit test + * class as well, so we'll just do it with a factory method. + */ + factory.writeObject(object, oos); } return out.toByteArray(); @@ -57,7 +67,7 @@ public class Serializer { /** * De-serializes an object from a byte array. - * + * * @param clazz class of object that is expected to be de-serialized * @param data the byte array containing the serialized object * @return the object that was de-serialized from the byte array @@ -65,9 +75,14 @@ public class Serializer { */ public static T deserialize(Class clazz, byte[] data) throws IOException { - try (ByteArrayInputStream in = new ByteArrayInputStream(data); - ObjectInputStream ois = new ObjectInputStream(in)) { - return clazz.cast(ois.readObject()); + try (ByteArrayInputStream in = factory.makeByteArrayInputStream(data); + ObjectInputStream ois = factory.makeObjectInputStream(in)) { + /* + * readObject() is final and mockito can't mock final methods. In addition, + * powermock seemed to be having difficulty with the junit test class as well, + * so we'll just do it with a factory method. + */ + return clazz.cast(factory.readObject(ois)); } catch (ClassNotFoundException e) { throw new IOException(e); @@ -77,7 +92,7 @@ public class Serializer { /** * Runs an object through a complete round trip, serializing and then de-serializing * it. - * + * * @param object object to be serialized * @return the object that was de-serialized * @throws IOException if an error occurs @@ -86,4 +101,35 @@ public class Serializer { public static T roundTrip(T object) throws IOException { return (T) deserialize(object.getClass(), serialize(object)); } + + /** + * Factory to access various objects. + */ + public static class Factory { + + public ByteArrayOutputStream makeByteArrayOutputStream() { + return new ByteArrayOutputStream(); + } + + public ByteArrayInputStream makeByteArrayInputStream(byte[] data) { + return new ByteArrayInputStream(data); + } + + public ObjectOutputStream makeObjectOutputStream(ByteArrayOutputStream out) throws IOException { + return new ObjectOutputStream(out); + } + + public ObjectInputStream makeObjectInputStream(ByteArrayInputStream in) throws IOException { + return new ObjectInputStream(in); + } + + public void writeObject(Object object, ObjectOutputStream oos) throws IOException { + oos.writeObject(object); + } + + public Object readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + return ois.readObject(); + } + + } } -- cgit 1.2.3-korg