diff options
Diffstat (limited to 'utils-test/src/main')
-rw-r--r-- | utils-test/src/main/java/org/onap/policy/common/utils/io/Serializer.java | 64 |
1 files changed, 55 insertions, 9 deletions
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 @@ -32,6 +32,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. */ private Serializer() { @@ -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 <T> 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> T deserialize(Class<T> 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> 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(); + } + + } } |