2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.aai.restclient;
23 import static org.junit.Assert.assertNotNull;
24 import static org.springframework.test.web.client.match.MockRestRequestMatchers.*;
25 import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import com.google.gson.JsonArray;
30 import com.google.gson.JsonObject;
31 import com.google.gson.JsonParser;
33 import java.io.IOException;
34 import java.io.InputStream;
35 import java.nio.charset.StandardCharsets;
36 import java.util.ArrayList;
37 import java.util.Collections;
38 import java.util.List;
41 import org.apache.commons.io.IOUtils;
42 import org.springframework.core.io.Resource;
43 import org.springframework.http.*;
44 import org.springframework.stereotype.Component;
45 import org.springframework.test.web.client.ExpectedCount;
46 import org.springframework.test.web.client.MockRestServiceServer;
47 import org.springframework.util.MultiValueMap;
48 import org.springframework.web.client.RestTemplate;
51 public class MockRestClient extends RestClient {
53 private RestTemplate restTemplate;
54 private MockRestServiceServer mockRestServiceServer;
56 String fileName = "mockrequests";
58 public MockRestClient(String fileName) {
60 * List<MockRestServiceServer> mockedAAIRequests = new ArrayList<>(aaiRequests.size());
62 List<MockRestServiceServer> mockedAAIRequests = new ArrayList<>();
64 restTemplate = new RestTemplate();
66 * MockRestServiceServer server = MockRestServiceServer
67 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
69 * server.expect(MockRestRequestMatchers.requestTo(url))
70 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
73 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
74 // when(mockBuilder.build()).thenReturn(restTemplate);
76 JsonObject payload = null;
78 payload = getPayload(fileName + ".json");
79 } catch (IOException e) {
83 JsonArray mockUris = payload.getAsJsonArray("mock-uri");
85 mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
86 String url = "https://localhost:8447/aai/v14";
88 * mockRestServiceServer.expect(requestTo(url))
89 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
92 for (int i = 0; i < mockUris.size(); i++) {
93 String responseFile = mockUris.get(i).getAsJsonObject().get("response-file").getAsString();
94 String contentTypeValue = mockUris.get(i).getAsJsonObject().get("content").getAsString();
96 String uri = mockUris.get(i).getAsJsonObject().get("aai-uri").getAsString();
98 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(responseFile);
99 String responseBody = null;
101 responseBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
102 } catch (IOException e) {
106 mockRestServiceServer.expect(ExpectedCount.manyTimes(), requestTo(url + uri))
107 .andExpect(method(HttpMethod.GET)).andExpect(content().contentType(contentTypeValue))
108 .andRespond(withStatus(HttpStatus.OK).body(responseBody.toString())
109 .contentType(MediaType.valueOf(contentTypeValue)));
114 public MockRestClient() {
116 restTemplate = new RestTemplate();
118 * MockRestServiceServer server = MockRestServiceServer
119 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
121 * server.expect(MockRestRequestMatchers.requestTo(url))
122 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
125 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
126 // when(mockBuilder.build()).thenReturn(restTemplate);
128 JsonObject payload = null;
130 payload = getPayload(fileName + ".json");
131 } catch (IOException e) {
135 JsonArray mockUris = payload.getAsJsonArray("mock-uri");
137 mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
138 String url = "https://localhost:8447/aai/v14";
140 * mockRestServiceServer.expect(requestTo(url))
141 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
144 for (int i = 0; i < mockUris.size(); i++) {
145 String responseFile = mockUris.get(i).getAsJsonObject().get("response-file").getAsString();
146 String contentTypeValue = mockUris.get(i).getAsJsonObject().get("content").getAsString();
148 String uri = mockUris.get(i).getAsJsonObject().get("aai-uri").getAsString();
150 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(responseFile);
151 String responseBody = null;
153 responseBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
154 } catch (IOException e) {
158 mockRestServiceServer.expect(ExpectedCount.manyTimes(), requestTo(url + uri))
159 .andExpect(method(HttpMethod.GET)).andExpect(content().contentType(contentTypeValue))
160 .andRespond(withStatus(HttpStatus.OK).body(responseBody.toString())
161 .contentType(MediaType.valueOf(contentTypeValue)));
167 public JsonObject getTestDetails(String fileName) throws IOException {
169 JsonObject payload = getPayload(fileName);
174 public JsonObject getPayload(String filename) throws IOException {
175 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename);
177 // InputStream inputStream = new FileInputStream(filename);
179 String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
180 String message = String.format("Unable to find the %s in src/test/resources", filename);
181 assertNotNull(message, inputStream);
183 JsonParser parser = new JsonParser();
184 JsonObject payload = parser.parse(result).getAsJsonObject();
189 public ResponseEntity execute(String uri, HttpMethod method, Map<String, String> headers, String body) {
191 String url = "https://localhost:8447/aai/v14/" + uri;
194 * MockRestServiceServer server = MockRestServiceServer
195 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
197 * server.expect(MockRestRequestMatchers.requestTo(url))
198 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
201 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
202 // when(mockBuilder.build()).thenReturn(restTemplate);
205 * MockRestServiceServer server = MockRestServiceServer.createServer(restTemplate);
206 * server.expect(requestTo(url))
207 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
208 * return new ResponseEntity("blah", HttpStatus.OK);
209 * server.expect(ExpectedCount.manyTimes(), requestTo(Matchers.startsWith(aaiBaseUrl +
210 * aaiRequests.get(i).get("aai-uri").asText())))
211 * .andExpect(method(HttpMethod.GET))
212 * .andExpect(content().contentType(MediaType.APPLICATION_JSON))
213 * .andRespond(withStatus(HttpStatus.OK).body(aaiResponses.get(i).toString()).contentType(MediaType.
214 * APPLICATION_JSON));
217 HttpHeaders headersMap = new HttpHeaders();
219 headersMap.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
220 headersMap.setContentType(MediaType.APPLICATION_JSON);
221 headersMap.add("Real-Time", "true");
222 headersMap.add("X-FromAppId", "JUNIT");
223 headersMap.add("X-TransactionId", "JUNIT");
225 HttpEntity httpEntity = new HttpEntity(headers);
227 ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
229 // mockRestServiceServer.verify();
230 return responseEntity;
234 public ResponseEntity executeResource(String uri, HttpMethod method, Map<String, String> headers, String body) {
236 String url = "https://localhost:8447/aai/v14/" + uri;
239 * MockRestServiceServer server = MockRestServiceServer
240 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
242 * server.expect(MockRestRequestMatchers.requestTo(url))
243 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
246 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
247 // when(mockBuilder.build()).thenReturn(restTemplate);
250 * MockRestServiceServer server = MockRestServiceServer.createServer(restTemplate);
251 * server.expect(requestTo(url))
252 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
253 * return new ResponseEntity("blah", HttpStatus.OK);
254 * server.expect(ExpectedCount.manyTimes(), requestTo(Matchers.startsWith(aaiBaseUrl +
255 * aaiRequests.get(i).get("aai-uri").asText())))
256 * .andExpect(method(HttpMethod.GET))
257 * .andExpect(content().contentType(MediaType.APPLICATION_JSON))
258 * .andRespond(withStatus(HttpStatus.OK).body(aaiResponses.get(i).toString()).contentType(MediaType.
259 * APPLICATION_JSON));
262 HttpHeaders headersMap = new HttpHeaders();
264 headersMap.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
265 headersMap.setContentType(MediaType.APPLICATION_JSON);
266 headersMap.add("Real-Time", "true");
267 headersMap.add("X-FromAppId", "JUNIT");
268 headersMap.add("X-TransactionId", "JUNIT");
270 HttpEntity httpEntity = new HttpEntity(headers);
272 ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, Resource.class);
274 // mockRestServiceServer.verify();
275 return responseEntity;
279 public RestTemplate getRestTemplate() {
280 RestTemplate restTemplate = null;
284 public String getBaseUrl() {
288 protected MultiValueMap<String, String> getHeaders(Map<String, String> headers) {