fix sonar critical bug 71/78571/1
authork.kazak <k.kazak@samsung.com>
Fri, 15 Feb 2019 16:27:08 +0000 (17:27 +0100)
committerk.kazak <k.kazak@samsung.com>
Fri, 15 Feb 2019 16:27:08 +0000 (17:27 +0100)
MsoHeatUtils: remove unnecessary heatClient check for null
1. sonar assumes that heatClient is nullable and NullPointer may be thrown in line 309
2. heatClient is never null: method creates a new object or throws Exception
MsoHeatUtilsTest: added tests for getHeatClient and createStack methods
BaseTest: made CloudIdentity and CloudSite getters protected for other tests to use them
StubOpenStack: added stubs for getStack and unsuccessful authorization
removed unused imports

Change-Id: Ie62c89f55d1894df48d9cc4d14760d36e96c4cb2
Issue-ID: SO-1516
Signed-off-by: k.kazak <k.kazak@samsung.com>
adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
adapters/mso-adapter-utils/src/test/java/org/onap/so/BaseTest.java
adapters/mso-adapter-utils/src/test/java/org/onap/so/StubOpenStack.java
adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java

index 20498cb..ddc7251 100644 (file)
@@ -5,6 +5,8 @@
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -21,7 +23,6 @@
 
 package org.onap.so.openstack.utils;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -29,7 +30,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.Set;
 
 import org.onap.so.adapters.vdu.CloudInfo;
@@ -55,7 +55,6 @@ import org.onap.so.db.catalog.beans.ServerType;
 import org.onap.so.logger.MessageEnum;
 
 import org.onap.so.logger.MsoLogger;
-import org.onap.so.openstack.beans.HeatCacheEntry;
 import org.onap.so.openstack.beans.HeatStatus;
 import org.onap.so.openstack.beans.StackInfo;
 import org.onap.so.openstack.exceptions.MsoAdapterException;
@@ -72,7 +71,6 @@ import org.springframework.context.annotation.Primary;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
-import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.woorea.openstack.base.client.OpenStackConnectException;
@@ -298,9 +296,7 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{
         // Get a Heat client. They are cached between calls (keyed by tenantId:cloudId)
         // This could throw MsoTenantNotFound or MsoOpenstackException (both propagated)
         Heat heatClient = getHeatClient (cloudSite, tenantId);
-        if (heatClient != null) {
-            LOGGER.debug("Found: " + heatClient.toString());
-        }
+        LOGGER.debug("Found: " + heatClient.toString());
 
         LOGGER.debug ("Ready to Create Stack (" + heatTemplate + ") with input params: " + stackInputs);
 
index 087ac6f..9cfdf53 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -86,7 +88,7 @@ public abstract class BaseTest extends TestDataSetup {
                                .withStatus(HttpStatus.SC_OK)));
        }
 
-       private CloudIdentity getCloudIdentity() {
+       protected CloudIdentity getCloudIdentity() {
                CloudIdentity identity = new CloudIdentity();
                identity.setId("mtn13");
                identity.setMsoId("m93945");
@@ -100,7 +102,7 @@ public abstract class BaseTest extends TestDataSetup {
                return identity;
        }
 
-       private CloudSite getCloudSite(CloudIdentity identity) {
+       protected CloudSite getCloudSite(CloudIdentity identity) {
                CloudSite cloudSite = new CloudSite();
                cloudSite.setId("MTN13");
                cloudSite.setCloudVersion("3.0");
@@ -123,4 +125,4 @@ public abstract class BaseTest extends TestDataSetup {
                        return sb.toString();
                }
        }
-}
\ No newline at end of file
+}
index f5867be..0820076 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
 
 package org.onap.so;
 
-import org.apache.http.HttpStatus;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.delete;
 import static com.github.tomakehurst.wiremock.client.WireMock.get;
@@ -35,6 +31,11 @@ import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import org.apache.http.HttpStatus;
+
 public class StubOpenStack {
 
     public static void mockOpenStackResponseAccess(int port) throws IOException {
@@ -43,11 +44,27 @@ public class StubOpenStack {
                 .withStatus(HttpStatus.SC_OK)));
     }
 
+    public static void mockOpenStackResponseUnauthorized(int port) throws IOException {
+        stubFor(
+            post(urlPathEqualTo("/v2.0/tokens"))
+                .willReturn(aResponse().withHeader("Content-Type", "application/json")
+                    .withBody(getBodyFromFile("OpenstackResponse_Access.json", port, "/mockPublicUrl"))
+                    .withStatus(HttpStatus.SC_UNAUTHORIZED)));
+    }
+
     public static void mockOpenStackDelete(String id) {
         stubFor(delete(urlMatching("/mockPublicUrl/stacks/" + id)).willReturn(aResponse()
                 .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK)));
     }
 
