Skip to content

Commit 42d3428

Browse files
WIP on tests
1 parent 3857ab6 commit 42d3428

File tree

1 file changed

+85
-13
lines changed

1 file changed

+85
-13
lines changed

spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TraceFunctionAroundWrapperTests.java

Lines changed: 85 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@
1717
package org.springframework.cloud.sleuth.instrument.messaging;
1818

1919
import java.util.Collections;
20+
import java.util.List;
21+
import java.util.function.Function;
2022
import java.util.function.Supplier;
2123

2224
import com.fasterxml.jackson.databind.ObjectMapper;
2325
import org.junit.jupiter.api.Test;
26+
import org.mockito.Answers;
27+
import org.mockito.BDDMockito;
2428

2529
import org.springframework.cloud.function.context.FunctionRegistration;
2630
import org.springframework.cloud.function.context.FunctionType;
@@ -29,8 +33,14 @@
2933
import org.springframework.cloud.function.context.config.JsonMessageConverter;
3034
import org.springframework.cloud.function.json.JacksonMapper;
3135
import org.springframework.cloud.sleuth.Span;
36+
import org.springframework.cloud.sleuth.TraceContext;
37+
import org.springframework.cloud.sleuth.Span.Builder;
38+
import org.springframework.cloud.sleuth.propagation.Propagator;
39+
import org.springframework.cloud.sleuth.propagation.Propagator.Getter;
40+
import org.springframework.cloud.sleuth.propagation.Propagator.Setter;
3241
import org.springframework.cloud.sleuth.tracer.SimpleTracer;
3342
import org.springframework.core.convert.support.DefaultConversionService;
43+
import org.springframework.integration.support.MessageBuilder;
3444
import org.springframework.messaging.Message;
3545
import org.springframework.messaging.converter.CompositeMessageConverter;
3646
import org.springframework.mock.env.MockEnvironment;
@@ -39,30 +49,76 @@
3949
import static org.assertj.core.api.BDDAssertions.then;
4050

4151
class TraceFunctionAroundWrapperTests {
42-
43-
@Test
44-
void test_tracing_with_supplier() {
45-
CompositeMessageConverter messageConverter = new CompositeMessageConverter(
46-
Collections.singletonList(new JsonMessageConverter(new JacksonMapper(new ObjectMapper()))));
47-
48-
SimpleTracer tracer = new SimpleTracer();
49-
TraceFunctionAroundWrapper wrapper = new TraceFunctionAroundWrapper(null, tracer, null, null, null) {
52+
53+
CompositeMessageConverter messageConverter = new CompositeMessageConverter(
54+
Collections.singletonList(new JsonMessageConverter(new JacksonMapper(new ObjectMapper()))));
55+
56+
SimpleFunctionRegistry catalog = new SimpleFunctionRegistry(new DefaultConversionService(), messageConverter,
57+
new JacksonMapper(new ObjectMapper()));
58+
59+
SimpleTracer tracer = new SimpleTracer();
60+
61+
MockEnvironment mockEnvironment = mockEnvironment();
62+
63+
TraceFunctionAroundWrapper wrapper = new TraceFunctionAroundWrapper(mockEnvironment, tracer, testPropagator(),
64+
new MessageHeaderPropagatorSetter(), new MessageHeaderPropagatorGetter()) {
65+
@Override
66+
MessageAndSpan getMessageAndSpans(Message<?> resultMessage, String name, Span spanFromMessage) {
67+
return new MessageAndSpan(resultMessage, spanFromMessage);
68+
}
69+
};
70+
71+
/**
72+
* @return
73+
*/
74+
private Propagator testPropagator() {
75+
return new Propagator() {
76+
5077
@Override
51-
MessageAndSpan getMessageAndSpans(Message<?> resultMessage, String name, Span spanFromMessage) {
52-
return new MessageAndSpan(resultMessage, spanFromMessage);
78+
public <C> void inject(TraceContext context, C carrier, Setter<C> setter) {
79+
setter.set(carrier, "superHeader", "test");
80+
}
81+
82+
@Override
83+
public List<String> fields() {
84+
return Collections.singletonList("superHeader");
85+
}
86+
87+
@Override
88+
public <C> Builder extract(C carrier, Getter<C> getter) {
89+
Builder builder = BDDMockito.mock(Builder.class, Answers.RETURNS_SELF);
90+
BDDMockito.given(builder.start()).willReturn(tracer.nextSpan());
91+
return builder;
5392
}
5493
};
55-
94+
}
95+
96+
@Test
97+
void test_tracing_with_supplier() {
5698
FunctionRegistration<Greeter> registration = new FunctionRegistration<>(new Greeter(), "greeter")
5799
.type(FunctionType.of(Greeter.class));
58-
SimpleFunctionRegistry catalog = new SimpleFunctionRegistry(new DefaultConversionService(), messageConverter,
59-
new JacksonMapper(new ObjectMapper()));
60100
catalog.register(registration);
61101
FunctionInvocationWrapper function = catalog.lookup("greeter");
102+
62103
Message<?> result = (Message<?>) wrapper.apply(null, function);
104+
63105
assertThat(result.getPayload()).isEqualTo("hello");
64106
assertThat(tracer.getOnlySpan().name).isEqualTo("greeter");
65107
}
108+
109+
@Test
110+
void test_tracing_with_function() {
111+
FunctionRegistration<GreeterFunction> registration = new FunctionRegistration<>(new GreeterFunction(), "greeter")
112+
.type(FunctionType.of(GreeterFunction.class));
113+
catalog.register(registration);
114+
FunctionInvocationWrapper function = catalog.lookup("greeter");
115+
116+
Message<?> result = (Message<?>) wrapper.apply(MessageBuilder
117+
.withPayload("hello").setHeader("superHeader", "someValue").build(), function);
118+
119+
assertThat(result.getPayload()).isEqualTo("HELLO");
120+
assertThat(tracer.getOnlySpan().name).isEqualTo("greeter");
121+
}
66122

67123
@Test
68124
void should_clear_cache_on_refresh() {
@@ -104,6 +160,13 @@ void should_point_to_proper_destination_when_working_with_remapped_functions() {
104160

105161
assertThat(wrapper.outputDestination("marcin")).isEqualTo("bob");
106162
}
163+
164+
private MockEnvironment mockEnvironment() {
165+
MockEnvironment mockEnvironment = new MockEnvironment();
166+
mockEnvironment.setProperty("spring.cloud.stream.bindings.greeter-in-0.destination", "oleg");
167+
mockEnvironment.setProperty("spring.cloud.stream.bindings.greeter-out-0.destination", "bob");
168+
return mockEnvironment;
169+
}
107170

108171
private static class Greeter implements Supplier<String> {
109172

@@ -113,5 +176,14 @@ public String get() {
113176
}
114177

115178
}
179+
180+
private static class GreeterFunction implements Function<String, String> {
181+
182+
@Override
183+
public String apply(String in) {
184+
return in.toUpperCase();
185+
}
186+
187+
}
116188

117189
}

0 commit comments

Comments
 (0)