Merge "Updated to use vnfOperationalEnvironmentId"
[so.git] / bpmn / MSOCommonBPMN / src / test / java / org / onap / so / bpmn / mock / SDNCAdapterNetworkTopologyMockTransformer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
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.mock;
24
25 import javax.ws.rs.core.Response;
26 import javax.ws.rs.core.UriBuilder;
27
28 import org.onap.so.client.HttpClient;
29 import org.onap.so.client.HttpClientFactory;
30 import org.onap.so.utils.TargetEntity;
31
32 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
33 import com.github.tomakehurst.wiremock.common.FileSource;
34 import com.github.tomakehurst.wiremock.extension.Parameters;
35 import com.github.tomakehurst.wiremock.extension.ResponseDefinitionTransformer;
36 import com.github.tomakehurst.wiremock.http.Request;
37 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40
41 public class SDNCAdapterNetworkTopologyMockTransformer extends ResponseDefinitionTransformer {
42
43         private static final Logger logger = LoggerFactory.getLogger(SDNCAdapterNetworkTopologyMockTransformer.class);
44         
45         private String callbackResponse;
46         private String requestId;
47         
48         public SDNCAdapterNetworkTopologyMockTransformer() {
49                 callbackResponse = ""; // FileUtil.readResourceFile("__files/sdncDeleteNetworkTopologySimResponse.xml");
50         }
51
52         public SDNCAdapterNetworkTopologyMockTransformer(String requestId) {
53                 this.requestId = requestId;
54         }
55         
56         @Override
57         public String getName() {
58                 return "network-topology-operation-transformer";
59         }
60
61         @Override
62         public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource fileSource, Parameters parameters) {
63                 String requestBody = request.getBodyAsString();
64                 
65                 String callbackUrl = requestBody.substring(requestBody.indexOf("<sdncadapter:CallbackUrl>")+25, requestBody.indexOf("</sdncadapter:CallbackUrl>"));
66                 String requestId = requestBody.substring(requestBody.indexOf("<sdncadapter:RequestId>")+23, requestBody.indexOf("</sdncadapter:RequestId>"));
67                 logger.info("request callbackUrl : " + callbackUrl);
68                 logger.info("request requestId : " + requestId);
69
70                 logger.info("file path/name : " + responseDefinition.getBodyFileName());
71                 callbackResponse = FileUtil.readResourceFile("__files/" + responseDefinition.getBodyFileName());                
72                 // extract Response responseRequestId
73                 String responseRequestId = callbackResponse.substring(callbackResponse.indexOf("<RequestId>")+11, callbackResponse.indexOf("</RequestId>"));
74                 logger.info("response requestId: " + responseRequestId);
75                 logger.info("callbackResponse (before): " + callbackResponse);
76                 callbackResponse = callbackResponse.replace(responseRequestId, requestId);                              
77                 if (this.requestId != null) {
78                         callbackResponse = callbackResponse.replace(this.requestId, requestId);
79                 } else {
80                         callbackResponse = callbackResponse.replace(responseRequestId, requestId);
81                 }       
82                 logger.info("callbackResponse (after):" + callbackResponse);
83
84                 Object sdncDelay = MockResource.getMockProperties().get("sdnc_delay");
85                 int delay = 300;
86                 if (sdncDelay != null) {
87                         delay = Integer.parseInt(sdncDelay.toString());
88                 }
89                 
90                 //Kick off callback thread
91                 logger.info("(NetworkTopologyMockTransformer) callback Url:" + callbackUrl + ":delay:" + delay);
92                 CallbackResponseThread calbackResponseThread = new CallbackResponseThread(callbackUrl,callbackResponse, delay);
93                 calbackResponseThread.start();
94                 
95                 //return 200 OK with body
96                 return ResponseDefinitionBuilder
97                 .like(responseDefinition).but()
98                 .withStatus(200).withBody(callbackResponse).withHeader("Content-Type", "text/xml")
99                 .build();
100         }
101
102         @Override
103         public boolean applyGlobally() {
104             return false;
105         }
106         
107         private class CallbackResponseThread extends Thread {
108                 
109                 private String callbackUrl;
110                 private String payLoad;
111                 private int delay;
112                 
113                 public CallbackResponseThread(String callbackUrl, String payLoad, int delay) {
114                         this.callbackUrl = callbackUrl;
115                         this.payLoad = payLoad;
116                         this.delay = delay;
117                 }
118                 
119                 public void run () {
120                         try {
121                                 //Delay sending callback response
122                                 sleep(delay);
123                         } catch (InterruptedException e1) {
124                                 // TODO Auto-generated catch block
125                                 logger.debug("Exception :", e1);
126                         }
127                         logger.debug("Sending callback response to url: {}", callbackUrl);
128                         try {
129                                 HttpClient client = new HttpClientFactory()
130                                         .newTextXmlClient(UriBuilder.fromUri(callbackUrl).build().toURL(), TargetEntity.SDNC_ADAPTER);
131                                 Response response = client.post(payLoad);
132                                 logger.debug("Successfully posted callback? Status: {}", response.getStatus());
133                         } catch (Exception e) {
134                                 // TODO Auto-generated catch block
135                                 logger.debug("catch error in - request.post() ");
136                                 logger.debug("Exception :", e);
137                         }
138                 }
139                 
140         }
141 }