Fix the Sonar Findings 91/36191/2
authorShiwei Tian <tian.shiwei@zte.com.cn>
Fri, 16 Mar 2018 08:57:50 +0000 (16:57 +0800)
committerShiwei Tian <tian.shiwei@zte.com.cn>
Fri, 16 Mar 2018 09:05:25 +0000 (17:05 +0800)
Issue-ID: HOLMES-121

Change-Id: I0b6b0fc81c3f55f21fac28ddedb6d255c2ab663a
Signed-off-by: Shiwei Tian <tian.shiwei@zte.com.cn>
engine-d/pom.xml
engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java
engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java
engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java [new file with mode: 0644]
engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java [new file with mode: 0644]
pom.xml

index 5a00357..d1abda4 100644 (file)
@@ -38,7 +38,7 @@
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
-            <version>2.6.2</version>
+            <version>2.7.0</version>
         </dependency>
         <dependency>
             <groupId>net.sf.json-lib</groupId>
             <artifactId>commons-collections</artifactId>
             <version>3.2.2</version>
         </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-            <version>1.9.3</version>
-        </dependency>
         <dependency>
             <groupId>org.onap.msb.java-sdk</groupId>
             <artifactId>msb-java-sdk</artifactId>
                     <groupId>ch.qos.logback</groupId>
                     <artifactId>logback</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
+                </exclusion>
                 <exclusion>
                     <artifactId>log4j-over-slf4j</artifactId>
                     <groupId>org.slf4j</groupId>
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.3</version>
+        </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <groupId>org.powermock</groupId>
             <artifactId>powermock-module-junit4</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
             <artifactId>powermock-classloading-xstream</artifactId>
             <version>1.6.5</version>
             <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.thoughtworks.xstream</groupId>
+                    <artifactId>xstream</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.thoughtworks.xstream</groupId>
+            <artifactId>xstream</artifactId>
+            <version>1.4.10</version>
         </dependency>
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
index 862895b..935d2c8 100644 (file)
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 package org.onap.holmes.engine.dmaap;
-
-import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
-
 import java.util.ArrayList;
 import java.util.List;
 import lombok.extern.slf4j.Slf4j;
index 12edc99..c2fa5b8 100644 (file)
@@ -35,19 +35,21 @@ public class SubscriberAction {
     private HashMap<String, DMaaPAlarmPolling> pollingTasks = new HashMap<>();
 
     public synchronized void addSubscriber(Subscriber subscriber) {
-        if (!pollingTasks.containsKey(subscriber.getTopic())) {
+        String topic = subscriber.getTopic();
+        if (topic != null && !pollingTasks.containsKey(topic)) {
             DMaaPAlarmPolling pollingTask = new DMaaPAlarmPolling(subscriber, droolsEngine);
             Thread thread = new Thread(pollingTask);
             thread.start();
-            pollingTasks.put(subscriber.getTopic(), pollingTask);
+            pollingTasks.put(topic, pollingTask);
             log.info("Subscribe to topic: " + subscriber.getUrl());
         }
     }
 
     public synchronized void removeSubscriber(Subscriber subscriber) {
-        if (pollingTasks.containsKey(subscriber.getTopic())) {
-            pollingTasks.get(subscriber.getTopic()).stopTask();
-            pollingTasks.remove(subscriber.getTopic());
+        String topic = subscriber.getTopic();
+        if (topic != null && pollingTasks.containsKey(topic)) {
+            pollingTasks.get(topic).stopTask();
+            pollingTasks.remove(topic);
         }
         log.info("Topic unsubscribed: " + subscriber.getUrl());
     }
diff --git a/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java
new file mode 100644 (file)
index 0000000..f4804f3
--- /dev/null
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2017 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.holmes.engine.dmaap;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.*;
+
+import java.lang.reflect.Field;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.holmes.dsa.dmaappolling.Subscriber;
+import org.onap.holmes.engine.manager.DroolsEngine;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+@PrepareForTest({Subscriber.class, DroolsEngine.class})
+@RunWith(PowerMockRunner.class)
+public class DMaaPAlarmPollingTest {
+
+    private DMaaPAlarmPolling dMaaPAlarmPolling;
+    private Subscriber subscriber;
+    private DroolsEngine droolsEngine;
+
+    @Before
+    public void setUp() {
+        subscriber = PowerMock.createMock(Subscriber.class);
+        droolsEngine = PowerMock.createMock(DroolsEngine.class);
+        dMaaPAlarmPolling = new DMaaPAlarmPolling(subscriber, droolsEngine);
+        PowerMock.replayAll();
+    }
+
+    @Test
+    public void test_stop_task_ok() throws Exception {
+        dMaaPAlarmPolling.stopTask();
+        Field field = DMaaPAlarmPolling.class.getDeclaredField("isAlive");
+        field.setAccessible(true);
+        assertThat(field.get(dMaaPAlarmPolling), equalTo(false));
+    }
+
+}
\ No newline at end of file
diff --git a/engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java
new file mode 100644 (file)
index 0000000..7f5d56e
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.holmes.engine.dmaap;
+
+import java.util.HashMap;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.holmes.dsa.dmaappolling.Subscriber;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.reflect.Whitebox;
+
+public class SubscriberActionTest {
+
+    private SubscriberAction subscriberAction;
+
+    @Before
+    public void setUp() {
+        subscriberAction = new SubscriberAction();
+        HashMap<String, DMaaPAlarmPolling> dMaaPAlarmPollingHashMap = new HashMap<>();
+        DMaaPAlarmPolling dMaaPAlarmPolling = new DMaaPAlarmPolling(null, null);
+        dMaaPAlarmPollingHashMap.put("test", dMaaPAlarmPolling);
+        DMaaPAlarmPolling dMaaPAlarmPolling1 = new DMaaPAlarmPolling(null, null);
+        dMaaPAlarmPollingHashMap.put("testTopic", dMaaPAlarmPolling1);
+        Whitebox.setInternalState(subscriberAction, "pollingTasks", dMaaPAlarmPollingHashMap);
+        PowerMock.replayAll();
+    }
+
+    @Test
+    public void removeSubscriber() throws Exception {
+        Subscriber subscriber = PowerMock.createMock(Subscriber.class);
+        PowerMock.expectPrivate(subscriber, "getTopic").andReturn("testTopic");
+        PowerMock.expectPrivate(subscriber, "getUrl").andReturn("https");
+        PowerMock.replayAll();
+        subscriberAction.removeSubscriber(subscriber);
+        PowerMock.verifyAll();
+    }
+
+    @Test
+    public void stopPollingTasks() throws Exception {
+        subscriberAction.stopPollingTasks();
+        PowerMock.verifyAll();
+    }
+
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3d84112..66bf816 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                 <scope>test</scope>
             </dependency>
 
+            <dependency>
+                <groupId>org.powermock</groupId>
+                <artifactId>powermock-api-mockito</artifactId>
+                <version>1.7.1</version>
+                <scope>test</scope>
+            </dependency>
+
             <dependency>
                 <groupId>org.apache.httpcomponents</groupId>
                 <artifactId>httpclient</artifactId>