Commit Graph

1133 Commits

Author SHA1 Message Date
igor-suhorukov
2be4985b8f Polish: anonymous inner classes containing only one method should become lambdas,
use getOrDefault instead of ternary operator
2018-02-16 09:38:19 +01:00
igor-suhorukov
45e520ed86 Polish: remove unused private fields, remove empty operator 2018-02-13 23:00:18 +01:00
Juergen Hoeller
39201adca4 Consistent handling of InterruptedException
Issue: SPR-16479
2018-02-10 13:03:33 +01:00
igor-suhorukov
9a6fbf59c5 Polish: follow name convention - make immutable fields final 2018-02-10 12:09:19 +01:00
Stephane Nicoll
991eb4858e Update copyright header 2018-02-09 10:16:58 +01:00
igor-suhorukov
e381514b07 Collection.isEmpty() should be used to test for emptiness
Closes gh-1670
2018-02-09 10:11:44 +01:00
Rossen Stoyanchev
f20eacdb9b Polish 2018-02-02 15:06:59 -05:00
Rob Winch
0cd427bdd3 MockHttpServletRequestBuilder decodes pathInfo
Previously MockHttpServletRequestBuilder calculated the pathInfo from the
provided URL without decoding the value. This meant that the pathInfo
incorrectly included URL encoded values.

Now MockHttpServletRequestBuilder properly decodes the pathInfo.

Fixes: SPR-16453
2018-02-02 15:00:47 -05:00
Juergen Hoeller
b3e21ec737 MockHttpServletRequest leniently handles invalid Accept-Language header
Issue: SPR-16454
2018-02-02 11:34:22 +01:00
Rossen Stoyanchev
6d909b013e Do not commit response on access to content
MockHttpServletResponse no longer calls flushBuffer on calls to
getContentAsByteArray and getContentAsString. The flushing doesn't
actually do anything useful but does commit the response leading to
unexpected side effects.

Issue: SPR-16430
2018-01-30 16:19:08 -05:00
Sam Brannen
b612f53e27 Rename doesExist() to exists() for header assertions 2018-01-26 17:24:54 +01:00
Juergen Hoeller
c6b0d85a7c Consistent available() support in DelegatingServletInputStream
Issue: SPR-16416
2018-01-25 19:06:20 +01:00
Ketan Padegaonkar
a0c9fdba12 Fix DelegatingServletInputStream#available
Ensure that the method returns the correct number of bytes that can be
read without blocking

Issue: #SPR-16416
2018-01-25 18:02:59 +01:00
Sam Brannen
165ca12e6d Add doesExist() to HeaderAssertions for WebTestClient 2018-01-25 15:50:19 +01:00
Rossen Stoyanchev
49f1aa78eb Polish 2018-01-24 17:37:49 -05:00
Neonailol
81ca1f7c2b Add doesExist assertion method to HeaderResultMatchers 2018-01-24 17:28:46 -05:00
Juergen Hoeller
61579ffe7b Polishing 2018-01-22 21:34:44 +01:00
Juergen Hoeller
9d0e62ef68 Javadoc format and related polishing 2018-01-22 11:43:21 +01:00
Juergen Hoeller
40127bd9ad Polishing 2018-01-19 12:30:10 +01:00
Rossen Stoyanchev
0c289283ff Separate from expectations from response creation
This commit separates the creation of a response so that it is executed
after the synchronized block inside which requests need to be matched
and validated (for order and count).

This allows a ResponseCreator to be slow or block if it has to.

Issue: SPR-16319
2018-01-17 13:01:40 -05:00
Rossen Stoyanchev
7ab4d0ca08 Polish MockRestServiceServer code 2018-01-17 13:01:40 -05:00
Juergen Hoeller
214576673a Proper NoClassDefFoundError check against BeanUtils.instantiateClass
Issue: SPR-16369
2018-01-17 18:29:05 +01:00
Juergen Hoeller
a15975d94d Log non-loadable TestExecutionListener classes at debug level only
Issue: SPR-16369
2018-01-12 16:47:46 +01:00
Juergen Hoeller
4a57e26d76 Polishing 2018-01-07 23:33:35 +01:00
Rossen Stoyanchev
0f1f95e090 Add hasJsonPath/doesNotHaveJsonPath assertion options
Issue: SPR-16339
2018-01-03 20:27:09 -05:00
Brian Clozel
6e587d5c57 Add new WebTestClient header assertions
This commit adds new header assertions for `WebTestClient`.

`doesNotExist` tests that a given header is not present:

    .expectHeader().doesNotExist("Cache-Control");

`contentTypeCompatibleWith` tests for MediaType compatibility:

    .expectHeader().contentTypeCompatibleWith("text/*");

Issue: SPR-16285
2017-12-21 20:34:24 +01:00
Rossen Stoyanchev
a8cf275aed MockServerHttpRequest builder supports query params
Issue: SPR-16280
2017-12-19 15:38:12 -05:00
Rossen Stoyanchev
6df1a7874a MockHttpServletResponse uses correct language header
Issue: SPR-16311
2017-12-19 13:56:16 -05:00
Rossen Stoyanchev
87375fe6f8 ServerHttpRequest exposes SSL certificates
Issue: SPR-15964
2017-11-10 16:43:12 -05:00
Rossen Stoyanchev
263da1535b WebTestClient can be configured with connector
Issue: SPR-16168
2017-11-07 13:01:12 -05:00
Rossen Stoyanchev
14f02d7192 Update reference with examples of multipart requests
Issue: SPR-16118
2017-11-06 16:33:58 -05:00
Juergen Hoeller
4ec60f08ad PrintingResultHandler defensively accesses session.getAttributeNames()
Issue: SPR-16164
2017-11-06 21:19:44 +01:00
Juergen Hoeller
e5c1deea63 Polishing 2017-11-05 16:23:30 +01:00
Juergen Hoeller
80a0cf71f4 MockHttpServletResponse.getDateHeader returns -1 for non-existent header
Includes consistent getDateHeader results in both MockHttpServletResponse variants (spring-test and spring-web)