+    public static void mockOpenStackGet(String id) {
+        stubFor(
+            get(urlPathEqualTo("/mockPublicUrl/stacks/" + id))
+                .willReturn(aResponse().withHeader("Content-Type", "application/json")
+                    .withBodyFile("OpenstackResponse_Stack_Created.json")
+                    .withStatus(HttpStatus.SC_OK)));
+    }
+
 
     public static void mockOpenStackPostStack_200(String filename) {
         stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")).willReturn(aResponse()
index 6517122..f9fc928 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -26,17 +28,19 @@ import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static org.junit.Assert.assertNotNull;
 
+import com.woorea.openstack.heat.Heat;
+import com.woorea.openstack.heat.model.CreateStackParam;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
-import com.woorea.openstack.heat.model.CreateStackParam;
 import org.apache.http.HttpStatus;
 import org.junit.Assert;
 import org.junit.Test;
+import org.onap.so.BaseTest;
 import org.onap.so.StubOpenStack;
 import org.onap.so.adapters.vdu.CloudInfo;
 import org.onap.so.adapters.vdu.PluginAction;
@@ -46,13 +50,13 @@ import org.onap.so.adapters.vdu.VduInstance;
 import org.onap.so.adapters.vdu.VduModelInfo;
 import org.onap.so.adapters.vdu.VduStateType;
 import org.onap.so.adapters.vdu.VduStatus;
-import org.onap.so.cloud.CloudConfig;
-import org.onap.so.BaseTest;
+import org.onap.so.db.catalog.beans.CloudIdentity;
 import org.onap.so.db.catalog.beans.CloudSite;
-import org.onap.so.openstack.beans.HeatStatus;
 import org.onap.so.openstack.beans.StackInfo;
+import org.onap.so.openstack.exceptions.MsoAdapterException;
 import org.onap.so.openstack.exceptions.MsoException;
-
+import org.onap.so.openstack.exceptions.MsoIOException;
+import org.onap.so.openstack.exceptions.MsoOpenstackException;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class MsoHeatUtilsTest extends BaseTest{
@@ -187,6 +191,47 @@ public class MsoHeatUtilsTest extends BaseTest{
                heatUtils.copyBaseOutputsToInputs(inputs, otherStackOutputs, null, aliases);
                Assert.assertEquals("str",otherStackOutputs.get("str"));
        }
-       
 
+    @Test
+    public final void getHeatClientSuccessTest() throws MsoException, IOException {
+        CloudSite cloudSite = getCloudSite(getCloudIdentity());
+        StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
+        Heat heatClient = heatUtils.getHeatClient(cloudSite, "TEST-tenant");
+        assertNotNull(heatClient);
+    }
+
+    @Test(expected = MsoOpenstackException.class)
+    public final void getHeatClientOpenStackResponseException404Test() throws MsoException, IOException {
+        CloudSite cloudSite = getCloudSite(getCloudIdentity());
+        // mo mocks setup will cause 404 response from wiremock
+        heatUtils.getHeatClient(cloudSite, "TEST-tenant");
+    }
+
+    @Test(expected = MsoAdapterException.class)
+    public final void getHeatClientOpenStackResponseException401Test() throws MsoException, IOException {
+        CloudSite cloudSite = getCloudSite(getCloudIdentity());
+        StubOpenStack.mockOpenStackResponseUnauthorized(wireMockPort);
+        heatUtils.getHeatClient(cloudSite, "TEST-tenant");
+    }
+
+    @Test(expected = MsoIOException.class)
+    public final void getHeatClientOpenStackConnectExceptionTest() throws MsoException, IOException {
+        CloudIdentity identity = getCloudIdentity();
+        identity.setIdentityUrl("http://unreachable");
+        CloudSite cloudSite = getCloudSite(identity);
+        // mo mocks setup will cause 404 response from wiremock
+        heatUtils.getHeatClient(cloudSite, "TEST-tenant");
+    }
+
+    @Test
+    public final void createStackSuccessTest() throws MsoException, IOException {
+        CloudSite cloudSite = getCloudSite(getCloudIdentity());
+        StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
+        StubOpenStack.mockOpenStackPostStack_200("OpenstackResponse_Stack_Created.json");
+        StubOpenStack.mockOpenStackGet("TEST-stack/stackId");
+        StackInfo stackInfo = heatUtils.createStack(cloudSite.getId(), "tenantId", "TEST-stack",
+            "TEST-heat", new HashMap<>(), false, 1, "TEST-env",
+            new HashMap<>(), new HashMap<>(), false);
+        assertNotNull(stackInfo);
+    }
 }