diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcMetricsFilterTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcMetricsFilterTests.java index 7b53c25569..5a084f8cdb 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcMetricsFilterTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcMetricsFilterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 the original author or authors. + * Copyright 2012-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,6 +76,7 @@ import org.springframework.web.context.WebApplicationContext; import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; import org.springframework.web.util.NestedServletException; import static org.assertj.core.api.Assertions.assertThat; @@ -188,6 +189,16 @@ public class WebMvcMetricsFilterTests { .tags("exception", "RuntimeException").timer().count()).isEqualTo(1L); } + @Test + public void streamingError() throws Exception { + MvcResult result = this.mvc.perform(get("/api/c1/streamingError")) + .andExpect(request().asyncStarted()).andReturn(); + assertThatCode( + () -> this.mvc.perform(asyncDispatch(result)).andExpect(status().isOk())); + assertThat(this.registry.get("http.server.requests") + .tags("exception", "IOException").timer().count()).isEqualTo(1L); + } + @Test public void anonymousError() { try { @@ -451,6 +462,14 @@ public class WebMvcMetricsFilterTests { throw new RuntimeException("Boom on " + id + "!"); } + @GetMapping("/streamingError") + public ResponseBodyEmitter streamingError() { + ResponseBodyEmitter emitter = new ResponseBodyEmitter(); + emitter.completeWithError( + new IOException("error while writing to the response")); + return emitter; + } + @Timed @GetMapping("/regex/{id:\\.[a-z]+}") public String successfulRegex(@PathVariable String id) {