2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 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.shazam.shazamcrest.MatcherAssert.assertThat;
 
  24 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 
  25 import static org.junit.Assert.assertEquals;
 
  26 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeletePublicUrlStackByNameAndID_204;
 
  27 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetPublicUrlStackByNameAndID_200;
 
  28 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetPublicUrlStackByNameAndID_204;
 
  29 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackAppC_404;
 
  30 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackCreatedAppC_200;
 
  31 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackCreatedVUSP_200;
 
  32 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVUSP_404;
 
  33 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200;
 
  34 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostPublicUrlWithBodyFile_200;
 
  35 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPublicUrlStackByID_200;
 
  36 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPublicUrlStackByName_200;
 
  37 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutPublicUrlStackByNameAndID_200;
 
  38 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess;
 
  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.ws.rs.core.Response;
 
  45 import org.json.JSONException;
 
  46 import org.junit.Test;
 
  47 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
 
  48 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
 
  49 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
 
  50 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
 
  51 import org.onap.so.adapters.nwrest.QueryNetworkError;
 
  52 import org.onap.so.adapters.nwrest.QueryNetworkResponse;
 
  53 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
 
  54 import org.onap.so.adapters.nwrest.RollbackNetworkResponse;
 
  55 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
 
  56 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
 
  57 import org.onap.so.adapters.vnf.BaseRestTestUtils;
 
  58 import org.onap.so.client.policy.JettisonStyleMapperProvider;
 
  59 import org.onap.so.entity.MsoRequest;
 
  60 import org.springframework.beans.factory.annotation.Autowired;
 
  61 import org.springframework.http.HttpEntity;
 
  62 import org.springframework.http.HttpMethod;
 
  63 import org.springframework.http.ResponseEntity;
 
  64 import com.fasterxml.jackson.core.JsonParseException;
 
  65 import com.fasterxml.jackson.databind.JsonMappingException;
 
  67 public class NetworkAdapterRestTest extends BaseRestTestUtils {
 
  70     private JettisonStyleMapperProvider jettisonTypeObjectMapper;
 
  71     private static final String CLOUDSITE_ID = "mtn13";
 
  72     private static final String TENANT_ID = "ba38bc24a2ef4fb2ad2810c894f1938f";
 
  73     private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b";
 
  74     private static final String NETWORK_TYPE = "CONTRAIL30_BASIC";
 
  75     private static final String MODEL_CUSTOMIZATION_UUID = "3bdbb104-476c-483e-9f8b-c095b3d308ac";
 
  76     private static final String MSO_SERVICE_INSTANCE_ID = "05869d5f-47df-4b45-bbfc-4f03ce0a50bf";
 
  77     private static final String MSO_REQUEST_ID = "requestId";
 
  78     private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0";
 
  81     public void testCreateNetwork() throws JSONException, JsonParseException, JsonMappingException, IOException {
 
  83         CreateNetworkRequest request = new CreateNetworkRequest();
 
  84         request.setBackout(true);
 
  85         request.setSkipAAI(true);
 
  86         request.setFailIfExists(false);
 
  87         MsoRequest msoReq = new MsoRequest();
 
  88         String networkTechnology = "CONTRAIL";
 
  90         msoReq.setRequestId(MSO_REQUEST_ID);
 
  91         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
 
  92         request.setMsoRequest(msoReq);
 
  93         request.setCloudSiteId(CLOUDSITE_ID);
 
  94         request.setTenantId(TENANT_ID);
 
  95         request.setNetworkId(NETWORK_ID);
 
  96         request.setNetworkName(NETWORK_NAME);
 
  97         request.setNetworkType(NETWORK_TYPE);
 
  98         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
 
  99         request.setNetworkTechnology(networkTechnology);
 
 101         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 103         mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
 
 105         mockOpenStackGetStackCreatedVUSP_200(wireMockServer);
 
 107         mockOpenStackGetStackVUSP_404(wireMockServer);
 
 109         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 110         HttpEntity<CreateNetworkRequest> entity = new HttpEntity<CreateNetworkRequest>(request, headers);
 
 111         ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
 
 112                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
 
 114         CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 115                 new File("src/test/resources/__files/CreateNetworkResponse.json"), CreateNetworkResponse.class);
 
 117         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 118         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 122     public void testCreateNetwork_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
 
 126         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 128         mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
 
 130         mockOpenStackGetStackCreatedAppC_200(wireMockServer);
 
 132         mockOpenStackGetStackAppC_404(wireMockServer);
 
 134         headers.add("Content-Type", MediaType.APPLICATION_JSON);
 
 135         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 137         String request = readJsonFileAsString("src/test/resources/CreateNetwork.json");
 
 138         HttpEntity<String> entity = new HttpEntity<String>(request, headers);
 
 140         ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
 
 141                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
 
 143         CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 144                 new File("src/test/resources/__files/CreateNetworkResponse2.json"), CreateNetworkResponse.class);
 
 146         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 147         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 153     public void testDeleteNetwork() throws IOException {
 
 155         DeleteNetworkRequest request = new DeleteNetworkRequest();
 
 157         MsoRequest msoReq = new MsoRequest();
 
 159         msoReq.setRequestId(MSO_REQUEST_ID);
 
 160         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
 
 161         request.setMsoRequest(msoReq);
 
 162         request.setCloudSiteId(CLOUDSITE_ID);
 
 163         request.setTenantId(TENANT_ID);
 
 164         request.setNetworkId(NETWORK_ID);
 
 165         request.setNetworkType(NETWORK_TYPE);
 
 166         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
 
 167         request.setNetworkStackId(NETWORK_ID);
 
 169         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 171         mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort);
 
 173         mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockServer, wireMockPort);
 
 175         mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer);
 
 177         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 179         HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(request, headers);
 
 181         ResponseEntity<DeleteNetworkResponse> response = restTemplate.exchange(
 
 182                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.DELETE,
 
 183                 entity, DeleteNetworkResponse.class);
 
 185         DeleteNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 186                 new File("src/test/resources/__files/DeleteNetworkResponse.json"), DeleteNetworkResponse.class);
 
 188         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 189         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 194     public void testRollbackNetwork() throws IOException {
 
 196         RollbackNetworkRequest request = new RollbackNetworkRequest();
 
 198         MsoRequest msoReq = new MsoRequest();
 
 200         msoReq.setRequestId(MSO_REQUEST_ID);
 
 201         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
 
 203         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 205         mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort);
 
 207         mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockServer, wireMockPort);
 
 209         mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer);
 
 211         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 213         HttpEntity<RollbackNetworkRequest> entity = new HttpEntity<>(request, headers);
 
 215         ResponseEntity<RollbackNetworkResponse> response = restTemplate.exchange(
 
 216                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b/rollback"),
 
 217                 HttpMethod.DELETE, entity, RollbackNetworkResponse.class);
 
 219         RollbackNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 220                 new File("src/test/resources/__files/RollbackNetworkResponse.json"), RollbackNetworkResponse.class);
 
 222         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 223         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 228     public void testQueryNetwork_Exception() throws IOException {
 
 229         MsoRequest msoReq = new MsoRequest();
 
 230         msoReq.setRequestId(MSO_REQUEST_ID);
 
 231         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
 
 232         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 234         HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers);
 
 236         ResponseEntity<QueryNetworkError> response = restTemplate.exchange(
 
 237                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.GET,
 
 238                 entity, QueryNetworkError.class);
 
 240         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
 
 245     public void testQueryNetwork() throws IOException {
 
 247         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 248         mockOpenStackGetStackVfModule_200(wireMockServer);
 
 250         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 251         HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers);
 
 253         ResponseEntity<QueryNetworkResponse> response = restTemplate.exchange(
 
 254                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b" + "?cloudSiteId="
 
 255                         + CLOUDSITE_ID + "&tenantId=" + TENANT_ID + "&aaiNetworkId=aaiNetworkId"),
 
 256                 HttpMethod.GET, entity, QueryNetworkResponse.class);
 
 258         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value());
 
 263     public void testUpdateNetwork() throws IOException {
 
 265         UpdateNetworkRequest request = new UpdateNetworkRequest();
 
 267         MsoRequest msoReq = new MsoRequest();
 
 269         msoReq.setRequestId(MSO_REQUEST_ID);
 
 270         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
 
 271         request.setMsoRequest(msoReq);
 
 272         request.setCloudSiteId(CLOUDSITE_ID);
 
 273         request.setTenantId(TENANT_ID);
 
 274         request.setNetworkId(NETWORK_ID);
 
 275         request.setNetworkName(NETWORK_NAME);
 
 276         request.setNetworkType(NETWORK_TYPE);
 
 277         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
 
 278         request.setNetworkStackId(NETWORK_ID);
 
 280         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 282         mockOpenStackPublicUrlStackByName_200(wireMockServer, wireMockPort);
 
 284         mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort);
 
 286         mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockServer, wireMockPort);
 
 288         mockOpenStackPutPublicUrlStackByNameAndID_200(wireMockServer);
 
 290         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 292         HttpEntity<UpdateNetworkRequest> entity = new HttpEntity<UpdateNetworkRequest>(request, headers);
 
 294         ResponseEntity<UpdateNetworkResponse> response = restTemplate.exchange(
 
 295                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.PUT,
 
 296                 entity, UpdateNetworkResponse.class);
 
 298         UpdateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 299                 new File("src/test/resources/__files/UpdateNetworkResponse.json"), UpdateNetworkResponse.class);
 
 301         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 302         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 306     public void testCreateNetworkCNRC_JSON()
 
 307             throws JSONException, JsonParseException, JsonMappingException, IOException {
 
 309         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 311         mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
 
 313         mockOpenStackGetStackCreatedAppC_200(wireMockServer);
 
 315         mockOpenStackGetStackAppC_404(wireMockServer);
 
 317         headers.add("Content-Type", MediaType.APPLICATION_JSON);
 
 318         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 320         String request = readJsonFileAsString("src/test/resources/CreateNetwork3.json");
 
 321         HttpEntity<String> entity = new HttpEntity<String>(request, headers);
 
 323         ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
 
 324                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
 
 326         CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 327                 new File("src/test/resources/__files/CreateNetworkResponse3.json"), CreateNetworkResponse.class);
 
 329         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 330         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 334     public void testCreateNetworkNC_Shared_JSON()
 
 335             throws JSONException, JsonParseException, JsonMappingException, IOException {
 
 337         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
 
 339         mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
 
 341         mockOpenStackGetStackCreatedAppC_200(wireMockServer);
 
 343         mockOpenStackGetStackAppC_404(wireMockServer);
 
 345         headers.add("Content-Type", MediaType.APPLICATION_JSON);
 
 346         headers.add("Accept", MediaType.APPLICATION_JSON);
 
 348         String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json");
 
 349         HttpEntity<String> entity = new HttpEntity<String>(request, headers);
 
 351         ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
 
 352                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
 
 354         CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
 
 355                 new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class);
 
 357         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
 358         assertThat(response.getBody(), sameBeanAs(expectedResponse));
 
 362     protected String readJsonFileAsString(String fileLocation)
 
 363             throws JsonParseException, JsonMappingException, IOException {
 
 364         return new String(Files.readAllBytes(Paths.get(fileLocation)));