import org.springframework.cloud.sleuth.util.ExceptionUtils; //导入方法依赖的package包/类
@Ignore("Ignored until fixed in Reactor")
@Test public void should_instrument_web_filter() throws Exception {
ConfigurableApplicationContext context = new SpringApplicationBuilder(TraceWebFluxTests.Config.class)
.web(WebApplicationType.REACTIVE).properties("server.port=0", "spring.jmx.enabled=false",
"spring.application.name=TraceWebFluxTests").run();
ExceptionUtils.setFail(true);
Span span = null;
try {
span = context.getBean(Tracer.class).createSpan("foo");
int port = context.getBean(Environment.class).getProperty("local.server.port", Integer.class);
ArrayListSpanAccumulator accumulator = context.getBean(ArrayListSpanAccumulator.class);
Mono exchange = context.getBean(WebClient.class).get().uri("http://localhost:" + port + "/api/c2/10").exchange();
Awaitility.await().untilAsserted(() -> {
ClientResponse response = exchange.block();
SleuthAssertions.then(response.statusCode().value()).isEqualTo(200);
SleuthAssertions.then(ExceptionUtils.getLastException()).isNull();
SleuthAssertions.then(new ListOfSpans(accumulator.getSpans()))
.hasASpanWithLogEqualTo(Span.CLIENT_SEND)
.hasASpanWithLogEqualTo(Span.SERVER_RECV)
.hasASpanWithLogEqualTo(Span.SERVER_SEND)
.hasASpanWithLogEqualTo(Span.CLIENT_RECV)
.hasASpanWithTagEqualTo("mvc.controller.method", "successful")
.hasASpanWithTagEqualTo("mvc.controller.class", "Controller2");
});
} finally {
context.getBean(Tracer.class).close(span);
}
}