Fix NPE in UpdateReq.reconfigure() 44/129744/1
authorJim Hahn <jrh3@att.com>
Tue, 6 Jul 2021 20:03:22 +0000 (16:03 -0400)
committerRam Krishna Verma <ram_krishna.verma@bell.ca>
Thu, 14 Jul 2022 17:17:08 +0000 (17:17 +0000)
While running CSIT to test heartbeat changes with multiple PAPs,
observed an NPE in UpdateReq.reconfigure().  Modified the code to
always use deployment lists instead of null lists.

Issue-ID: POLICY-3460
Change-Id: I884e091817e88309330139a01d060e286bd42008
Signed-off-by: Jim Hahn <jrh3@att.com>
(cherry picked from commit a87b9d9e191b4dee5d821db55d1ff4fd70b8d73a)

main/src/main/java/org/onap/policy/pap/main/comm/msgdata/UpdateReq.java
main/src/test/java/org/onap/policy/pap/main/comm/msgdata/UpdateReqTest.java

index 18ae5af..74d7ad8 100644 (file)
@@ -122,6 +122,10 @@ public class UpdateReq extends RequestImpl {
 
         PdpUpdate update = (PdpUpdate) newMessage;
 
+        // ensure lists are never null
+        update.setPoliciesToBeDeployed(alwaysList(update.getPoliciesToBeDeployed()));
+        update.setPoliciesToBeUndeployed(alwaysList(update.getPoliciesToBeUndeployed()));
+
         if (isSameContent(update)) {
             // content hasn't changed - nothing more to do
             return true;
index d85bf73..d636f8b 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.policy.pap.main.comm.msgdata;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotSame;
@@ -196,6 +197,16 @@ public class UpdateReqTest extends CommonRequestBase {
         msg2.setPdpGroup(DIFFERENT);
         assertTrue(data.reconfigure(msg2));
         assertSame(msg2, data.getMessage());
+
+        // both lists in the update are null - should not throw an exception
+        PdpUpdate msg3 = new PdpUpdate(update);
+        msg3.setPdpGroup(DIFFERENT);
+        msg3.setPoliciesToBeDeployed(null);
+        msg3.setPoliciesToBeUndeployed(null);
+        assertThatCode(() -> data.reconfigure(msg3)).doesNotThrowAnyException();
+
+        // both lists in the current msg (i.e., msg3) are null - should not throw an exception
+        assertThatCode(() -> data.reconfigure(update)).doesNotThrowAnyException();
     }
 
     @Test