Increasing test coverage for vid.mso.rest
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / rest / MsoRestClientNew.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2018 - 2019 Nokia. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.vid.mso.rest;
22
23 import com.google.common.collect.ImmutableMap;
24 import io.joshworks.restclient.http.HttpResponse;
25 import org.apache.commons.codec.binary.Base64;
26 import org.eclipse.jetty.util.security.Password;
27 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
28 import org.onap.portalsdk.core.util.SystemProperties;
29 import org.onap.vid.aai.util.HttpsAuthClient;
30 import org.onap.vid.changeManagement.MsoRequestDetails;
31 import org.onap.vid.changeManagement.RequestDetailsWrapper;
32 import org.onap.vid.client.SyncRestClient;
33 import org.onap.vid.model.RequestReferencesContainer;
34 import org.onap.vid.mso.*;
35 import org.onap.vid.utils.Logging;
36
37 import javax.ws.rs.core.HttpHeaders;
38 import javax.ws.rs.core.MediaType;
39 import java.text.DateFormat;
40 import java.text.SimpleDateFormat;
41 import java.util.Date;
42 import java.util.HashMap;
43 import java.util.Map;
44
45
46 /**
47  * Created by pickjonathan on 21/06/2017.
48  */
49 public class MsoRestClientNew extends RestMsoImplementation implements MsoInterface {
50
51     /**
52      * The Constant dateFormat.
53      */
54     public static final String X_FROM_APP_ID = "X-FromAppId";
55     final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
56     private static final String START = " start";
57     private final SyncRestClient client;
58     private final String baseUrl;
59     private final Map<String, String> commonHeaders;
60     /**
61      * The logger.
62      */
63     EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
64
65     public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient) {
66         super(authClient);
67         this.client = client;
68         this.baseUrl = baseUrl;
69         this.commonHeaders = initCommonHeaders();
70     }
71
72     @Override
73     public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
74         String methodName = "createSvcInstance ";
75         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
76         String path = baseUrl + endpoint;
77
78         return createInstance(requestDetails, path);
79     }
80     
81     @Override
82     public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
83         String methodName = "createE2eSvcInstance ";
84         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
85         String path = baseUrl + endpoint;
86
87         return createInstance(requestDetails, path);
88     }
89
90     @Override
91     public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
92
93         String methodName = "createVnf";
94         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
95         String path = baseUrl + endpoint;
96
97         return createInstance(requestDetails, path);
98     }
99
100     @Override
101     public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
102
103         String methodName = "createNwInstance";
104         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
105         String path = baseUrl + endpoint;
106
107         return createInstance(requestDetails, path);
108     }
109
110     @Override
111     public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
112         String methodName = "createVolumeGroupInstance";
113         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
114         String path = baseUrl + endpoint;
115
116         return createInstance(requestDetails, path);
117     }
118
119     @Override
120     public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
121         String methodName = "createVfModuleInstance";
122         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
123         String path = baseUrl + endpoint;
124
125         return createInstance(requestDetails, path);
126     }
127
128     @Override
129     public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
130         String methodName = "scaleOutVFModuleInstance";
131         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
132         String path = baseUrl + endpoint;
133         return createInstance(requestDetailsWrapper, path);
134     }
135
136     @Override
137     public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
138         String methodName = "createConfigurationInstance";
139         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
140         String path = baseUrl + endpoint;
141
142         return createInstance(requestDetailsWrapper, path);
143     }
144
145     @Override
146     public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
147         String methodName = "deleteE2eSvcInstance";
148         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
149         String path = baseUrl + endpoint;
150         return deleteInstance(requestDetails, path);
151     }
152
153     @Override
154     public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
155         String methodName = "deleteSvcInstance";
156         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
157         String path = baseUrl + endpoint;
158         return deleteInstance(requestDetails, path);
159     }
160
161     @Override
162     public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
163         String methodName = "unassignSvcInstance";
164         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
165         String path = baseUrl + endpoint;
166
167         HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
168         return MsoUtil.wrapResponse(response);
169     }
170
171     @Override
172     public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
173         String methodName = "deleteVnf";
174         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
175         String path = baseUrl + endpoint;
176
177         return deleteInstance(requestDetails, path);
178     }
179
180     @Override
181     public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
182         String methodName = "deleteVfModule";
183         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
184         String path = baseUrl + endpoint;
185
186         return deleteInstance(requestDetails, path);
187     }
188
189     @Override
190     public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
191         String methodName = "deleteVolumeGroupInstance";
192         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
193         String path = baseUrl + endpoint;
194
195         return deleteInstance(requestDetails, path);
196     }
197
198     @Override
199     public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
200         String methodName = "deleteNwInstance";
201         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
202         String path = baseUrl + endpoint;
203
204         return deleteInstance(requestDetails, path);
205     }
206
207     @Override
208     public MsoResponseWrapper getOrchestrationRequest(String t, String sourceId, String endpoint, RestObject restObject, boolean warpException) {
209         String path = baseUrl + endpoint;
210
211         HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
212         return MsoUtil.wrapResponse(response);
213     }
214
215     @Override
216     public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
217         String path = baseUrl + endpoint;
218
219         HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
220         return MsoUtil.wrapResponse(response);
221     }
222
223     public MsoResponseWrapper getManualTasks(String endpoint) {
224         String path = baseUrl + endpoint;
225
226         HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
227         return MsoUtil.wrapResponse(response);
228     }
229
230     public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
231         String methodName = "getManualTasksByRequestId";
232         logger.debug(methodName + START);
233
234         try {
235             String path = baseUrl + endpoint;
236
237             MsoResponseWrapper w =getManualTasks(path);
238             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
239
240             return w;
241
242         } catch (Exception e) {
243             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
244             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
245             throw e;
246         }
247     }
248
249     @Override
250     public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
251         String methodName = "completeManualTask";
252         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
253         try {
254             String path = baseUrl + endpoint;
255
256             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
257             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
258
259             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
260             return w;
261
262         } catch (Exception e) {
263             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
264             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
265             throw e;
266         }
267     }
268
269     @Override
270     public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
271         String methodName = "replaceVnf";
272         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
273         String path = baseUrl + endpoint;
274         return replaceInstance(requestDetails, path);
275     }
276
277     @Override
278     public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
279         String methodName = "deleteConfiguration";
280         logger.debug(EELFLoggerDelegate.debugLogger,
281                 methodName + START);
282         String path = baseUrl + pmc_endpoint;
283
284         return deleteInstance(requestDetailsWrapper, path);
285     }
286
287     @Override
288     public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
289         String methodName = "setConfigurationActiveStatus";
290         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
291
292         try {
293             String path = baseUrl + endpoint;
294
295             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
296                   + methodName + " calling change configuration active status, path =[" + path + "]");
297             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
298             return MsoUtil.wrapResponse(response);
299         } catch (Exception e) {
300             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
301             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
302             throw e;
303         }
304     }
305
306     @Override
307     public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
308         String methodName = "setPortOnConfigurationStatus";
309         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
310
311         try {
312             String path = baseUrl + endpoint;
313             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
314                 + methodName + " calling change port configuration status, path =[" + path + "]");
315             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
316             return MsoUtil.wrapResponse(response);
317         } catch (Exception e) {
318             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
319             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
320             throw e;
321         }
322     }
323
324     @Override
325     public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
326         String path = baseUrl + endpoint;
327         HttpResponse<RequestReferencesContainer> response = client.post(path, commonHeaders, requestDetails, RequestReferencesContainer.class);
328         return MsoUtil.wrapResponse(response);
329     }
330
331     public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
332         String methodName = "replaceInstance";
333         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
334
335         try {
336             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
337             RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
338             requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
339
340             HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
341             MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
342             int status = msoResponseWrapperObject.getStatus();
343             if (status == 202) {
344                 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
345                         ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
346             } else {
347                 logger.error(EELFLoggerDelegate.debugLogger, methodName +
348                         ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
349
350             }
351             return msoResponseWrapperObject;
352
353         } catch (Exception e) {
354             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
355             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
356             throw e;
357         }
358
359     }
360
361     @Override
362     public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
363         String methodName = "updateVnf";
364         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
365         String path = baseUrl + endpoint;
366
367         RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
368         wrapper.requestDetails = new MsoRequestDetails(requestDetails);
369         return updateInstance(requestDetails, path);
370     }
371
372     public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
373         String methodName = "updateInstance";
374         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
375
376         try {
377             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
378
379             RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
380             requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
381             HttpResponse<String> response = client.put(path, commonHeaders, requestDetailsWrapper, String.class);
382             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
383
384             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
385             return w;
386
387         } catch (Exception e) {
388             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
389             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
390             throw e;
391         }
392
393     }
394
395     public void setServiceInstanceStatus(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject<String> restObject) {
396         String methodName = "activateServiceInstance";
397         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
398         try {
399             String path = baseUrl + endpoint;
400             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
401             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
402             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
403
404         } catch (Exception e) {
405             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
406             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
407             throw e;
408         }
409     }
410
411     @Override
412     public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
413         String methodName = "removeRelationshipFromServiceInstance";
414         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
415
416         try {
417             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
418             String path = baseUrl + endpoint;
419             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
420             return MsoUtil.wrapResponse(response);
421         } catch (Exception e) {
422             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
423             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
424             throw e;
425         }
426     }
427
428     @Override
429     public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
430         String methodName = "addRelationshipToServiceInstance";
431         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
432
433         try {
434             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
435             String path = baseUrl + addRelationshipsPath;
436
437             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
438             return MsoUtil.wrapResponse(response);
439         } catch (Exception e) {
440             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
441             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
442             throw e;
443         }
444     }
445
446     @Override
447     public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
448         String path = baseUrl + endpoint;
449         return client.get(path, commonHeaders, new HashMap<>(), responseClass);
450     }
451
452     @Override
453     public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
454         String path = baseUrl + endpoint;
455
456         return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
457     }
458
459
460     private MsoResponseWrapper createInstance(Object request, String path) {
461         String methodName = "createInstance";
462         logger.debug(methodName + START);
463
464         try {
465             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
466             return MsoUtil.wrapResponse(response);
467         } catch (Exception e) {
468             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
469             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
470             throw e;
471         }
472     }
473
474     /**
475      * Delete instance.
476      *
477      * @param request the request
478      * @param path    the path
479      * @return the mso response wrapper
480      * @throws Exception the exception
481      */
482     private MsoResponseWrapper deleteInstance(Object request, String path) {
483         String methodName = "deleteInstance";
484         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
485
486         try {
487             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
488
489             HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
490             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
491
492             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
493             return w;
494
495         } catch (Exception e) {
496             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
497             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
498             throw e;
499         }
500
501     }
502
503     private Map<String, String> initCommonHeaders() {
504         String username = SystemProperties.getProperty(MsoProperties.MSO_USER_NAME);
505         String password = SystemProperties.getProperty(MsoProperties.MSO_PASSWORD);
506         String decrypted_password = Password.deobfuscate(password);
507
508         String authString = username + ":" + decrypted_password;
509
510         byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
511         String authStringEnc = new String(authEncBytes);
512
513         Map<String, String> map = new HashMap<>();
514         map.put(HttpHeaders.AUTHORIZATION,  "Basic " + authStringEnc);
515         map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
516         map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
517         map.put(X_FROM_APP_ID, SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
518         map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
519         return ImmutableMap.copyOf(map);
520     }
521
522 }