PageRenderTime 50ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/projects/springframework-3.0.5/projects/org.springframework.web/src/test/java/org/springframework/web/client/RestTemplateTests.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 633 lines | 503 code | 111 blank | 19 comment | 0 complexity | cf386a32a45accba52c9e2df307633e8 MD5 | raw file
  1. /*
  2. * Copyright 2002-2010 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.springframework.web.client;
  17. import java.io.IOException;
  18. import java.net.URI;
  19. import java.util.Collections;
  20. import java.util.EnumSet;
  21. import java.util.HashMap;
  22. import java.util.Map;
  23. import java.util.Set;
  24. import static org.easymock.EasyMock.*;
  25. import static org.junit.Assert.*;
  26. import org.junit.Before;
  27. import org.junit.Test;
  28. import org.springframework.http.HttpEntity;
  29. import org.springframework.http.HttpHeaders;
  30. import org.springframework.http.HttpMethod;
  31. import org.springframework.http.HttpStatus;
  32. import org.springframework.http.MediaType;
  33. import org.springframework.http.ResponseEntity;
  34. import org.springframework.http.client.ClientHttpRequest;
  35. import org.springframework.http.client.ClientHttpRequestFactory;
  36. import org.springframework.http.client.ClientHttpResponse;
  37. import org.springframework.http.converter.HttpMessageConverter;
  38. /** @author Arjen Poutsma */
  39. @SuppressWarnings("unchecked")
  40. public class RestTemplateTests {
  41. private RestTemplate template;
  42. private ClientHttpRequestFactory requestFactory;
  43. private ClientHttpRequest request;
  44. private ClientHttpResponse response;
  45. private ResponseErrorHandler errorHandler;
  46. private HttpMessageConverter converter;
  47. @Before
  48. public void setUp() {
  49. requestFactory = createMock(ClientHttpRequestFactory.class);
  50. request = createMock(ClientHttpRequest.class);
  51. response = createMock(ClientHttpResponse.class);
  52. errorHandler = createMock(ResponseErrorHandler.class);
  53. converter = createMock(HttpMessageConverter.class);
  54. template = new RestTemplate(requestFactory);
  55. template.setErrorHandler(errorHandler);
  56. template.setMessageConverters(Collections.<HttpMessageConverter<?>>singletonList(converter));
  57. }
  58. @Test
  59. public void varArgsTemplateVariables() throws Exception {
  60. expect(requestFactory.createRequest(new URI("http://example.com/hotels/42/bookings/21"), HttpMethod.GET))
  61. .andReturn(request);
  62. expect(request.execute()).andReturn(response);
  63. expect(errorHandler.hasError(response)).andReturn(false);
  64. response.close();
  65. replayMocks();
  66. template.execute("http://example.com/hotels/{hotel}/bookings/{booking}", HttpMethod.GET, null, null, "42",
  67. "21");
  68. verifyMocks();
  69. }
  70. @Test
  71. public void varArgsNullTemplateVariable() throws Exception {
  72. expect(requestFactory.createRequest(new URI("http://example.com/-foo"), HttpMethod.GET))
  73. .andReturn(request);
  74. expect(request.execute()).andReturn(response);
  75. expect(errorHandler.hasError(response)).andReturn(false);
  76. response.close();
  77. replayMocks();
  78. template.execute("http://example.com/{first}-{last}", HttpMethod.GET, null, null, null, "foo");
  79. verifyMocks();
  80. }
  81. @Test
  82. public void mapTemplateVariables() throws Exception {
  83. expect(requestFactory.createRequest(new URI("http://example.com/hotels/42/bookings/42"), HttpMethod.GET))
  84. .andReturn(request);
  85. expect(request.execute()).andReturn(response);
  86. expect(errorHandler.hasError(response)).andReturn(false);
  87. response.close();
  88. replayMocks();
  89. Map<String, String> vars = Collections.singletonMap("hotel", "42");
  90. template.execute("http://example.com/hotels/{hotel}/bookings/{hotel}", HttpMethod.GET, null, null, vars);
  91. verifyMocks();
  92. }
  93. @Test
  94. public void mapNullTemplateVariable() throws Exception {
  95. expect(requestFactory.createRequest(new URI("http://example.com/-foo"), HttpMethod.GET))
  96. .andReturn(request);
  97. expect(request.execute()).andReturn(response);
  98. expect(errorHandler.hasError(response)).andReturn(false);
  99. response.close();
  100. replayMocks();
  101. Map<String, String> vars = new HashMap<String, String>(2);
  102. vars.put("first", null);
  103. vars.put("last", "foo");
  104. template.execute("http://example.com/{first}-{last}", HttpMethod.GET, null, null, vars);
  105. verifyMocks();
  106. }
  107. @Test
  108. public void errorHandling() throws Exception {
  109. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.GET)).andReturn(request);
  110. expect(request.execute()).andReturn(response);
  111. expect(errorHandler.hasError(response)).andReturn(true);
  112. expect(response.getStatusCode()).andReturn(HttpStatus.INTERNAL_SERVER_ERROR);
  113. expect(response.getStatusText()).andReturn("Internal Server Error");
  114. errorHandler.handleError(response);
  115. expectLastCall().andThrow(new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR));
  116. response.close();
  117. replayMocks();
  118. try {
  119. template.execute("http://example.com", HttpMethod.GET, null, null);
  120. fail("HttpServerErrorException expected");
  121. }
  122. catch (HttpServerErrorException ex) {
  123. // expected
  124. }
  125. verifyMocks();
  126. }
  127. @Test
  128. public void getForObject() throws Exception {
  129. expect(converter.canRead(String.class, null)).andReturn(true);
  130. MediaType textPlain = new MediaType("text", "plain");
  131. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  132. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.GET)).andReturn(request);
  133. HttpHeaders requestHeaders = new HttpHeaders();
  134. expect(request.getHeaders()).andReturn(requestHeaders);
  135. expect(request.execute()).andReturn(response);
  136. expect(errorHandler.hasError(response)).andReturn(false);
  137. HttpHeaders responseHeaders = new HttpHeaders();
  138. responseHeaders.setContentType(textPlain);
  139. expect(response.getHeaders()).andReturn(responseHeaders);
  140. expect(converter.canRead(String.class, textPlain)).andReturn(true);
  141. String expected = "Hello World";
  142. expect(converter.read(String.class, response)).andReturn(expected);
  143. response.close();
  144. replayMocks();
  145. String result = template.getForObject("http://example.com", String.class);
  146. assertEquals("Invalid GET result", expected, result);
  147. assertEquals("Invalid Accept header", textPlain.toString(), requestHeaders.getFirst("Accept"));
  148. verifyMocks();
  149. }
  150. @Test
  151. public void getUnsupportedMediaType() throws Exception {
  152. expect(converter.canRead(String.class, null)).andReturn(true);
  153. MediaType supportedMediaType = new MediaType("foo", "bar");
  154. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(supportedMediaType));
  155. expect(requestFactory.createRequest(new URI("http://example.com/resource"), HttpMethod.GET)).andReturn(request);
  156. HttpHeaders requestHeaders = new HttpHeaders();
  157. expect(request.getHeaders()).andReturn(requestHeaders);
  158. expect(request.execute()).andReturn(response);
  159. expect(errorHandler.hasError(response)).andReturn(false);
  160. HttpHeaders responseHeaders = new HttpHeaders();
  161. MediaType contentType = new MediaType("bar", "baz");
  162. responseHeaders.setContentType(contentType);
  163. expect(response.getHeaders()).andReturn(responseHeaders);
  164. expect(converter.canRead(String.class, contentType)).andReturn(false);
  165. response.close();
  166. replayMocks();
  167. try {
  168. template.getForObject("http://example.com/{p}", String.class, "resource");
  169. fail("UnsupportedMediaTypeException expected");
  170. }
  171. catch (RestClientException ex) {
  172. // expected
  173. }
  174. verifyMocks();
  175. }
  176. @Test
  177. public void getForEntity() throws Exception {
  178. expect(converter.canRead(String.class, null)).andReturn(true);
  179. MediaType textPlain = new MediaType("text", "plain");
  180. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  181. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.GET)).andReturn(request);
  182. HttpHeaders requestHeaders = new HttpHeaders();
  183. expect(request.getHeaders()).andReturn(requestHeaders);
  184. expect(request.execute()).andReturn(response);
  185. expect(errorHandler.hasError(response)).andReturn(false);
  186. HttpHeaders responseHeaders = new HttpHeaders();
  187. responseHeaders.setContentType(textPlain);
  188. expect(response.getHeaders()).andReturn(responseHeaders).times(2);
  189. expect(converter.canRead(String.class, textPlain)).andReturn(true);
  190. String expected = "Hello World";
  191. expect(converter.read(String.class, response)).andReturn(expected);
  192. expect(response.getStatusCode()).andReturn(HttpStatus.OK);
  193. response.close();
  194. replayMocks();
  195. ResponseEntity<String> result = template.getForEntity("http://example.com", String.class);
  196. assertEquals("Invalid GET result", expected, result.getBody());
  197. assertEquals("Invalid Accept header", textPlain.toString(), requestHeaders.getFirst("Accept"));
  198. assertEquals("Invalid Content-Type header", textPlain, result.getHeaders().getContentType());
  199. assertEquals("Invalid status code", HttpStatus.OK, result.getStatusCode());
  200. verifyMocks();
  201. }
  202. @Test
  203. public void headForHeaders() throws Exception {
  204. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.HEAD)).andReturn(request);
  205. expect(request.execute()).andReturn(response);
  206. expect(errorHandler.hasError(response)).andReturn(false);
  207. HttpHeaders responseHeaders = new HttpHeaders();
  208. expect(response.getHeaders()).andReturn(responseHeaders);
  209. response.close();
  210. replayMocks();
  211. HttpHeaders result = template.headForHeaders("http://example.com");
  212. assertSame("Invalid headers returned", responseHeaders, result);
  213. verifyMocks();
  214. }
  215. @Test
  216. public void postForLocation() throws Exception {
  217. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  218. String helloWorld = "Hello World";
  219. expect(converter.canWrite(String.class, null)).andReturn(true);
  220. converter.write(helloWorld, null, request);
  221. expect(request.execute()).andReturn(response);
  222. expect(errorHandler.hasError(response)).andReturn(false);
  223. HttpHeaders responseHeaders = new HttpHeaders();
  224. URI expected = new URI("http://example.com/hotels");
  225. responseHeaders.setLocation(expected);
  226. expect(response.getHeaders()).andReturn(responseHeaders);
  227. response.close();
  228. replayMocks();
  229. URI result = template.postForLocation("http://example.com", helloWorld);
  230. assertEquals("Invalid POST result", expected, result);
  231. verifyMocks();
  232. }
  233. @Test
  234. public void postForLocationEntityContentType() throws Exception {
  235. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  236. String helloWorld = "Hello World";
  237. MediaType contentType = MediaType.TEXT_PLAIN;
  238. expect(converter.canWrite(String.class, contentType)).andReturn(true);
  239. HttpHeaders requestHeaders = new HttpHeaders();
  240. expect(request.getHeaders()).andReturn(requestHeaders);
  241. converter.write(helloWorld, contentType, request);
  242. expect(request.execute()).andReturn(response);
  243. expect(errorHandler.hasError(response)).andReturn(false);
  244. HttpHeaders responseHeaders = new HttpHeaders();
  245. URI expected = new URI("http://example.com/hotels");
  246. responseHeaders.setLocation(expected);
  247. expect(response.getHeaders()).andReturn(responseHeaders);
  248. response.close();
  249. replayMocks();
  250. HttpHeaders entityHeaders = new HttpHeaders();
  251. entityHeaders.setContentType(contentType);
  252. HttpEntity<String> entity = new HttpEntity<String>(helloWorld, entityHeaders);
  253. URI result = template.postForLocation("http://example.com", entity);
  254. assertEquals("Invalid POST result", expected, result);
  255. verifyMocks();
  256. }
  257. @Test
  258. public void postForLocationEntityCustomHeader() throws Exception {
  259. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  260. String helloWorld = "Hello World";
  261. expect(converter.canWrite(String.class, null)).andReturn(true);
  262. HttpHeaders requestHeaders = new HttpHeaders();
  263. expect(request.getHeaders()).andReturn(requestHeaders);
  264. converter.write(helloWorld, null, request);
  265. expect(request.execute()).andReturn(response);
  266. expect(errorHandler.hasError(response)).andReturn(false);
  267. HttpHeaders responseHeaders = new HttpHeaders();
  268. URI expected = new URI("http://example.com/hotels");
  269. responseHeaders.setLocation(expected);
  270. expect(response.getHeaders()).andReturn(responseHeaders);
  271. response.close();
  272. replayMocks();
  273. HttpHeaders entityHeaders = new HttpHeaders();
  274. entityHeaders.set("MyHeader", "MyValue");
  275. HttpEntity<String> entity = new HttpEntity<String>(helloWorld, entityHeaders);
  276. URI result = template.postForLocation("http://example.com", entity);
  277. assertEquals("Invalid POST result", expected, result);
  278. assertEquals("No custom header set", "MyValue", requestHeaders.getFirst("MyHeader"));
  279. verifyMocks();
  280. }
  281. @Test
  282. public void postForLocationNoLocation() throws Exception {
  283. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  284. String helloWorld = "Hello World";
  285. expect(converter.canWrite(String.class, null)).andReturn(true);
  286. converter.write(helloWorld, null, request);
  287. expect(request.execute()).andReturn(response);
  288. expect(errorHandler.hasError(response)).andReturn(false);
  289. HttpHeaders responseHeaders = new HttpHeaders();
  290. expect(response.getHeaders()).andReturn(responseHeaders);
  291. response.close();
  292. replayMocks();
  293. URI result = template.postForLocation("http://example.com", helloWorld);
  294. assertNull("Invalid POST result", result);
  295. verifyMocks();
  296. }
  297. @Test
  298. public void postForLocationNull() throws Exception {
  299. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  300. HttpHeaders requestHeaders = new HttpHeaders();
  301. expect(request.getHeaders()).andReturn(requestHeaders);
  302. expect(request.execute()).andReturn(response);
  303. expect(errorHandler.hasError(response)).andReturn(false);
  304. HttpHeaders responseHeaders = new HttpHeaders();
  305. expect(response.getHeaders()).andReturn(responseHeaders);
  306. response.close();
  307. replayMocks();
  308. template.postForLocation("http://example.com", null);
  309. assertEquals("Invalid content length", 0, requestHeaders.getContentLength());
  310. verifyMocks();
  311. }
  312. @Test
  313. public void postForObject() throws Exception {
  314. MediaType textPlain = new MediaType("text", "plain");
  315. expect(converter.canRead(Integer.class, null)).andReturn(true);
  316. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  317. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(this.request);
  318. HttpHeaders requestHeaders = new HttpHeaders();
  319. expect(this.request.getHeaders()).andReturn(requestHeaders);
  320. String request = "Hello World";
  321. expect(converter.canWrite(String.class, null)).andReturn(true);
  322. converter.write(request, null, this.request);
  323. expect(this.request.execute()).andReturn(response);
  324. expect(errorHandler.hasError(response)).andReturn(false);
  325. HttpHeaders responseHeaders = new HttpHeaders();
  326. responseHeaders.setContentType(textPlain);
  327. expect(response.getHeaders()).andReturn(responseHeaders);
  328. Integer expected = 42;
  329. expect(converter.canRead(Integer.class, textPlain)).andReturn(true);
  330. expect(converter.read(Integer.class, response)).andReturn(expected);
  331. response.close();
  332. replayMocks();
  333. Integer result = template.postForObject("http://example.com", request, Integer.class);
  334. assertEquals("Invalid POST result", expected, result);
  335. assertEquals("Invalid Accept header", textPlain.toString(), requestHeaders.getFirst("Accept"));
  336. verifyMocks();
  337. }
  338. @Test
  339. public void postForEntity() throws Exception {
  340. MediaType textPlain = new MediaType("text", "plain");
  341. expect(converter.canRead(Integer.class, null)).andReturn(true);
  342. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  343. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(this.request);
  344. HttpHeaders requestHeaders = new HttpHeaders();
  345. expect(this.request.getHeaders()).andReturn(requestHeaders);
  346. String request = "Hello World";
  347. expect(converter.canWrite(String.class, null)).andReturn(true);
  348. converter.write(request, null, this.request);
  349. expect(this.request.execute()).andReturn(response);
  350. expect(errorHandler.hasError(response)).andReturn(false);
  351. HttpHeaders responseHeaders = new HttpHeaders();
  352. responseHeaders.setContentType(textPlain);
  353. expect(response.getHeaders()).andReturn(responseHeaders).times(2);
  354. Integer expected = 42;
  355. expect(converter.canRead(Integer.class, textPlain)).andReturn(true);
  356. expect(converter.read(Integer.class, response)).andReturn(expected);
  357. expect(response.getStatusCode()).andReturn(HttpStatus.OK);
  358. response.close();
  359. replayMocks();
  360. ResponseEntity<Integer> result = template.postForEntity("http://example.com", request, Integer.class);
  361. assertEquals("Invalid POST result", expected, result.getBody());
  362. assertEquals("Invalid Content-Type", textPlain, result.getHeaders().getContentType());
  363. assertEquals("Invalid Accept header", textPlain.toString(), requestHeaders.getFirst("Accept"));
  364. assertEquals("Invalid status code", HttpStatus.OK, result.getStatusCode());
  365. verifyMocks();
  366. }
  367. @Test
  368. public void postForObjectNull() throws Exception {
  369. MediaType textPlain = new MediaType("text", "plain");
  370. expect(converter.canRead(Integer.class, null)).andReturn(true);
  371. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  372. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  373. HttpHeaders requestHeaders = new HttpHeaders();
  374. expect(request.getHeaders()).andReturn(requestHeaders).times(2);
  375. expect(request.execute()).andReturn(response);
  376. expect(errorHandler.hasError(response)).andReturn(false);
  377. HttpHeaders responseHeaders = new HttpHeaders();
  378. responseHeaders.setContentType(textPlain);
  379. expect(response.getHeaders()).andReturn(responseHeaders);
  380. expect(converter.canRead(Integer.class, textPlain)).andReturn(true);
  381. expect(converter.read(Integer.class, response)).andReturn(null);
  382. response.close();
  383. replayMocks();
  384. Integer result = template.postForObject("http://example.com", null, Integer.class);
  385. assertNull("Invalid POST result", result);
  386. assertEquals("Invalid content length", 0, requestHeaders.getContentLength());
  387. verifyMocks();
  388. }
  389. @Test
  390. public void postForEntityNull() throws Exception {
  391. MediaType textPlain = new MediaType("text", "plain");
  392. expect(converter.canRead(Integer.class, null)).andReturn(true);
  393. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  394. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(request);
  395. HttpHeaders requestHeaders = new HttpHeaders();
  396. expect(request.getHeaders()).andReturn(requestHeaders).times(2);
  397. expect(request.execute()).andReturn(response);
  398. expect(errorHandler.hasError(response)).andReturn(false);
  399. HttpHeaders responseHeaders = new HttpHeaders();
  400. responseHeaders.setContentType(textPlain);
  401. expect(response.getHeaders()).andReturn(responseHeaders).times(2);
  402. expect(converter.canRead(Integer.class, textPlain)).andReturn(true);
  403. expect(converter.read(Integer.class, response)).andReturn(null);
  404. expect(response.getStatusCode()).andReturn(HttpStatus.OK);
  405. response.close();
  406. replayMocks();
  407. ResponseEntity<Integer> result = template.postForEntity("http://example.com", null, Integer.class);
  408. assertFalse("Invalid POST result", result.hasBody());
  409. assertEquals("Invalid Content-Type", textPlain, result.getHeaders().getContentType());
  410. assertEquals("Invalid content length", 0, requestHeaders.getContentLength());
  411. assertEquals("Invalid status code", HttpStatus.OK, result.getStatusCode());
  412. verifyMocks();
  413. }
  414. @Test
  415. public void put() throws Exception {
  416. expect(converter.canWrite(String.class, null)).andReturn(true);
  417. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.PUT)).andReturn(request);
  418. String helloWorld = "Hello World";
  419. converter.write(helloWorld, null, request);
  420. expect(request.execute()).andReturn(response);
  421. expect(errorHandler.hasError(response)).andReturn(false);
  422. response.close();
  423. replayMocks();
  424. template.put("http://example.com", helloWorld);
  425. verifyMocks();
  426. }
  427. @Test
  428. public void putNull() throws Exception {
  429. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.PUT)).andReturn(request);
  430. HttpHeaders requestHeaders = new HttpHeaders();
  431. expect(request.getHeaders()).andReturn(requestHeaders);
  432. expect(request.execute()).andReturn(response);
  433. expect(errorHandler.hasError(response)).andReturn(false);
  434. response.close();
  435. replayMocks();
  436. template.put("http://example.com", null);
  437. assertEquals("Invalid content length", 0, requestHeaders.getContentLength());
  438. verifyMocks();
  439. }
  440. @Test
  441. public void delete() throws Exception {
  442. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.DELETE)).andReturn(request);
  443. expect(request.execute()).andReturn(response);
  444. expect(errorHandler.hasError(response)).andReturn(false);
  445. response.close();
  446. replayMocks();
  447. template.delete("http://example.com");
  448. verifyMocks();
  449. }
  450. @Test
  451. public void optionsForAllow() throws Exception {
  452. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.OPTIONS)).andReturn(request);
  453. expect(request.execute()).andReturn(response);
  454. expect(errorHandler.hasError(response)).andReturn(false);
  455. HttpHeaders responseHeaders = new HttpHeaders();
  456. EnumSet<HttpMethod> expected = EnumSet.of(HttpMethod.GET, HttpMethod.POST);
  457. responseHeaders.setAllow(expected);
  458. expect(response.getHeaders()).andReturn(responseHeaders);
  459. response.close();
  460. replayMocks();
  461. Set<HttpMethod> result = template.optionsForAllow("http://example.com");
  462. assertEquals("Invalid OPTIONS result", expected, result);
  463. verifyMocks();
  464. }
  465. @Test
  466. public void ioException() throws Exception {
  467. expect(converter.canRead(String.class, null)).andReturn(true);
  468. MediaType mediaType = new MediaType("foo", "bar");
  469. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(mediaType));
  470. expect(requestFactory.createRequest(new URI("http://example.com/resource"), HttpMethod.GET)).andReturn(request);
  471. expect(request.getHeaders()).andReturn(new HttpHeaders());
  472. expect(request.execute()).andThrow(new IOException());
  473. replayMocks();
  474. try {
  475. template.getForObject("http://example.com/resource", String.class);
  476. fail("RestClientException expected");
  477. }
  478. catch (ResourceAccessException ex) {
  479. // expected
  480. }
  481. verifyMocks();
  482. }
  483. @Test
  484. public void exchange() throws Exception {
  485. MediaType textPlain = new MediaType("text", "plain");
  486. expect(converter.canRead(Integer.class, null)).andReturn(true);
  487. expect(converter.getSupportedMediaTypes()).andReturn(Collections.singletonList(textPlain));
  488. expect(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).andReturn(this.request);
  489. HttpHeaders requestHeaders = new HttpHeaders();
  490. expect(this.request.getHeaders()).andReturn(requestHeaders).times(2);
  491. expect(converter.canWrite(String.class, null)).andReturn(true);
  492. String body = "Hello World";
  493. converter.write(body, null, this.request);
  494. expect(this.request.execute()).andReturn(response);
  495. expect(errorHandler.hasError(response)).andReturn(false);
  496. HttpHeaders responseHeaders = new HttpHeaders();
  497. responseHeaders.setContentType(textPlain);
  498. expect(response.getHeaders()).andReturn(responseHeaders).times(2);
  499. Integer expected = 42;
  500. expect(converter.canRead(Integer.class, textPlain)).andReturn(true);
  501. expect(converter.read(Integer.class, response)).andReturn(expected);
  502. expect(response.getStatusCode()).andReturn(HttpStatus.OK);
  503. response.close();
  504. replayMocks();
  505. HttpHeaders entityHeaders = new HttpHeaders();
  506. entityHeaders.set("MyHeader", "MyValue");
  507. HttpEntity<String> requestEntity = new HttpEntity<String>(body, entityHeaders);
  508. ResponseEntity<Integer> result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, Integer.class);
  509. assertEquals("Invalid POST result", expected, result.getBody());
  510. assertEquals("Invalid Content-Type", textPlain, result.getHeaders().getContentType());
  511. assertEquals("Invalid Accept header", textPlain.toString(), requestHeaders.getFirst("Accept"));
  512. assertEquals("Invalid custom header", "MyValue", requestHeaders.getFirst("MyHeader"));
  513. assertEquals("Invalid status code", HttpStatus.OK, result.getStatusCode());
  514. verifyMocks();
  515. }
  516. private void replayMocks() {
  517. replay(requestFactory, request, response, errorHandler, converter);
  518. }
  519. private void verifyMocks() {
  520. verify(requestFactory, request, response, errorHandler, converter);
  521. }
  522. }