Enhancements for the aai-common library
[aai/aai-common.git] / aai-schema-ingest / src / test / java / org / onap / aai / restclient / MockRestClient.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
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.aai.restclient;
22
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;
26
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;
32
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;
39 import java.util.Map;
40
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;
49
50 @Component
51 public class MockRestClient extends RestClient {
52
53     private RestTemplate restTemplate;
54     private MockRestServiceServer mockRestServiceServer;
55
56     String fileName = "mockrequests";
57
58     public MockRestClient(String fileName) {
59         /*
60          * List<MockRestServiceServer> mockedAAIRequests = new ArrayList<>(aaiRequests.size());
61          */
62         List<MockRestServiceServer> mockedAAIRequests = new ArrayList<>();
63
64         restTemplate = new RestTemplate();
65         /*
66          * MockRestServiceServer server = MockRestServiceServer
67          * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
68          * .build();
69          * server.expect(MockRestRequestMatchers.requestTo(url))
70          * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
71          */
72
73         // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
74         // when(mockBuilder.build()).thenReturn(restTemplate);
75
76         JsonObject payload = null;
77         try {
78             payload = getPayload(fileName + ".json");
79         } catch (IOException e) {
80             e.printStackTrace();
81         }
82
83         JsonArray mockUris = payload.getAsJsonArray("mock-uri");
84
85         mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
86         String url = "https://localhost:8447/aai/v14";
87         /*
88          * mockRestServiceServer.expect(requestTo(url))
89          * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
90          */
91
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();
95
96             String uri = mockUris.get(i).getAsJsonObject().get("aai-uri").getAsString();
97
98             InputStream inputStream = getClass().getClassLoader().getResourceAsStream(responseFile);
99             String responseBody = null;
100             try {
101                 responseBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
102             } catch (IOException e) {
103                 e.printStackTrace();
104             }
105
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)));
110
111         }
112     }
113
114     public MockRestClient() {
115
116         restTemplate = new RestTemplate();
117         /*
118          * MockRestServiceServer server = MockRestServiceServer
119          * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
120          * .build();
121          * server.expect(MockRestRequestMatchers.requestTo(url))
122          * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
123          */
124
125         // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
126         // when(mockBuilder.build()).thenReturn(restTemplate);
127
128         JsonObject payload = null;
129         try {
130             payload = getPayload(fileName + ".json");
131         } catch (IOException e) {
132             e.printStackTrace();
133         }
134
135         JsonArray mockUris = payload.getAsJsonArray("mock-uri");
136
137         mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
138         String url = "https://localhost:8447/aai/v14";
139         /*
140          * mockRestServiceServer.expect(requestTo(url))
141          * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
142          */
143
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();
147
148             String uri = mockUris.get(i).getAsJsonObject().get("aai-uri").getAsString();
149
150             InputStream inputStream = getClass().getClassLoader().getResourceAsStream(responseFile);
151             String responseBody = null;
152             try {
153                 responseBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
154             } catch (IOException e) {
155                 e.printStackTrace();
156             }
157
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)));
162
163         }
164
165     }
166
167     public JsonObject getTestDetails(String fileName) throws IOException {
168
169         JsonObject payload = getPayload(fileName);
170
171         return payload;
172     }
173
174     public JsonObject getPayload(String filename) throws IOException {
175         InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename);
176
177         // InputStream inputStream = new FileInputStream(filename);
178
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);
182
183         JsonParser parser = new JsonParser();
184         JsonObject payload = parser.parse(result).getAsJsonObject();
185         return payload;
186     }
187
188     @Override
189     public ResponseEntity execute(String uri, HttpMethod method, Map<String, String> headers, String body) {
190
191         String url = "https://localhost:8447/aai/v14/" + uri;
192
193         /*
194          * MockRestServiceServer server = MockRestServiceServer
195          * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
196          * .build();
197          * server.expect(MockRestRequestMatchers.requestTo(url))
198          * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
199          */
200
201         // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
202         // when(mockBuilder.build()).thenReturn(restTemplate);
203
204         /*
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));
215          */
216
217         HttpHeaders headersMap = new HttpHeaders();
218
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");
224
225         HttpEntity httpEntity = new HttpEntity(headers);
226
227         ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
228
229         // mockRestServiceServer.verify();
230         return responseEntity;
231     }
232
233     @Override
234     public ResponseEntity executeResource(String uri, HttpMethod method, Map<String, String> headers, String body) {
235
236         String url = "https://localhost:8447/aai/v14/" + uri;
237
238         /*
239          * MockRestServiceServer server = MockRestServiceServer
240          * .bindTo(restClientFactory.getRestClient(ClientType.SchemaService).getRestTemplate())
241          * .build();
242          * server.expect(MockRestRequestMatchers.requestTo(url))
243          * .andRespond(withSuccess("{}", MediaType.APPLICATION_JSON));
244          */
245
246         // RestTemplateBuilder mockBuilder = mock(RestTemplateBuilder.class);
247         // when(mockBuilder.build()).thenReturn(restTemplate);
248
249         /*
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));
260          */
261
262         HttpHeaders headersMap = new HttpHeaders();
263
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");
269
270         HttpEntity httpEntity = new HttpEntity(headers);
271
272         ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, Resource.class);
273
274         // mockRestServiceServer.verify();
275         return responseEntity;
276     }
277
278     @Override
279     public RestTemplate getRestTemplate() {
280         RestTemplate restTemplate = null;
281         return restTemplate;
282     }
283
284     public String getBaseUrl() {
285         return "";
286     }
287
288     protected MultiValueMap<String, String> getHeaders(Map<String, String> headers) {
289         return null;
290     }
291
292     protected Logger getLogger() {
293         return null;
294     }
295
296 }