WingtipsSpringWebfluxUtils { public static void addTracingInfoToRequestAttributes( @NotNull TracingState tracingState, @NotNull Span overallRequestSpan, @NotNull ServerWebExchange exchange ) { exchange.getAttributes().put(TraceHeaders.TRACE_ID, overallRequestSpan.getTraceId()); exchange.getAttributes().put(TraceHeaders.SPAN_ID, overallRequestSpan.getSpanId()); exchange.getAttributes().put(TracingState.class.getName(), tracingState); } protected  WingtipsSpringWebfluxUtils(); static void addTracingInfoToRequestAttributes(
        @NotNull TracingState tracingState,
        @NotNull Span overallRequestSpan,
        @NotNull ServerWebExchange exchange
    ); static @Nullable TracingState tracingStateFromExchange(@NotNull ServerWebExchange exchange); static @NotNull Context subscriberContextWithTracingInfo(
        @NotNull Context origContext,
        @NotNull TracingState tracingState
    ); static @Nullable TracingState tracingStateFromContext(@NotNull Context context);  }
@Test public void addTracingInfoToRequestAttributes_adds_expected_attributes() { @SuppressWarnings("unchecked") Map<String, Object> attrsMock = mock(Map.class); doReturn(attrsMock).when(exchangeMock).getAttributes(); Span span = Span.newBuilder("foo", Span.SpanPurpose.SERVER).build(); TracingState tracingStateMock = mock(TracingState.class); WingtipsSpringWebfluxUtils.addTracingInfoToRequestAttributes(tracingStateMock, span, exchangeMock); verify(attrsMock).put(TraceHeaders.TRACE_ID, span.getTraceId()); verify(attrsMock).put(TraceHeaders.SPAN_ID, span.getSpanId()); verify(attrsMock).put(TracingState.class.getName(), tracingStateMock); verifyNoMoreInteractions(attrsMock); }