9adae88a5a3686c82f4ecf4283defd02bef8bb29
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / adapter / network / tasks / NetworkAdapterRestV1Test.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2018 Nokia.
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.bpmn.infrastructure.adapter.network.tasks;
24
25 import java.util.HashMap;
26 import java.util.Map;
27 import java.util.Optional;
28 import javax.ws.rs.core.Response;
29 import javax.ws.rs.core.Response.Status;
30 import javax.xml.bind.JAXBException;
31 import org.camunda.bpm.engine.delegate.BpmnError;
32 import org.camunda.bpm.engine.delegate.DelegateExecution;
33 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
34 import org.glassfish.jersey.message.internal.OutboundJaxrsResponse;
35 import org.glassfish.jersey.message.internal.OutboundMessageContext;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.mockito.InjectMocks;
39 import org.mockito.Mock;
40 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
41 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
42 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
43 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
44 import org.onap.so.adapters.nwrest.UpdateNetworkError;
45 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
46 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
47 import org.onap.so.client.exception.ExceptionBuilder;
48 import org.onap.so.client.orchestration.NetworkAdapterResources;
49 import org.onap.so.utils.Components;
50 import org.onap.logging.filter.base.ONAPComponents;
51 import static org.junit.Assert.assertTrue;
52 import static org.mockito.ArgumentMatchers.any;
53 import static org.mockito.ArgumentMatchers.anyInt;
54 import static org.mockito.ArgumentMatchers.eq;
55 import static org.junit.Assert.assertEquals;
56 import static org.junit.Assert.assertNull;
57 import static org.junit.Assert.assertThat;
58 import static org.mockito.Mockito.doThrow;
59 import static org.mockito.Mockito.times;
60 import static org.mockito.Mockito.verify;
61 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
62 import static org.mockito.Mockito.when;
63 import static org.mockito.MockitoAnnotations.initMocks;
64
65 public class NetworkAdapterRestV1Test {
66
67     @Mock
68     private ExceptionBuilder exceptionBuilder;
69     @Mock
70     private NetworkAdapterResources networkAdapterResources;
71     @InjectMocks
72     private NetworkAdapterRestV1 networkAdapterRestV1Tasks;
73
74     private DelegateExecution delegateExecution;
75
76     private static final String CREATE_NETWORK_RESPONSE = "createNetworkResponse";
77     private static final String DELETE_NETWORK_RESPONSE = "deleteNetworkResponse";
78     private static final String CREATE_NETWORK_ERROR = "createNetworkError";
79     private static final String DELETE_NETWORK_ERROR = "deleteNetworkError";
80     private static final String NET_ID_FOR_CREATE_NETWORK_RESPONSE = "netIdForCreateNetworkResponse";
81     private static final String NET_ID_FOR_DELETE_NETWORK_RESPONSE = "netIdForDeleteNetworkResponse";
82     private static final String CREATE_NETWORK_ERROR_MESSAGE = "createNetErrorMessage";
83     private static final String DELETE_NETWORK_ERROR_MESSAGE = "deleteNetErrorMessage";
84
85     @Before
86     public void setup() {
87         initMocks(this);
88         delegateExecution = new DelegateExecutionFake();
89     }
90
91     @Test
92     public void testUnmarshalXml() throws JAXBException {
93         String xml =
94                 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><createNetworkResponse><messageId>ec37c121-e3ec-4697-8adf-2d7dca7044fc</messageId><networkCreated>true</networkCreated><networkFqdn>someNetworkFqdn</networkFqdn><networkId>991ec7bf-c9c4-4ac1-bb9c-4b61645bddb3</networkId><networkStackId>someStackId</networkStackId><neutronNetworkId>9c47521a-2916-4018-b2bc-71ab767497e3</neutronNetworkId><rollback><cloudId>someCloudId</cloudId><modelCustomizationUuid>b7171cdd-8b05-459b-80ef-2093150e8983</modelCustomizationUuid><msoRequest><requestId>90b32315-176e-4dab-bcf1-80eb97a1c4f4</requestId><serviceInstanceId>71e7db22-7907-4d78-8fcc-8d89d28e90be</serviceInstanceId></msoRequest><networkCreated>true</networkCreated><networkStackId>someStackId</networkStackId><networkType>SomeNetworkType</networkType><neutronNetworkId>9c47521a-2916-4018-b2bc-71ab767497e3</neutronNetworkId><tenantId>b60da4f71c1d4b35b8113d4eca6deaa1</tenantId></rollback><subnetMap><entry><key>6b381fa9-48ce-4e16-9978-d75309565bb6</key><value>bc1d5537-860b-4894-8eba-6faff41e648c</value></entry></subnetMap></createNetworkResponse>";
95         CreateNetworkResponse response =
96                 (CreateNetworkResponse) new NetworkAdapterRestV1().unmarshalXml(xml, CreateNetworkResponse.class);
97         String returnedXml = response.toXmlString();
98         System.out.println(returnedXml);
99     }
100
101     @Test
102     public void testUnmarshalXmlUpdate() throws JAXBException {
103         UpdateNetworkResponse expectedResponse = new UpdateNetworkResponse();
104         expectedResponse.setMessageId("ec100bcc-2659-4aa4-b4d8-3255715c2a51");
105         expectedResponse.setNetworkId("80de31e3-cc78-4111-a9d3-5b92bf0a39eb");
106         Map<String, String> subnetMap = new HashMap<>();
107         subnetMap.put("95cd8437-25f1-4238-8720-cbfe7fa81476", "d8d16606-5d01-4822-b160-9a0d257303e0");
108         expectedResponse.setSubnetMap(subnetMap);
109         String xml =
110                 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><updateNetworkResponse><messageId>ec100bcc-2659-4aa4-b4d8-3255715c2a51</messageId><networkId>80de31e3-cc78-4111-a9d3-5b92bf0a39eb</networkId><subnetMap><entry><key>95cd8437-25f1-4238-8720-cbfe7fa81476</key><value>d8d16606-5d01-4822-b160-9a0d257303e0</value></entry></subnetMap></updateNetworkResponse>";
111         UpdateNetworkResponse response =
112                 (UpdateNetworkResponse) new NetworkAdapterRestV1().unmarshalXml(xml, UpdateNetworkResponse.class);
113         assertThat(expectedResponse, sameBeanAs(response));
114     }
115
116     @Test
117     public void processCallbackTest() {
118         UpdateNetworkRequest updateNetworkRequest = new UpdateNetworkRequest();
119         UpdateNetworkResponse updateNetworkResponse = new UpdateNetworkResponse();
120         updateNetworkResponse.setMessageId("messageId");
121         updateNetworkResponse.setNetworkId("networkId");
122         delegateExecution.setVariable("networkAdapterRequest", updateNetworkRequest);
123         delegateExecution.setVariable("NetworkAResponse_MESSAGE", updateNetworkResponse.toXmlString());
124
125         networkAdapterRestV1Tasks.processCallback(delegateExecution);
126
127         assertThat(updateNetworkResponse, sameBeanAs(delegateExecution.getVariable("updateNetworkResponse")));
128     }
129
130     @Test
131     public void processCallbackErrorTest() {
132         UpdateNetworkRequest updateNetworkRequest = new UpdateNetworkRequest();
133         UpdateNetworkError updateNetworkResponse = new UpdateNetworkError();
134         updateNetworkResponse.setMessageId("messageId");
135         updateNetworkResponse.setMessage("test error message");
136         delegateExecution.setVariable("networkAdapterRequest", updateNetworkRequest);
137         delegateExecution.setVariable("NetworkAResponse_MESSAGE", updateNetworkResponse.toXmlString());
138
139         doThrow(new BpmnError("MSOWorkflowException")).when(exceptionBuilder).buildAndThrowWorkflowException(
140                 any(DelegateExecution.class), anyInt(), any(String.class), any(ONAPComponents.class));
141
142         try {
143             networkAdapterRestV1Tasks.processCallback(delegateExecution);
144         } catch (BpmnError be) {
145             assertEquals("MSOWorkflowException", be.getErrorCode());
146         }
147         assertNull(delegateExecution.getVariable("updateNetworkResponse"));
148         verify(exceptionBuilder, times(1)).buildAndThrowWorkflowException(any(DelegateExecution.class), eq(7000),
149                 eq("test error message"), eq(Components.OPENSTACK));
150     }
151
152     @Test
153     public void processCallback_createNetworkResponse() {
154         delegateExecution.setVariable("networkAdapterRequest", new CreateNetworkRequest());
155         delegateExecution.setVariable("NetworkAResponse_MESSAGE",
156                 createNetworkResponse(CREATE_NETWORK_RESPONSE, NET_ID_FOR_CREATE_NETWORK_RESPONSE));
157         networkAdapterRestV1Tasks.processCallback(delegateExecution);
158
159         Object result = delegateExecution.getVariable("createNetworkResponse");
160         assertTrue(result instanceof CreateNetworkResponse);
161         CreateNetworkResponse createNetworkResponse = (CreateNetworkResponse) result;
162         assertEquals(createNetworkResponse.getNetworkId(), NET_ID_FOR_CREATE_NETWORK_RESPONSE);
163     }
164
165     @Test
166     public void processCallback_deleteNetworkResponse() {
167         delegateExecution.setVariable("networkAdapterRequest", new DeleteNetworkRequest());
168         delegateExecution.setVariable("NetworkAResponse_MESSAGE",
169                 createNetworkResponse(DELETE_NETWORK_RESPONSE, NET_ID_FOR_DELETE_NETWORK_RESPONSE));
170         networkAdapterRestV1Tasks.processCallback(delegateExecution);
171
172         Object result = delegateExecution.getVariable("deleteNetworkResponse");
173         assertTrue(result instanceof DeleteNetworkResponse);
174         DeleteNetworkResponse deleteNetworkResponse = (DeleteNetworkResponse) result;
175         assertEquals(deleteNetworkResponse.getNetworkId(), NET_ID_FOR_DELETE_NETWORK_RESPONSE);
176     }
177
178     @Test
179     public void processCallback_createNetworkError() {
180         try {
181             delegateExecution.setVariable("networkAdapterRequest", new CreateNetworkRequest());
182             delegateExecution.setVariable("NetworkAResponse_MESSAGE",
183                     createNetworkError(CREATE_NETWORK_ERROR, CREATE_NETWORK_ERROR_MESSAGE));
184             networkAdapterRestV1Tasks.processCallback(delegateExecution);
185         } catch (Exception e) {
186             assertEquals(e.getMessage(), CREATE_NETWORK_ERROR_MESSAGE);
187         }
188     }
189
190     @Test
191     public void processCallback_deleteNetworkError() {
192         try {
193             delegateExecution.setVariable("networkAdapterRequest", new DeleteNetworkRequest());
194             delegateExecution.setVariable("NetworkAResponse_MESSAGE",
195                     createNetworkError(DELETE_NETWORK_ERROR, DELETE_NETWORK_ERROR_MESSAGE));
196             networkAdapterRestV1Tasks.processCallback(delegateExecution);
197         } catch (Exception e) {
198             assertEquals(e.getMessage(), DELETE_NETWORK_ERROR_MESSAGE);
199         }
200     }
201
202     @Test
203     public void callNetworkAdapter_CreateNetworkRequestSuccess() throws Exception {
204         // given
205         String messageId = "createNetReqMessageId";
206         CreateNetworkRequest createNetworkRequest = new CreateNetworkRequest();
207         createNetworkRequest.setMessageId(messageId);
208         delegateExecution.setVariable("networkAdapterRequest", createNetworkRequest);
209         Status status = Status.OK;
210         String responseEntity = "createNetworkResponse";
211         Optional<Response> response = Optional.of(createResponse(status, responseEntity));
212         when(networkAdapterResources.createNetworkAsync(createNetworkRequest)).thenReturn(response);
213         // when
214         networkAdapterRestV1Tasks.callNetworkAdapter(delegateExecution);
215         // then
216         verifyExecutionContent(status, responseEntity, messageId);
217     }
218
219     @Test
220     public void callNetworkAdapter_DeleteNetworkRequestSuccess() throws Exception {
221         // given
222         String messageId = "DeleteNetReqMessageId";
223         DeleteNetworkRequest deleteNetworkRequest = new DeleteNetworkRequest();
224         deleteNetworkRequest.setMessageId(messageId);
225         delegateExecution.setVariable("networkAdapterRequest", deleteNetworkRequest);
226         Status status = Status.OK;
227         String responseEntity = "createNetworkResponse";
228         Optional<Response> response = Optional.of(createResponse(status, responseEntity));
229         when(networkAdapterResources.deleteNetworkAsync(deleteNetworkRequest)).thenReturn(response);
230         // when
231         networkAdapterRestV1Tasks.callNetworkAdapter(delegateExecution);
232         // then
233         verifyExecutionContent(status, responseEntity, messageId);
234     }
235
236     private void verifyExecutionContent(Status status, String responseEntity, String messageId) {
237         assertEquals(delegateExecution.getVariable("NETWORKREST_networkAdapterStatusCode"),
238                 Integer.toString(status.getStatusCode()));
239         assertEquals(delegateExecution.getVariable("NETWORKREST_networkAdapterResponse"), responseEntity);
240         assertEquals(delegateExecution.getVariable("NetworkAResponse_CORRELATOR"), messageId);
241     }
242
243     private Response createResponse(Status status, String responseEntity) {
244         OutboundMessageContext outboundMessageContext = new OutboundMessageContext();
245         outboundMessageContext.setEntity(responseEntity);
246         return new OutboundJaxrsResponse(status, outboundMessageContext);
247     }
248
249     private String createNetworkResponse(String networkResponseType, String networkId) {
250
251         return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><" + networkResponseType + "><networkId>"
252                 + networkId + "</networkId></" + networkResponseType + ">";
253     }
254
255     private String createNetworkError(String networkErrorType, String message) {
256
257         return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><" + networkErrorType + "><message>"
258                 + message + "</message></" + networkErrorType + ">";
259     }
260
261 }