2 * ============LICENSE_START=======================================================
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
23 package org.onap.so.bpmn.mock;
25 import javax.ws.rs.core.Response;
26 import javax.ws.rs.core.UriBuilder;
28 import org.onap.so.client.HttpClient;
29 import org.onap.so.client.HttpClientFactory;
30 import org.onap.so.utils.TargetEntity;
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;
41 public class SDNCAdapterNetworkTopologyMockTransformer extends ResponseDefinitionTransformer {
43 private static final Logger logger = LoggerFactory.getLogger(SDNCAdapterNetworkTopologyMockTransformer.class);
45 private String callbackResponse;
46 private String requestId;
48 public SDNCAdapterNetworkTopologyMockTransformer() {
49 callbackResponse = ""; // FileUtil.readResourceFile("__files/sdncDeleteNetworkTopologySimResponse.xml");
52 public SDNCAdapterNetworkTopologyMockTransformer(String requestId) {
53 this.requestId = requestId;
57 public String getName() {
58 return "network-topology-operation-transformer";
62 public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource fileSource, Parameters parameters) {
63 String requestBody = request.getBodyAsString();
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);
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);
80 callbackResponse = callbackResponse.replace(responseRequestId, requestId);
82 logger.info("callbackResponse (after):" + callbackResponse);
84 Object sdncDelay = MockResource.getMockProperties().get("sdnc_delay");
86 if (sdncDelay != null) {
87 delay = Integer.parseInt(sdncDelay.toString());
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();
95 //return 200 OK with body
96 return ResponseDefinitionBuilder
97 .like(responseDefinition).but()
98 .withStatus(200).withBody(callbackResponse).withHeader("Content-Type", "text/xml")
103 public boolean applyGlobally() {
107 private class CallbackResponseThread extends Thread {
109 private String callbackUrl;
110 private String payLoad;
113 public CallbackResponseThread(String callbackUrl, String payLoad, int delay) {
114 this.callbackUrl = callbackUrl;
115 this.payLoad = payLoad;
121 //Delay sending callback response
123 } catch (InterruptedException e1) {
124 // TODO Auto-generated catch block
125 logger.debug("Exception :", e1);
127 logger.debug("Sending callback response to url: {}", callbackUrl);
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);