Improve unit-test coverage
[vfc/nfvo/driver/vnfm/svnfm.git] / nokia / vnfmdriver / vfcadaptorservice / vfcadaptor / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / adaptor / VnfmDriverMgmrImpl.java
1 /*
2  * Copyright 2016-2017, Nokia Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.vfc.nfvo.driver.vnfm.svnfm.adaptor;
18
19 import java.io.IOException;
20
21 import org.apache.http.HttpStatus;
22 import org.apache.http.client.ClientProtocolException;
23 import org.onap.vfc.nfvo.driver.vnfm.svnfm.aai.bo.AaiVnfmInfo;
24 import org.onap.vfc.nfvo.driver.vnfm.svnfm.aai.bo.entity.EsrSystemInfo;
25 import org.onap.vfc.nfvo.driver.vnfm.svnfm.aai.inf.AaiMgmrInf;
26 import org.onap.vfc.nfvo.driver.vnfm.svnfm.catalog.inf.CatalogMgmrInf;
27 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfRequest;
28 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfResponse;
29 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.OperationExecution;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.OperationExecution.OperationType;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.common.bo.AdaptorEnv;
34 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
35 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum;
36 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.ScaleType;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.bean.VnfmJobExecutionInfo;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfcResourceInfoMapper;
39 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfmJobExecutionMapper;
40 import org.onap.vfc.nfvo.driver.vnfm.svnfm.exception.VnfmDriverException;
41 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
42 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.HealVnfRequest;
43 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.HealVnfResponse;
44 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.InstantiateVnfRequest;
45 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.InstantiateVnfResponse;
46 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.OperStatusVnfResponse;
47 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.QueryVnfResponse;
48 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.ScaleVnfRequest;
49 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.ScaleVnfResponse;
50 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
51 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfResponse;
52 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.inf.VnfContinueProcessorInf;
53 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.inf.VnfmDriverMgmrInf;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
56 import org.springframework.beans.factory.annotation.Autowired;
57 import org.springframework.stereotype.Component;
58
59 import com.google.gson.Gson;
60
61 @Component
62 public class VnfmDriverMgmrImpl implements VnfmDriverMgmrInf {
63         private static final Logger logger = LoggerFactory.getLogger(VnfmDriverMgmrImpl.class);
64
65         @Autowired
66         Driver2CbamRequestConverter requestConverter;
67
68         @Autowired
69         Cbam2DriverResponseConverter responseConverter;
70
71         @Autowired
72         private CbamMgmrInf cbamMgmr;
73
74         @Autowired
75         private CatalogMgmrInf catalogMgmr;
76
77         @Autowired
78         private NslcmMgmrInf nslcmMgmr;
79
80         @Autowired
81         private AaiMgmrInf aaiMgmr;
82
83         @Autowired
84         private VnfmJobExecutionMapper jobDbManager;
85
86         @Autowired
87         private VnfcResourceInfoMapper vnfcDbMgmr;
88
89         @Autowired
90         AdaptorEnv adaptorEnv;
91
92         @Autowired
93         private VnfContinueProcessorInf vnfContinueProcessorInf;
94
95         private Gson gson = new Gson();
96
97         public InstantiateVnfResponse instantiateVnf(InstantiateVnfRequest driverRequest, String vnfmId)
98                         throws VnfmDriverException {
99                 InstantiateVnfResponse driverResponse;
100                 try {
101                         driverRequest.setVnfdId(adaptorEnv.getVnfdId());
102                         buildVnfmHttpPathById(vnfmId);
103
104                         // String dirPath = "/etc/vnfmpkg";
105                         // String cbamDirName = CommonUtil.getAppRoot() + dirPath;
106                         // File cbamDirFile = new File(cbamDirName);
107                         // String cbamPackageName = cbamDirFile.listFiles()[0].getAbsolutePath();
108                         // cbamMgmr.uploadVnfPackage(cbamPackageName);
109
110                         // step 3: create vnf
111                         CBAMCreateVnfRequest cbamRequest = requestConverter.createReqConvert(driverRequest);
112                         logger.info("VnfmDriverMgmrImpl --> instantiateVnf, ready to create vnf on CBAM. ");
113                         CBAMCreateVnfResponse cbamResponse = cbamMgmr.createVnf(cbamRequest);
114                         String vnfInstanceId = cbamResponse.getId();
115                         logger.info("VnfmDriverMgmrImpl --> instantiateVnf, vnfInstanceId is " + vnfInstanceId);
116                         Long jobId = saveCreateVnfJob(vnfInstanceId);
117                         driverResponse = responseConverter.createRspConvert(cbamResponse, jobId);
118
119                         vnfContinueProcessorInf.continueInstantiateVnf(vnfmId, driverRequest, vnfInstanceId, jobId.toString(),
120                                         nslcmMgmr, catalogMgmr, cbamMgmr, requestConverter, jobDbManager, vnfcDbMgmr);
121
122                 } catch (Exception e) {
123                         logger.error("error VnfmDriverMgmrImpl --> instantiateVnf. ", e);
124                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
125                 }
126
127                 return driverResponse;
128         }
129
130         private Long saveCreateVnfJob(String vnfInstanceId) {
131                 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
132                 long nowTime = System.currentTimeMillis();
133                 jobInfo.setVnfInstanceId(vnfInstanceId);
134                 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_INSTANTIATE);
135                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
136                 jobInfo.setOperateStartTime(nowTime);
137
138                 jobDbManager.insert(jobInfo);
139                 VnfmJobExecutionInfo jobInfo1 = (VnfmJobExecutionInfo) jobDbManager.findNewestJobInfo();
140                 Long jobId = jobInfo1.getJobId();
141                 return jobId;
142         }
143
144         public TerminateVnfResponse terminateVnf(TerminateVnfRequest driverRequest, String vnfmId, String vnfInstanceId) {
145                 TerminateVnfResponse driverResponse;
146                 try {
147                         buildVnfmHttpPathById(vnfmId);
148                         driverResponse = generateTerminateVnfResponse(vnfInstanceId);
149                         String jobId = driverResponse.getJobId();
150
151                         vnfContinueProcessorInf.continueTerminateVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr,
152                                         cbamMgmr, requestConverter, jobDbManager, vnfcDbMgmr);
153
154                 } catch (Exception e) {
155                         logger.error("error VnfmDriverMgmrImpl --> terminateVnf. ", e);
156                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
157                 }
158
159                 return driverResponse;
160         }
161
162         private TerminateVnfResponse generateTerminateVnfResponse(String vnfInstanceId) {
163                 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
164                 long nowTime = System.currentTimeMillis();
165                 jobInfo.setVnfInstanceId(vnfInstanceId);
166                 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_TERMINATE);
167                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
168                 jobInfo.setOperateStartTime(nowTime);
169                 jobDbManager.insert(jobInfo);
170                 VnfmJobExecutionInfo jobInfo1 = jobDbManager.findNewestJobInfo();
171                 Long jobId = jobInfo1.getJobId();
172
173                 TerminateVnfResponse response = new TerminateVnfResponse();
174                 response.setJobId("" + jobId);
175                 return response;
176         }
177
178         public QueryVnfResponse queryVnf(String vnfmId, String vnfInstanceId) {
179                 QueryVnfResponse driverResponse;
180                 try {
181                         buildVnfmHttpPathById(vnfmId);
182                         CBAMQueryVnfResponse cbamResponse = cbamMgmr.queryVnf(vnfInstanceId);
183                         driverResponse = responseConverter.queryRspConvert(cbamResponse);
184                 } catch (Exception e) {
185                         logger.error("error VnfmDriverMgmrImpl --> queryVnf. ", e);
186                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
187                 }
188
189                 return driverResponse;
190         }
191
192         public OperStatusVnfResponse getOperStatus(String vnfmId, String jobId) throws VnfmDriverException {
193
194                 OperationExecution cbamResponse = null;
195
196                 try {
197                         buildVnfmHttpPathById(vnfmId);
198
199                         VnfmJobExecutionInfo jobInfo = jobDbManager.findOne(Long.parseLong(jobId));
200                         cbamResponse = new OperationExecution();
201
202                         if ("Instantiate".equalsIgnoreCase(jobInfo.getVnfmInterfceName())) {
203                                 cbamResponse.setOperationType(OperationType.INSTANTIATE);
204                         } else if ("Terminal".equalsIgnoreCase(jobInfo.getVnfmInterfceName())) {
205                                 cbamResponse.setOperationType(OperationType.TERMINATE);
206                         } else if ("Scalein".equalsIgnoreCase(jobInfo.getVnfmInterfceName())
207                                         || "Scaleout".equalsIgnoreCase(jobInfo.getVnfmInterfceName())) {
208                                 cbamResponse.setOperationType(OperationType.SCALE);
209                         } else {
210                                 cbamResponse.setOperationType(OperationType.HEAL);
211                         }
212
213                         if (jobInfo.getStatus().equalsIgnoreCase(CommonConstants.CBAM_OPERATION_STATUS_FINISH)) {
214                                 cbamResponse.setStatus(CommonEnum.OperationStatus.FINISHED);
215                         } else if (jobInfo.getStatus().equalsIgnoreCase(CommonConstants.CBAM_OPERATION_STATUS_ERROR)) {
216                                 cbamResponse.setStatus(CommonEnum.OperationStatus.FINISHED);
217                         } else {
218                                 cbamResponse.setStatus(CommonEnum.OperationStatus.OTHER);
219                                 // String execId = jobInfo.getVnfmExecutionId();
220                                 // logger.info(" VnfmDriverMgmrImpl --> getOperStatus execId is " + execId);
221                                 // cbamResponse = cbamMgmr.queryOperExecution(execId);
222                         }
223
224                 } catch (Exception e) {
225                         logger.error("error VnfmDriverMgmrImpl --> getOperStatus. ", e);
226                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
227                 }
228
229                 OperStatusVnfResponse response = responseConverter.operRspConvert(cbamResponse, jobId);
230                 response.setJobId(jobId);
231
232                 return response;
233         }
234
235         public ScaleVnfResponse scaleVnf(ScaleVnfRequest driverRequest, String vnfmId, String vnfInstanceId)
236                         throws VnfmDriverException {
237                 ScaleVnfResponse driverResponse;
238                 try {
239                         buildVnfmHttpPathById(vnfmId);
240                         driverResponse = generateScaleVnfResponse(vnfInstanceId, driverRequest.getType());
241                         String jobId = driverResponse.getJobId();
242
243                         vnfContinueProcessorInf.continueScaleVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr, cbamMgmr,
244                                         requestConverter, jobDbManager);
245                 } catch (Exception e) {
246                         logger.error("error VnfmDriverMgmrImpl --> scaleVnf. ", e);
247                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
248                 }
249
250                 return driverResponse;
251         }
252
253         private ScaleVnfResponse generateScaleVnfResponse(String vnfInstanceId, ScaleType type) {
254                 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
255                 long nowTime = System.currentTimeMillis();
256                 jobInfo.setVnfInstanceId(vnfInstanceId);
257                 if (type.equals(ScaleType.SCALE_OUT)) {
258                         jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_SCALE_OUT);
259                 } else {
260                         jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_SCALE_IN);
261                 }
262                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
263                 jobInfo.setOperateStartTime(nowTime);
264                 jobDbManager.insert(jobInfo);
265                 VnfmJobExecutionInfo jobInfo1 = jobDbManager.findNewestJobInfo();
266                 Long jobId = jobInfo1.getJobId();
267
268                 ScaleVnfResponse response = new ScaleVnfResponse();
269                 response.setJobId("" + jobId);
270                 return response;
271
272         }
273
274         public HealVnfResponse healVnf(HealVnfRequest driverRequest, String vnfmId, String vnfInstanceId)
275                         throws VnfmDriverException {
276                 HealVnfResponse driverResponse;
277                 try {
278                         buildVnfmHttpPathById(vnfmId);
279                         driverResponse = generateHealVnfResponse(vnfInstanceId);
280                         String jobId = driverResponse.getJobId();
281
282                         vnfContinueProcessorInf.continueHealVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr, cbamMgmr,
283                                         requestConverter, jobDbManager);
284                 } catch (Exception e) {
285                         logger.error("error VnfmDriverMgmrImpl --> healVnf. ", e);
286                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
287                 }
288
289                 return driverResponse;
290         }
291
292         private HealVnfResponse generateHealVnfResponse(String vnfInstanceId) {
293                 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
294                 long nowTime = System.currentTimeMillis();
295                 jobInfo.setVnfInstanceId(vnfInstanceId);
296                 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_HEAL);
297                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
298                 jobInfo.setOperateStartTime(nowTime);
299                 jobDbManager.insert(jobInfo);
300                 VnfmJobExecutionInfo jobInfo1 = jobDbManager.findNewestJobInfo();
301                 Long jobId = jobInfo1.getJobId();
302
303                 HealVnfResponse response = new HealVnfResponse();
304                 response.setJobId("" + jobId);
305                 return response;
306         }
307
308         public String buildVnfmHttpPathById(String vnfmId) {
309                 String result = "";
310                 try {
311                         result = buildVnfmHttpPathByRealId(vnfmId);
312                 } catch (Exception e) {
313                         logger.error("buildVnfmHttpPathById Error.", e);
314                 }
315                 return result;
316         }
317
318         public String buildVnfmHttpPathByRealId(String vnfmId)
319                         throws ClientProtocolException, IOException, VnfmDriverException {
320                 AaiVnfmInfo vnfmInfo = aaiMgmr.queryVnfm(vnfmId);
321                 logger.info("vnfmInfo in AAI is " + gson.toJson(vnfmInfo));
322                 if (isVnfmInfoValid(vnfmId, vnfmInfo)) {
323                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
324                 }
325
326                 EsrSystemInfo systemInfo = vnfmInfo.getEsrSystemInfoList().get(0);
327
328                 String urlHead = systemInfo.getServiceUrl();
329                 // adaptorEnv.setCbamApiUriFront(urlHead);
330                 // adaptorEnv.setCbamUserName(systemInfo.getUserName());
331                 // adaptorEnv.setCbamPassword(systemInfo.getPassword());
332
333                 return urlHead;
334         }
335
336         private boolean isVnfmInfoValid(String vnfmId, AaiVnfmInfo vnfmInfo) {
337                 return vnfmInfo == null || vnfmInfo.getEsrSystemInfoList() == null || vnfmInfo.getEsrSystemInfoList().isEmpty();
338         }
339
340         public void setRequestConverter(Driver2CbamRequestConverter requestConverter) {
341                 this.requestConverter = requestConverter;
342         }
343
344         public void setResponseConverter(Cbam2DriverResponseConverter responseConverter) {
345                 this.responseConverter = responseConverter;
346         }
347
348 }