Issue: SPR-16160
2017-11-05 16:12:21 +01:00
Juergen Hoeller
0edf4d6509 MockHttpServletRequest.getRequestURL aligns with getServerName/Port
Issue: SPR-16138
2017-11-05 16:11:21 +01:00
Rossen Stoyanchev
579328bd7a MockClientHttpRequest|Response support cookie headers
Issue: SPR-16124
2017-10-31 12:08:18 -04:00
Juergen Hoeller
295e3b6a99 MockRestServiceServer test for follow-up request after failure
Issue: SPR-16132
2017-10-30 16:40:20 +01:00
Eric Pabst
43d88e4a25 Move requests.add(request) into finally block.
This avoids "IllegalStateException: Expectations already declared" when
a MockRestServiceServer is used after one request throws an exception.

Issues: SPR-16132
2017-10-30 08:53:13 -06:00
Juergen Hoeller
70ed45020b Add StatusAssertions.isForbidden
Includes aligned quoting for header assertion messages.
Also aligns HeaderAssertionTests class name.

Issue: SPR-16129
2017-10-29 09:51:25 +01:00
Sebastien Deleuze
b9a0e6bbf2 Update documentation about WebTestClient Kotlin issue
Issue: SPR-16057
2017-10-27 13:52:51 +02:00
Rossen Stoyanchev
a982123ed5 Decouple ExchangeResult from WiretapRequest/Response
This commit decouples ExchangeResult from knowledge about
WiretapClientHttpRequest/Response both of which are now private to
WiretapConnector.

ExchangeResult takes ClientHttpRequest/Response instead along with
promises for the serialized request and response content in the form
of MonoProcessor<byte[]>.

This sets up the possibility for an ExchangeResult to be created
outside and independent of WebTestClient, should we decide to make its
constructor public.

Issue: SPR-16101
2017-10-25 17:41:46 -04:00
Rossen Stoyanchev
cd634633d8 MockMvc re-uses response instance on async dispatch
MockMvc now properly detects the presence of an AsyncContext and
re-uses the response instance used to start it.

This commit also includes a minor fix in
ResponseBodyEmitterReturnValueHandler to ensure it does not disable
ETag related content buffering for reactive return values that do not
result in streaming (e.g. single value or collections).

Issue: SPR-16067
2017-10-17 16:57:35 -04:00
Rossen Stoyanchev
94c4a7f941 Shortcut factory method in MockServerWebExchange
MockServerWebExchange now has a second factory method that accepts a
MockServerHttpRequest.BaseBuilder.

Issue: SPR-16079
2017-10-17 12:23:12 -04:00
Arjen Poutsma
24ca8ccf5a WebTestClient.mutate() should not impact future .mutate() invocations
Issue: SPR-16059
2017-10-13 16:54:30 +02:00
Sam Brannen
ef0e4dc56a Delete unused import 2017-10-12 17:31:10 +02:00
Rossen Stoyanchev
d04d4bfb4d Better "no content" support and polish in WebTestClient
The WebTestClient now takes advantage of the support for decoding
response to Void.class in WebClient so that applications can use
expectBody(Void.class) to the same effect as using
response.bodyToMono(Void.class) as documneted on WebClient#exchange.

The top-level, no-arg returnResult method (added very recently) has been
retracted, since the use of returnResult at that level, i.e. without
consuming the response content, should be used mainly for streaming.
It shouldn't be used for "no content" scenarios.

Documentation and Javadoc have been udpated accordingly.
2017-10-04 15:05:25 -04:00
Rossen Stoyanchev
decb6329db DefaultWebTestClient internal refactoring
Use the ClientResponse methods bodyToMono and bodyToFlux rather than
passing in a BodyExtractor so that WebTestclient now also benefits from
the recently improved handling of Void.class.
2017-10-04 15:05:25 -04:00
Rossen Stoyanchev
48c41049b1 Correct package for MockServerWebExchange
Discovered late, but not too late. MockServerWebExchange is now in the
proper package matching to the location of ServerWebExchange.
2017-09-29 17:03:23 -04:00
Rossen Stoyanchev
223e27d53d Package private request and response implementations
Concrete server and client, reactive request and response
implementations should not have to be accessed outside their package.
They could be seen as private to their HttpHandler adapters and
ClientHttpConnector's respectively.

The one exception, WebSocket upgrades in spring-webflux, is an internal
framework use case, accommodated via downcast + accessors in the
abstract base classes.
2017-09-29 13:04:03 -04:00
Brian Clozel
126ac849e5 Fix behavior of ClientResponse#bodyTo** with Void
Prior to this commit, asking for a `Void` type using any of the
`ClientResponse#bodyTo*` methods would immediately return an empty
`Publisher` without consuming the response body.

Not doing so can lead to HTTP connection pool inconsistencies and/or
memory leaks, since:

* a connection that still has a response body being written to it cannot
be properly recycled in the connection pool
* incoming `DataBuffer` might not be released

This commit detects when `Void` types are asked as body types and in
those cases does the following:

1. Subscribe to the response body `Publisher` to allow the connection to
be returned to the connection pool
2. `cancel()` the body `Publisher` if the response body is not empty; in
that case, we choose to close the connection vs. consume the whole
response body

Those changes imply that `ClientHttpResponse` and other related
contracts don't need a `close()` method anymore.

Issue: SPR-16018
2017-09-28 00:58:38 +02:00