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 com.att.eelf.configuration.EELFLogger;
28 import com.google.gson.JsonArray;
29 import com.google.gson.JsonObject;
30 import com.google.gson.JsonParser;
32 import java.io.IOException;
33 import java.io.InputStream;
34 import java.nio.charset.StandardCharsets;
35 import java.util.ArrayList;
36 import java.util.Collections;
37 import java.util.List;
40 import org.apache.commons.io.IOUtils;
41 import org.springframework.core.io.Resource;
42 import org.springframework.http.*;
43 import org.springframework.stereotype.Component;
44 import org.springframework.test.web.client.ExpectedCount;
45 import org.springframework.test.web.client.MockRestServiceServer;
46 import org.springframework.util.MultiValueMap;
47 import org.springframework.web.client.RestTemplate;
50 public class MockRestClient extends RestClient {
52 private RestTemplate restTemplate;
53 private MockRestServiceServer mockRestServiceServer;
55 String fileName = "mockrequests";
57 public MockRestClient(String fileName) {
59 * List<MockRestServiceServer> mockedAAIRequests = new ArrayList<>(aaiRequests.size());
61 List<MockRestServiceServer> mockedAAIRequests = new ArrayList<>();
63 restTemplate = new RestTemplate();
65 * MockRestServiceServer server = MockRestServiceServer
66 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
68 * server.expect(MockRestRequestMatchers.requestTo(url))
69 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
72 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
73 // when(mockBuilder.build()).thenReturn(restTemplate);
75 JsonObject payload = null;
77 payload = getPayload(fileName + ".json");
78 } catch (IOException e) {
82 JsonArray mockUris = payload.getAsJsonArray("mock-uri");
84 mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
85 String url = "https://localhost:8447/aai/v14";
87 * mockRestServiceServer.expect(requestTo(url))
88 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
91 for (int i = 0; i < mockUris.size(); i++) {
92 String responseFile = mockUris.get(i).getAsJsonObject().get("response-file").getAsString();
93 String contentTypeValue = mockUris.get(i).getAsJsonObject().get("content").getAsString();
95 String uri = mockUris.get(i).getAsJsonObject().get("aai-uri").getAsString();
97 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(responseFile);
98 String responseBody = null;
100 responseBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
101 } catch (IOException e) {
105 mockRestServiceServer.expect(ExpectedCount.manyTimes(), requestTo(url + uri))
106 .andExpect(method(HttpMethod.GET)).andExpect(content().contentType(contentTypeValue))
107 .andRespond(withStatus(HttpStatus.OK).body(responseBody.toString())
108 .contentType(MediaType.valueOf(contentTypeValue)));
113 public MockRestClient() {
115 restTemplate = new RestTemplate();
117 * MockRestServiceServer server = MockRestServiceServer
118 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
120 * server.expect(MockRestRequestMatchers.requestTo(url))
121 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
124 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
125 // when(mockBuilder.build()).thenReturn(restTemplate);
127 JsonObject payload = null;
129 payload = getPayload(fileName + ".json");
130 } catch (IOException e) {
134 JsonArray mockUris = payload.getAsJsonArray("mock-uri");
136 mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
137 String url = "https://localhost:8447/aai/v14";
139 * mockRestServiceServer.expect(requestTo(url))
140 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
143 for (int i = 0; i < mockUris.size(); i++) {
144 String responseFile = mockUris.get(i).getAsJsonObject().get("response-file").getAsString();
145 String contentTypeValue = mockUris.get(i).getAsJsonObject().get("content").getAsString();
147 String uri = mockUris.get(i).getAsJsonObject().get("aai-uri").getAsString();
149 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(responseFile);
150 String responseBody = null;
152 responseBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
153 } catch (IOException e) {
157 mockRestServiceServer.expect(ExpectedCount.manyTimes(), requestTo(url + uri))
158 .andExpect(method(HttpMethod.GET)).andExpect(content().contentType(contentTypeValue))
159 .andRespond(withStatus(HttpStatus.OK).body(responseBody.toString())
160 .contentType(MediaType.valueOf(contentTypeValue)));
166 public JsonObject getTestDetails(String fileName) throws IOException {
168 JsonObject payload = getPayload(fileName);
173 public JsonObject getPayload(String filename) throws IOException {
174 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename);
176 // InputStream inputStream = new FileInputStream(filename);
178 String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
179 String message = String.format("Unable to find the %s in src/test/resources", filename);
180 assertNotNull(message, inputStream);
182 JsonParser parser = new JsonParser();
183 JsonObject payload = parser.parse(result).getAsJsonObject();
188 public ResponseEntity execute(String uri, HttpMethod method, Map<String, String> headers, String body) {
190 String url = "https://localhost:8447/aai/v14/" + uri;
193 * MockRestServiceServer server = MockRestServiceServer
194 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
196 * server.expect(MockRestRequestMatchers.requestTo(url))
197 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
200 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
201 // when(mockBuilder.build()).thenReturn(restTemplate);
204 * MockRestServiceServer server = MockRestServiceServer.createServer(restTemplate);
205 * server.expect(requestTo(url))
206 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
207 * return new ResponseEntity("blah", HttpStatus.OK);
208 * server.expect(ExpectedCount.manyTimes(), requestTo(Matchers.startsWith(aaiBaseUrl +
209 * aaiRequests.get(i).get("aai-uri").asText())))
210 * .andExpect(method(HttpMethod.GET))
211 * .andExpect(content().contentType(MediaType.APPLICATION_JSON))
212 * .andRespond(withStatus(HttpStatus.OK).body(aaiResponses.get(i).toString()).contentType(MediaType.
213 * APPLICATION_JSON));
216 HttpHeaders headersMap = new HttpHeaders();
218 headersMap.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
219 headersMap.setContentType(MediaType.APPLICATION_JSON);
220 headersMap.add("Real-Time", "true");
221 headersMap.add("X-FromAppId", "JUNIT");
222 headersMap.add("X-TransactionId", "JUNIT");
224 HttpEntity httpEntity = new HttpEntity(headers);
226 ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
228 // mockRestServiceServer.verify();
229 return responseEntity;
233 public ResponseEntity executeResource(String uri, HttpMethod method, Map<String, String> headers, String body) {
235 String url = "https://localhost:8447/aai/v14/" + uri;
238 * MockRestServiceServer server = MockRestServiceServer
239 * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
241 * server.expect(MockRestRequestMatchers.requestTo(url))
242 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
245 // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
246 // when(mockBuilder.build()).thenReturn(restTemplate);
249 * MockRestServiceServer server = MockRestServiceServer.createServer(restTemplate);
250 * server.expect(requestTo(url))
251 * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
252 * return new ResponseEntity("blah", HttpStatus.OK);
253 * server.expect(ExpectedCount.manyTimes(), requestTo(Matchers.startsWith(aaiBaseUrl +
254 * aaiRequests.get(i).get("aai-uri").asText())))
255 * .andExpect(method(HttpMethod.GET))
256 * .andExpect(content().contentType(MediaType.APPLICATION_JSON))
257 * .andRespond(withStatus(HttpStatus.OK).body(aaiResponses.get(i).toString()).contentType(MediaType.
258 * APPLICATION_JSON));
261 HttpHeaders headersMap = new HttpHeaders();
263 headersMap.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
264 headersMap.setContentType(MediaType.APPLICATION_JSON);
265 headersMap.add("Real-Time", "true");
266 headersMap.add("X-FromAppId", "JUNIT");
267 headersMap.add("X-TransactionId", "JUNIT");
269 HttpEntity httpEntity = new HttpEntity(headers);
271 ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, Resource.class);
273 // mockRestServiceServer.verify();
274 return responseEntity;
278 public RestTemplate getRestTemplate() {
279 RestTemplate restTemplate = null;
283 public String getBaseUrl() {
287 protected MultiValueMap<String, String> getHeaders(Map<String, String> headers) {
291 protected EELFLogger getLogger() {