Merge Casablanca
[so.git] / adapters / mso-requests-db-adapter / src / test / java / org / onap / so / adapters / requestsdb / adapters / MSORequestDBImplTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.so.adapters.requestsdb.adapters;
22
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.junit.Assert.assertNotNull;
27 import static org.junit.Assert.fail;
28
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Map;
32 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
33 import org.junit.Before;
34 import org.junit.Rule;
35 import org.junit.Test;
36 import org.junit.rules.ExpectedException;
37 import org.junit.runner.RunWith;
38 import org.onap.so.adapters.requestsdb.application.TestAppender;
39 import org.onap.logging.ref.slf4j.ONAPLogConstants;
40 import org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter;
41 import org.onap.so.adapters.requestsdb.RequestStatusType;
42 import org.onap.so.adapters.requestsdb.application.MSORequestDBApplication;
43 import org.onap.so.adapters.requestsdb.exceptions.MsoRequestsDbException;
44 import org.onap.so.db.request.beans.InfraActiveRequests;
45 import org.onap.so.db.request.beans.OperationStatus;
46 import org.onap.so.db.request.beans.ResourceOperationStatus;
47 import org.onap.so.db.request.data.repository.OperationStatusRepository;
48 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
49 import org.onap.so.logger.MsoLogger;
50 import org.onap.so.requestsdb.RequestsDbConstant;
51 import org.springframework.beans.factory.annotation.Autowired;
52 import org.springframework.beans.factory.annotation.Qualifier;
53 import org.springframework.boot.web.server.LocalServerPort;
54 import org.springframework.boot.test.context.SpringBootTest;
55 import org.springframework.context.annotation.Bean;
56 import org.springframework.test.context.ActiveProfiles;
57 import org.springframework.test.context.ContextConfiguration;
58 import org.springframework.test.context.junit4.SpringRunner;
59 import ch.qos.logback.classic.spi.ILoggingEvent;
60
61 @RunWith(SpringRunner.class)
62 @SpringBootTest(classes = MSORequestDBApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
63 @ActiveProfiles("test")
64 public class MSORequestDBImplTest {
65
66         @LocalServerPort
67         private int port;
68
69         private MsoRequestsDbAdapter dbAdapter;
70                 
71     @Autowired
72     private OperationStatusRepository operationStatusRepository;
73     
74     @Autowired
75     private ResourceOperationStatusRepository resourceOperationStatusRepo;
76
77     @Rule
78     public ExpectedException thrown = ExpectedException.none();
79     
80         public InfraActiveRequests setupTestEntities()   {      
81                 return buildTestRequest();
82         }       
83         
84         @Before
85         public void before(){
86         JaxWsProxyFactoryBean jaxWsProxyFactory = new JaxWsProxyFactoryBean();
87         jaxWsProxyFactory.setServiceClass(MsoRequestsDbAdapter.class);
88         jaxWsProxyFactory.setAddress("http://localhost:" + port + "/services/RequestsDbAdapter");
89         jaxWsProxyFactory.setUsername("bpel");
90         jaxWsProxyFactory.setPassword("mso-db-1507!");
91         dbAdapter = (MsoRequestsDbAdapter) jaxWsProxyFactory.create();
92         }
93
94         private InfraActiveRequests buildTestRequest() {        
95                 InfraActiveRequests testRequest= new InfraActiveRequests();
96                 testRequest.setRequestId("00032ab7-3fb3-42e5-965d-8ea592502017");       
97                 testRequest.setClientRequestId("00032ab7-3fb3-42e5-965d-8ea592502016");
98                 testRequest.setRequestStatus("COMPLETE");
99                 testRequest.setStatusMessage("Vf Module has been deleted successfully.");
100                 testRequest.setProgress((long) 100);
101                 testRequest.setSource("VID");           
102                 testRequest.setTenantId("6accefef3cb442ff9e644d589fb04107");
103                 testRequest.setServiceInstanceId("e3b5744d-2ad1-4cdd-8390-c999a38829bc");
104                 testRequest.setRequestAction("deleteInstance");
105                 testRequest.setRequestScope("vfModule");
106                 testRequest.setAction("deleteInstance");
107                 testRequest.setAicCloudRegion("mtn6");
108                 testRequest.setLastModifiedBy("BPMN");
109                 testRequest.setVfModuleId("c7d527b1-7a91-49fd-b97d-1c8c0f4a7992");
110                 testRequest.setVfModuleModelName("vSAMP10aDEV::base::module-0");
111                 testRequest.setVnfId("b92f60c8-8de3-46c1-8dc1-e4390ac2b005");
112                 testRequest.setRequestUrl("http://localhost:8080/onap/so/infra/serviceInstantiation/v7/serviceInstances");
113                 
114                 return testRequest;
115         }
116
117         @Test
118         public void getByRequestId() throws MsoRequestsDbException  {
119             
120                 InfraActiveRequests testRequest = setupTestEntities();
121                 // Given
122                 String requestId = "00032ab7-3fb3-42e5-965d-8ea592502017";
123                 
124                 // When
125                 InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(requestId);
126                 if(infraRequest ==null)
127                          fail("Null infraRequest");
128                 
129                 // Then
130                 assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime").ignoring("startTime").ignoring("modifyTime"));             
131         }
132         
133         
134         @Test
135         public void getByInvalidRequestId() throws MsoRequestsDbException  {            
136                 // Given
137                 String requestId = "invalidRequestId";
138
139                 try {
140                         dbAdapter.getInfraRequest(requestId);
141                         fail("Expected MsoRequestsDbException to be thrown");
142                 } catch (Exception e) {
143                     assertEquals(e.getMessage(),"Error retrieving MSO Infra Requests DB for Request ID invalidRequestId");
144                 }               
145         }
146         
147         @Test
148         public void getByClientRequestId() throws MsoRequestsDbException  {
149                 InfraActiveRequests testRequest = setupTestEntities();
150                 // Given
151                 String clientRequestId = "00032ab7-3fb3-42e5-965d-8ea592502016";
152                 
153                 // When
154                 InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(clientRequestId);
155                 if(infraRequest ==null)
156                          fail("Null infraRequest");
157                 
158                 // Then
159                 assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime").ignoring("startTime").ignoring("modifyTime"));             
160         }
161         
162         
163         @Test
164         public void updateInfraRequest() throws MsoRequestsDbException  {
165                 InfraActiveRequests testRequest = setupTestEntities();
166                 // Given
167                 String clientRequestId = "00032ab7-3fb3-42e5-965d-8ea592502016";
168                         
169
170                 // When
171                 String lastModifiedBy = "UNIT TEST";
172                 String statusMessage = "TESTING THE UDPATES";
173                 String progress = "50";
174                 String vnfOutputs = "VNF OUTPUTS";              
175                 String networkId = "New NetworkID";
176                 String vnfId = "NEWVNFID";
177                 String volumeGroupId = "NewVolumeGroupId";
178                 String serviceInstanceName = "NewServiceInstanceName";
179                 String configurationId = "NewConfigurationId";
180                 String configurationName = "NewConfigurationName";
181                 String vfModuleName = "VFModuleName";
182                 RequestStatusType requestStatus = RequestStatusType.COMPLETE ;
183                 String responseBody = "NewResponseBody";
184                 String vfModuleId = "NEW VF MODULEID";  
185                 String serviceInstanceId = " new serv ind";
186                 
187                 
188                 testRequest.setVolumeGroupId(volumeGroupId);
189                 testRequest.setServiceInstanceName(serviceInstanceName);
190                 testRequest.setConfigurationId(configurationId);
191                 testRequest.setConfigurationName(configurationName);
192                 testRequest.setNetworkId(networkId);
193                 testRequest.setResponseBody(responseBody);
194                 testRequest.setStatusMessage(statusMessage);
195                 testRequest.setProgress((long) 50);
196                 testRequest.setServiceInstanceId(lastModifiedBy);
197                 testRequest.setLastModifiedBy(lastModifiedBy);
198                 testRequest.setVfModuleId(vfModuleId);
199                 testRequest.setVfModuleName(vfModuleName);
200                 testRequest.setVnfId(vnfId);
201                 testRequest.setServiceInstanceId(serviceInstanceId);
202                 testRequest.setVfModuleName(vfModuleName);
203                 testRequest.setVnfOutputs(vnfOutputs);
204                                 
205                 
206                  dbAdapter.updateInfraRequest ( testRequest.getRequestId(),
207                  lastModifiedBy,
208                  statusMessage,
209                  responseBody,
210                  requestStatus,
211                  progress,
212                  vnfOutputs,
213                  serviceInstanceId,
214                  networkId,
215                  vnfId,
216                  vfModuleId,
217                  volumeGroupId,
218                  serviceInstanceName,
219                  configurationId,
220                  configurationName,
221                  vfModuleName);
222                 InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(clientRequestId);
223                 // Then
224                 assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime").ignoring("startTime").ignoring("modifyTime"));             
225         }
226         
227         @Test
228         public void UpdateByInvalidRequestId() throws MsoRequestsDbException  {         
229                 // Given
230                 String requestId = "invalidRequestId";
231
232                 try {
233                         dbAdapter.updateInfraRequest ( requestId,
234                                         null,
235                                         null,
236                                         null,
237                                         null,
238                                         null,
239                                         null,
240                                         null,
241                                         null,
242                                         null,
243                                         null,
244                                         null,
245                                         null,
246                                         null,
247                                         null,
248                                         null);
249                         fail("Expected MsoRequestsDbException to be thrown");   
250                 } catch (Exception e) {
251                     assertEquals(e.getMessage(),"Error retrieving MSO Infra Requests DB for Request ID invalidRequestId");
252                 }               
253         }
254         
255         
256         @Test
257         public void updateInfraRequestNulls() throws MsoRequestsDbException  {
258                 InfraActiveRequests testRequest = setupTestEntities();
259                 // Given
260                 String clientRequestId = "00032ab7-3fb3-42e5-965d-8ea592502016";
261
262                 // When
263                 dbAdapter.updateInfraRequest ( testRequest.getRequestId(),
264                                 testRequest.getLastModifiedBy(),
265                                 null,
266                                 null,
267                                 null,
268                                 null,
269                                 null,
270                                 null,
271                                 null,
272                                 null,
273                                 null,
274                                 null,
275                                 null,
276                                 null,
277                                 null,
278                                 null);
279                 InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(clientRequestId);
280                 // Then
281                 assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime").ignoring("startTime").ignoring("modifyTime"));             
282         }
283         
284         @Test
285         public void getSiteStatusNotDisabled() throws MsoRequestsDbException  {
286                 setupTestEntities();
287                 // Given
288                 String siteName = "siteName";
289                 
290                 // When
291                 boolean siteDisabled = dbAdapter.getSiteStatus(siteName);
292                 
293                 // Then
294                 assertEquals(siteDisabled, true);               
295         }
296         
297         @Test
298         public void getSiteStatusDisabled() throws MsoRequestsDbException  {
299                 setupTestEntities();
300                 // Given
301                 String siteName = "testSite";
302                 
303                 // When
304                 boolean siteDisabled = dbAdapter.getSiteStatus(siteName);
305                 
306                 // Then
307                 assertEquals(siteDisabled, false);              
308         }
309         
310         @Test 
311         public void updateServiceOperation() throws MsoRequestsDbException{
312                 String serviceId = "serviceid";
313                 String operationId = "operationid";
314                 String serviceName = "servicename";
315                 String operation = "newOperationType";
316                 String userId = "NewUserId";
317                 String result = "NewResult";
318                 String operationContent = "newOperationContent";
319                 String progress = "Newprogress";
320                 String reason = "NewReason";            
321                 
322                 OperationStatus updatedOperationStatus = new OperationStatus();
323                 
324                 
325                 
326                 updatedOperationStatus.setServiceId(serviceId);
327                 updatedOperationStatus.setServiceName(serviceName);
328                 updatedOperationStatus.setOperationId(operationId);
329                 updatedOperationStatus.setOperation(operation);
330                 updatedOperationStatus.setUserId(userId);
331                 updatedOperationStatus.setResult(result);
332                 updatedOperationStatus.setProgress(progress);
333                 updatedOperationStatus.setReason(reason);
334                 updatedOperationStatus.setOperationContent(operationContent);
335                 
336                 dbAdapter.updateServiceOperationStatus(serviceId, operationId, operation,  userId,
337                      result, operationContent,  progress, reason);              
338                 OperationStatus dbOpStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId,operationId);         
339                 assertThat(dbOpStatus, sameBeanAs(updatedOperationStatus).ignoring("operateAt").ignoring("finishedAt"));        
340         }
341         
342         
343         @Test 
344         public void updateServiceOperation_Not_Found() throws MsoRequestsDbException{
345             TestAppender.events.clear();
346                 String serviceId = "badserviceId";
347                 String operationId = "operationid";
348                 String operation = "newOperationType";
349                 String userId = "NewUserId";
350                 String result = "NewResult";
351                 String operationContent = "newOperationContent";
352                 String progress = "Newprogress";
353                 String reason = "NewReason";            
354                 
355                 OperationStatus updatedOperationStatus = new OperationStatus();
356                 
357                 
358                 
359                 updatedOperationStatus.setServiceId(serviceId);
360                 updatedOperationStatus.setOperationId(operationId);
361                 updatedOperationStatus.setOperation(operation);
362                 updatedOperationStatus.setUserId(userId);
363                 updatedOperationStatus.setResult(result);
364                 updatedOperationStatus.setProgress(progress);
365                 updatedOperationStatus.setReason(reason);
366                 updatedOperationStatus.setOperationContent(operationContent);
367
368                 dbAdapter.updateServiceOperationStatus(serviceId, operationId, operation,  userId,
369                      result, operationContent,  progress, reason);              
370                 OperationStatus dbOpStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId,operationId);         
371                 assertThat(dbOpStatus, sameBeanAs(updatedOperationStatus).ignoring("operateAt").ignoring("finishedAt"));                
372         }
373         
374         @Test 
375         public void initResourceOperationStatus() throws MsoRequestsDbException{
376                 String resourceTemplateUUIDs = "template1:template2:template3:";
377                 String serviceId = "serviceId";
378                 String operationId = "operationId";
379                 String operationType = "operationType";
380                 
381              ResourceOperationStatus resource1 = new ResourceOperationStatus();
382              resource1.setOperationId(operationId);
383              resource1.setServiceId(serviceId);
384              resource1.setResourceTemplateUUID("template1");
385              resource1.setOperType(operationType);
386              resource1.setStatus(RequestsDbConstant.Status.PROCESSING);
387              resource1.setStatusDescription("Waiting for start");
388          
389          ResourceOperationStatus resource2 = new ResourceOperationStatus();
390          resource2.setOperationId(operationId);
391          resource2.setServiceId(serviceId);
392          resource2.setResourceTemplateUUID("template2");
393          resource2.setOperType(operationType);
394          resource2.setStatus(RequestsDbConstant.Status.PROCESSING);
395          resource2.setStatusDescription("Waiting for start");
396          
397          ResourceOperationStatus resource3 = new ResourceOperationStatus();
398          resource3.setOperationId(operationId);
399          resource3.setServiceId(serviceId);
400          resource3.setResourceTemplateUUID("template3");
401          resource3.setOperType(operationType);
402          resource3.setStatus(RequestsDbConstant.Status.PROCESSING);
403          resource3.setStatusDescription("Waiting for start");
404          
405          List<ResourceOperationStatus> expectedResult = new ArrayList<ResourceOperationStatus>();
406          expectedResult.add(resource1);
407          expectedResult.add(resource2);
408          expectedResult.add(resource3);
409                 
410                 dbAdapter.initResourceOperationStatus(serviceId, operationId, operationType,resourceTemplateUUIDs);             
411                 List<ResourceOperationStatus> testList = resourceOperationStatusRepo.findByServiceIdAndOperationId(serviceId,operationId);              
412                 assertThat(testList, sameBeanAs(expectedResult));       
413         }
414
415         @Test
416         public void getResourceOperationStatus() throws MsoRequestsDbException{
417                 String resourceTemplateUUIDs = "template1";
418                 String serviceId = "serviceId";
419                 String operationId = "operationId";
420                 String operationType = "operationType";
421
422                 ResourceOperationStatus resource1 = new ResourceOperationStatus();
423                 resource1.setOperationId(operationId);
424                 resource1.setServiceId(serviceId);
425                 resource1.setResourceTemplateUUID("template1");
426                 resource1.setOperType(operationType);
427                 resource1.setStatus(RequestsDbConstant.Status.PROCESSING);
428                 resource1.setStatusDescription("Waiting for start");
429
430
431                 dbAdapter.initResourceOperationStatus(serviceId, operationId, operationType,resourceTemplateUUIDs);
432
433                 ResourceOperationStatus actualResource = dbAdapter.getResourceOperationStatus(serviceId, operationId,"template1");
434                 assertThat(actualResource, sameBeanAs(resource1));
435         }
436
437         @Test
438         public void updateResourceOperationStatus() throws MsoRequestsDbException{
439             TestAppender.events.clear();
440                 String resourceTemplateUUID = "template1";
441                 String serviceId = "serviceId";
442                 String operationId = "operationId";
443                 String operationType = "operationType";
444                 String resourceInstanceID = "resourceInstanceID";
445                 String jobId = "jobId";
446                 String status = RequestsDbConstant.Status.FINISHED;
447                 String progress = "50";
448                 String errorCode = "errorCode";
449                 String statusDescription = "statusDescription";
450
451
452                 ResourceOperationStatus expectedResource = new ResourceOperationStatus();
453                 expectedResource.setOperationId(operationId);
454                 expectedResource.setServiceId(serviceId);
455                 expectedResource.setResourceTemplateUUID(resourceTemplateUUID);
456                 expectedResource.setOperType(operationType);
457                 expectedResource.setJobId(jobId);
458                 expectedResource.setErrorCode(errorCode);
459                 expectedResource.setStatus(RequestsDbConstant.Status.FINISHED);
460                 expectedResource.setStatusDescription(statusDescription);
461                 expectedResource.setProgress(progress);
462                 expectedResource.setResourceInstanceID(resourceInstanceID);
463
464
465                 dbAdapter.updateResourceOperationStatus(serviceId, operationId, resourceTemplateUUID,
466                                 operationType, resourceInstanceID, jobId, status, progress,
467                                 errorCode, statusDescription);
468
469                 ResourceOperationStatus actualResource = dbAdapter.getResourceOperationStatus(serviceId, operationId,"template1");
470                 assertThat(actualResource, sameBeanAs(expectedResource));
471                 
472                 for(ILoggingEvent logEvent : TestAppender.events)
473             if(logEvent.getLoggerName().equals("org.onap.so.logging.cxf.interceptor.SOAPLoggingInInterceptor") &&
474                     logEvent.getMarker().getName().equals("ENTRY")
475                     ){
476                 Map<String,String> mdc = logEvent.getMDCPropertyMap();
477                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.INSTANCE_UUID));
478                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
479                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.INVOCATION_ID));
480                 assertEquals("",mdc.get(ONAPLogConstants.MDCs.PARTNER_NAME));
481                 assertEquals("/services/RequestsDbAdapter",mdc.get(ONAPLogConstants.MDCs.SERVICE_NAME));
482                 assertEquals("INPROGRESS",mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
483             }else if(logEvent.getLoggerName().equals("org.onap.so.logging.cxf.interceptor.SOAPLoggingOutInterceptor") &&
484                     logEvent.getMarker().getName().equals("EXIT")){
485                 Map<String,String> mdc = logEvent.getMDCPropertyMap();
486                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
487                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.INVOCATION_ID));
488                 assertEquals(null,mdc.get(ONAPLogConstants.MDCs.RESPONSE_CODE));
489                 assertEquals("",mdc.get(ONAPLogConstants.MDCs.PARTNER_NAME));
490                 assertEquals("/services/RequestsDbAdapter",mdc.get(ONAPLogConstants.MDCs.SERVICE_NAME));
491                 assertEquals("COMPLETED",mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
492             }
493         }
494
495
496 }