2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
 
   8  * you may not use this file except in compliance with the License.
 
   9  * You may obtain a copy of the License at
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  13  * Unless required by applicable law or agreed to in writing, software
 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  * See the License for the specific language governing permissions and
 
  17  * limitations under the License.
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.so.adapters.network;
 
  23 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 
  24 import static com.github.tomakehurst.wiremock.client.WireMock.patch;
 
  25 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 
  26 import static org.junit.Assert.assertNotNull;
 
  27 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeleteStack_200;
 
  28 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeleteStack_500;
 
  29 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetNeutronNetwork;
 
  30 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackCreated_200;
 
  31 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackDeleteOrUpdateComplete_200;
 
  32 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStack_404;
 
  33 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStack_500;
 
  34 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostStack_200;
 
  35 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutNeutronNetwork;
 
  36 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutStack;
 
  37 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess;
 
  38 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenstackGet;
 
  39 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenstackPost;
 
  40 import java.io.IOException;
 
  41 import java.nio.file.Files;
 
  42 import java.nio.file.Paths;
 
  43 import javax.ws.rs.core.MediaType;
 
  44 import javax.xml.ws.Holder;
 
  45 import org.apache.commons.lang3.mutable.MutableBoolean;
 
  46 import org.apache.http.HttpStatus;
 
  47 import org.junit.Rule;
 
  48 import org.junit.Test;
 
  49 import org.junit.rules.ExpectedException;
 
  50 import org.onap.so.adapters.network.exceptions.NetworkException;
 
  51 import org.onap.so.adapters.vnf.BaseRestTestUtils;
 
  52 import org.onap.so.entity.MsoRequest;
 
  53 import org.springframework.beans.factory.annotation.Autowired;
 
  54 import org.springframework.http.HttpEntity;
 
  55 import org.springframework.http.HttpMethod;
 
  56 import org.springframework.http.ResponseEntity;
 
  57 import org.springframework.web.util.UriComponentsBuilder;
 
  58 import com.github.tomakehurst.wiremock.WireMockServer;
 
  59 import com.woorea.openstack.base.client.OpenStackResponseException;
 
  61 public class MSONetworkAdapterImplTest extends BaseRestTestUtils {
 
  63     public static final String NETWORK_ID = "43173f6a-d699-414b-888f-ab243dda6dfe";
 
  64     public static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0";
 
  67     MsoNetworkAdapterImpl impl;
 
  70     public final ExpectedException exception = ExpectedException.none();
 
  73     public void createNetworkByModelNameHeatMode() throws IOException, NetworkException {
 
  75         mockUpdateRequestDb(wireMockServer, "9733c8d1-2668-4e5f-8b51-2cacc9b662c0");
 
  77         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
  79         mockOpenStackGetStack_404(wireMockServer, "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId");
 
  81         mockOpenStackPostStack_200(wireMockServer, "OpenstackResponse_Stack.json");
 
  83         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json",
 
  84                 "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId");
 
  86         MsoRequest request = new MsoRequest();
 
  87         request.setRequestId("9733c8d1-2668-4e5f-8b51-2cacc9b662c0");
 
  88         request.setServiceInstanceId("MIS/1806/25009/SW_INTERNET");
 
  90         Holder<String> stackId = new Holder<String>();
 
  92         impl.createNetwork("mtn13", "bef254252c5d44e6bcec65c180180ab5", "CONTRAIL30_GNDIRECT", null,
 
  93                 "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001", "dvs-mtjnj-01", null, null, null, null, false,
 
  94                 false, null, null, null, request, stackId, new MutableBoolean());
 
  96         assertNotNull(stackId.value);
 
 100     public void createNetworkByModelNameAlreadyExistHeatModeFailIfExistTrue() throws IOException, NetworkException {
 
 101         exception.expect(NetworkException.class);
 
 103         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 105         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json",
 
 106                 "dvspg-VCE_VPE-mtjnj40avbc");
 
 108         MsoRequest request = new MsoRequest();
 
 109         request.setRequestId("9733c8d1-2668-4e5f-8b51-2cacc9b662c0");
 
 110         request.setServiceInstanceId("MIS/1806/25009/SW_INTERNET");
 
 112         Holder<String> stackId = new Holder<String>();
 
 114         impl.createNetwork("mtn13", "bef254252c5d44e6bcec65c180180ab5", "CONTRAIL30_GNDIRECT", null,
 
 115                 "dvspg-VCE_VPE-mtjnj40avbc", "dvs-mtjnj-01", null, null, null, null, true, false, null, null, null,
 
 116                 request, stackId, new MutableBoolean());
 
 121     public void createNetworkByModelNameHeatModeQueryNetworkException() throws IOException, NetworkException {
 
 122         exception.expect(NetworkException.class);
 
 124         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 126         mockOpenstackGet(wireMockServer, "/mockPublicUrl/stacks/dvspg-VCE_VPE-mtjnj40avbc",
 
 127                 HttpStatus.SC_INTERNAL_SERVER_ERROR);
 
 129         MsoRequest request = new MsoRequest();
 
 130         request.setRequestId("9733c8d1-2668-4e5f-8b51-2cacc9b662c0");
 
 131         request.setServiceInstanceId("MIS/1806/25009/SW_INTERNET");
 
 133         Holder<String> stackId = new Holder<String>();
 
 135         impl.createNetwork("mtn13", "bef254252c5d44e6bcec65c180180ab5", "CONTRAIL30_GNDIRECT", null,
 
 136                 "dvspg-VCE_VPE-mtjnj40avbc", "dvs-mtjnj-01", null, null, null, null, true, false, null, null, null,
 
 137                 request, stackId, new MutableBoolean());
 
 141     public void createNetworkByModelNameHeatModeCreateNetworkException() throws IOException, NetworkException {
 
 142         exception.expect(NetworkException.class);
 
 144         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 146         mockOpenStackGetStack_404(wireMockServer, "dvspg-VCE_VPE-mtjnj40avbc");
 
 148         mockOpenstackPost(wireMockServer, "/mockPublicUrl/stacks", HttpStatus.SC_INTERNAL_SERVER_ERROR);
 
 150         MsoRequest request = new MsoRequest();
 
 151         request.setRequestId("9733c8d1-2668-4e5f-8b51-2cacc9b662c0");
 
 152         request.setServiceInstanceId("MIS/1806/25009/SW_INTERNET");
 
 154         Holder<String> stackId = new Holder<String>();
 
 156         impl.createNetwork("mtn13", "bef254252c5d44e6bcec65c180180ab5", "CONTRAIL30_GNDIRECT", null,
 
 157                 "dvspg-VCE_VPE-mtjnj40avbc", "dvs-mtjnj-01", null, null, null, null, false, false, null, null, null,
 
 158                 request, stackId, new MutableBoolean());
 
 162     public void createNetworkByModelNameCloudSiteNotPresentError() throws IOException, NetworkException {
 
 163         exception.expect(NetworkException.class);
 
 165         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 167         mockOpenStackPostStack_200(wireMockServer, "OpenstackResponse_Stack.json");
 
 169         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json",
 
 170                 "dvspg-VCE_VPE-mtjnj40avbc");
 
 172         MsoRequest request = new MsoRequest();
 
 173         request.setRequestId("9733c8d1-2668-4e5f-8b51-2cacc9b662c0");
 
 174         request.setServiceInstanceId("MIS/1806/25009/SW_INTERNET");
 
 176         Holder<String> stackId = new Holder<String>();
 
 178         impl.createNetwork("mtn14", "bef254252c5d44e6bcec65c180180ab5", "CONTRAIL30_GNDIRECT", null,
 
 179                 "dvspg-VCE_VPE-mtjnj40avbc", "dvs-mtjnj-01", null, null, null, null, false, false, null, null, null,
 
 180                 request, stackId, new MutableBoolean());
 
 185     public void deleteNetworkHeatModeSuccess() throws IOException, NetworkException {
 
 187         mockUpdateRequestDb(wireMockServer, "5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 189         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 191         mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_DeleteComplete.json");
 
 193         mockOpenStackDeleteStack_200(wireMockServer);
 
 195         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json",
 
 196                 "43173f6a-d699-414b-888f-ab243dda6dfe");
 
 198         MsoRequest request = new MsoRequest();
 
 199         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 200         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 202         impl.deleteNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL30_BASIC", null,
 
 203                 "43173f6a-d699-414b-888f-ab243dda6dfe", request);
 
 207     public void deleteNetworkDeleteStackException() throws IOException, NetworkException {
 
 208         exception.expect(OpenStackResponseException.class);
 
 210         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 212         mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_DeleteComplete.json");
 
 214         mockOpenStackDeleteStack_500(wireMockServer);
 
 216         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json",
 
 217                 "43173f6a-d699-414b-888f-ab243dda6dfe");
 
 219         MsoRequest request = new MsoRequest();
 
 220         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 221         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 223         impl.deleteNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL30_BASIC", null,
 
 224                 "43173f6a-d699-414b-888f-ab243dda6dfe", request);
 
 228     public void deleteNetworkError() throws IOException, NetworkException {
 
 229         exception.expect(NetworkException.class);
 
 231         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 233         mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_DeleteComplete.json");
 
 235         mockOpenStackDeleteStack_200(wireMockServer);
 
 237         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json",
 
 238                 "43173f6a-d699-414b-888f-ab243dda6dfe");
 
 240         MsoRequest request = new MsoRequest();
 
 241         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 242         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 244         impl.deleteNetwork("", "2871503957144f72b3cf481b379828ec", "CONTRAIL30_BASIC", null,
 
 245                 "43173f6a-d699-414b-888f-ab243dda6dfe", request);
 
 250     public void updateNetworkNeutronUpdateException() throws IOException, NetworkException {
 
 251         exception.expect(NetworkException.class);
 
 253         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 255         mockOpenStackGetNeutronNetwork(wireMockServer, "GetNeutronNetwork.json", NETWORK_ID, HttpStatus.SC_OK);
 
 256         mockOpenStackPutNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR);
 
 258         MsoRequest request = new MsoRequest();
 
 259         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 260         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 262         Holder<String> stackId = new Holder<String>();
 
 264         impl.updateNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL31_GNDIRECT", null,
 
 265                 "43173f6a-d699-414b-888f-ab243dda6dfe", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
 
 266                 "TestPhysicalNetwork", null, null, null, null, null, null, null, request, stackId);
 
 270     public void updateNetworkHeatUpdateException() throws IOException, NetworkException {
 
 271         exception.expect(NetworkException.class);
 
 273         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 275         mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", NETWORK_NAME);
 
 277         mockOpenStackPutStack(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR);
 
 279         MsoRequest request = new MsoRequest();
 
 280         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 281         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 283         Holder<String> stackId = new Holder<String>();
 
 285         impl.updateNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL30_BASIC", null,
 
 286                 "43173f6a-d699-414b-888f-ab243dda6dfe", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
 
 287                 "TestPhysicalNetwork", null, null, null, null, null, null, null, request, stackId);
 
 292     public void updateNetworkHeatQueryException() throws IOException, NetworkException {
 
 293         exception.expect(NetworkException.class);
 
 295         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 297         mockOpenStackGetStack_500(wireMockServer, NETWORK_NAME);
 
 299         MsoRequest request = new MsoRequest();
 
 300         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 301         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 303         Holder<String> stackId = new Holder<String>();
 
 305         impl.updateNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL30_BASIC", null,
 
 306                 "43173f6a-d699-414b-888f-ab243dda6dfe", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
 
 307                 "TestPhysicalNetwork", null, null, null, null, null, null, null, request, stackId);
 
 311     public void updateNetworkHeatStackNotFound() throws IOException, NetworkException {
 
 312         exception.expect(NetworkException.class);
 
 314         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 316         mockOpenStackGetStack_404(wireMockServer, NETWORK_NAME);
 
 318         MsoRequest request = new MsoRequest();
 
 319         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 320         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 322         Holder<String> stackId = new Holder<String>();
 
 324         impl.updateNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL30_BASIC", null,
 
 325                 "43173f6a-d699-414b-888f-ab243dda6dfe", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
 
 326                 "TestPhysicalNetwork", null, null, null, null, null, null, null, request, stackId);
 
 330     public void updateNetworkNeutronQueryException() throws IOException, NetworkException {
 
 331         exception.expect(NetworkException.class);
 
 333         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 335         mockOpenStackGetNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR);
 
 337         MsoRequest request = new MsoRequest();
 
 338         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 339         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 341         Holder<String> stackId = new Holder<String>();
 
 343         impl.updateNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL31_GNDIRECT", null,
 
 344                 "43173f6a-d699-414b-888f-ab243dda6dfe", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
 
 345                 "TestPhysicalNetwork", null, null, null, null, null, null, null, request, stackId);
 
 349     public void updateNetworkNeutronStackNotFound() throws IOException, NetworkException {
 
 350         exception.expect(NetworkException.class);
 
 352         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 354         mockOpenStackGetNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_NOT_FOUND);
 
 356         MsoRequest request = new MsoRequest();
 
 357         request.setRequestId("5a29d907-b8c7-47bf-85f3-3940c0cce0f7");
 
 358         request.setServiceInstanceId("ab652f96-1fc3-4fdd-8e1b-4af629bc22c0");
 
 360         Holder<String> stackId = new Holder<String>();
 
 362         impl.updateNetwork("mtn13", "2871503957144f72b3cf481b379828ec", "CONTRAIL31_GNDIRECT", null,
 
 363                 "43173f6a-d699-414b-888f-ab243dda6dfe", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
 
 364                 "TestPhysicalNetwork", null, null, null, null, null, null, null, request, stackId);
 
 368     public ResponseEntity<String> sendXMLRequest(String requestJson, String uriPath, HttpMethod reqMethod) {
 
 369         headers.set("Accept", MediaType.APPLICATION_XML);
 
 370         headers.set("Content-Type", MediaType.APPLICATION_XML);
 
 372         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath));
 
 374         HttpEntity<String> request = new HttpEntity<String>(requestJson, headers);
 
 375         ResponseEntity<String> response =
 
 376                 restTemplate.exchange(builder.toUriString(), reqMethod, request, String.class);
 
 381     public String inputStream(String JsonInput) throws IOException {
 
 382         JsonInput = "src/test/resources/" + JsonInput;
 
 383         String input = new String(Files.readAllBytes(Paths.get(JsonInput)));
 
 387     public static void mockUpdateRequestDb(WireMockServer wireMockServer, String requestId) {
 
 388         wireMockServer.stubFor(patch(urlPathEqualTo("/infraActiveRequests/" + requestId))
 
 389                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK)));