Affects: spring-test:5.3.23

I wanted to test how the service reacts on unknown HTTP response codes like 222. So I created a service that responds with HTTP status 222 and tried to test it:

@SpringBootTest
class ResponseTest {

  @Autowired
  org.springframework.test.web.reactive.server.WebTestClient client;

  @Test
  void test222() {
    client.method(HttpMethod.GET).uri("/").exchange().expectStatus().isEqualTo(222);
  }
}

The result was an Exception with Stack Trace:

java.lang.IllegalArgumentException: No matching constant for [222]
    at org.springframework.http.HttpStatus.valueOf(HttpStatus.java:547)
    at org.springframework.http.client.reactive.ReactorClientHttpResponse.getStatusCode(ReactorClientHttpResponse.java:139)
    at org.springframework.http.client.reactive.ClientHttpResponseDecorator.getStatusCode(ClientHttpResponseDecorator.java:60)
    at org.springframework.test.web.reactive.server.ExchangeResult.getStatus(ExchangeResult.java:176)
    at org.springframework.test.web.reactive.server.ExchangeResult.toString(ExchangeResult.java:251)
    at java.base/java.lang.String.valueOf(String.java:4218)
    at java.base/java.lang.StringBuilder.append(StringBuilder.java:173)
    at org.springframework.test.web.reactive.server.ExchangeResult.assertWithDiagnostics(ExchangeResult.java:236)
    at org.springframework.test.web.reactive.server.DefaultWebTestClient$DefaultBodySpec.isEqualTo(DefaultWebTestClient.java:554)
    at de.gdvdl.tgic.tgicwebauth.routes.WebapiTest.test222(ResponseTest:xyz)

The issue seems to be at org.springframework.test.web.reactive.server.ExchangeResult.toString(), which assumes that getStatus() is always available:

"< " + getStatus() + " " + getStatus().getReasonPhrase() + "\n" +

So the line could be something like this:

"< " + getRawStatusCode() + " " + tryToGet(() -> getStatus().getReasonPhrase()) + "\n" +

with

String tryToGet(Supplier<String> func) {
  try {
    return func.get()
  } catch (RuntimeException e) {
    return "";
  }
}

Comment From: sbrannen

Hi @robert-gdv,

Congratulations on creating your first bug report for the Spring Framework! 👍

And thanks for bringing this to our attention.

This has been fixed in 5.3.x for inclusion in 5.3.24.