new sonar issues in policy/common
Only throw one type of exception in Serializer.
Try to increase test coverage in Serializer.
Change-Id: I170de0ab727041aa42731c08d6cc454731d29a20
Issue-ID: POLICY-1130
Signed-off-by: Jim Hahn <jrh3@att.com>
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 227b810..31e0b85 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
@@ -83,9 +83,6 @@
* so we'll just do it with a factory method.
*/
return clazz.cast(factory.readObject(ois));
-
- } catch (ClassNotFoundException e) {
- throw new IOException(e);
}
}
@@ -127,8 +124,13 @@
oos.writeObject(object);
}
- public Object readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
- return ois.readObject();
+ public Object readObject(ObjectInputStream ois) throws IOException {
+ try {
+ return ois.readObject();
+
+ } catch (ClassNotFoundException e) {
+ throw new IOException(e);
+ }
}
}
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/io/SerializerTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/io/SerializerTest.java
index bdf0dba..613897d 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/io/SerializerTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/io/SerializerTest.java
@@ -163,6 +163,54 @@
}
@Test
+ public void testSerialize_BothCloseEx() throws Exception {
+ IOException ex = new IOException("testSerialize_BothCloseEx");
+ IOException ex2 = new IOException("testSerialize_BothCloseEx_2");
+ ObjectOutputStream oos = mock(ObjectOutputStream.class);
+ doThrow(ex2).when(oos).close();
+
+ /*
+ * This stream will throw an exception when close() is invoked. However, close()
+ * is called twice, once by the ObjectOutputStream and once by the code we want to
+ * test. As a result, we'll have the first close() succeed and the second one
+ * fail.
+ */
+ ByteArrayOutputStream out = new ByteArrayOutputStream() {
+ private int nclose = 0;
+
+ @Override
+ public void close() throws IOException {
+ if (++nclose > 1) {
+ throw ex;
+ }
+ }
+ };
+
+ /*
+ * Use a factory that returns our special stream.
+ */
+ setFactory(new Factory() {
+ @Override
+ public ByteArrayOutputStream makeByteArrayOutputStream() {
+ return out;
+ }
+
+ @Override
+ public ObjectOutputStream makeObjectOutputStream(ByteArrayOutputStream out) throws IOException {
+ return oos;
+ }
+
+ @Override
+ public void writeObject(Object object, ObjectOutputStream oos) throws IOException {
+ return;
+ }
+ });
+
+ assertEquals(ex2, expectException(() -> Serializer.serialize(new MyObject(130))));
+
+ }
+
+ @Test
public void testDeserialize() throws Exception {
MyObject obj1 = new MyObject(3);
byte[] data = Serializer.serialize(obj1);
@@ -202,29 +250,6 @@
}
@Test
- public void testDeserialize_ObjectReadClassEx() throws Exception {
- ClassNotFoundException ex = new ClassNotFoundException("testDeserialize_ObjectReadClassEx");
-
- /*
- * Use a factory that throws a ClassNotFoundException when readObject() is
- * invoked.
- */
- setFactory(new Factory() {
- @Override
- public Object readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
- throw ex;
- }
- });
-
- byte[] data = Serializer.serialize(new MyObject(305));
-
- Exception exwrap = expectException(() -> Serializer.deserialize(MyObject.class, data));
- assertTrue(exwrap instanceof IOException);
- assertNotNull(exwrap.getCause());
- assertEquals(ex, exwrap.getCause());
- }
-
- @Test
public void testDeserialize_ObjectReadEx() throws Exception {
IOException ex = new IOException("testDeserialize_ObjectReadEx");
@@ -233,7 +258,7 @@
*/
setFactory(new Factory() {
@Override
- public Object readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+ public Object readObject(ObjectInputStream ois) throws IOException {
throw ex;
}
});