Added test for TraceTemplate

This commit is contained in:
Marcin Grzejszczak
2015-12-02 13:38:01 +01:00
parent 74c7ba54d0
commit ad8ba1529f
2 changed files with 44 additions and 6 deletions

View File

@@ -26,22 +26,21 @@ import org.springframework.cloud.sleuth.trace.TraceContextHolder;
*/
public class TraceTemplate implements TraceOperations {
private final TraceManager trace;
private final TraceManager traceManager;
public TraceTemplate(TraceManager trace) {
this.trace = trace;
public TraceTemplate(TraceManager traceManager) {
this.traceManager = traceManager;
}
@Override
public <T> T trace(final TraceCallback<T> callback) {
if (TraceContextHolder.isTracing()) {
DelegateCallback<T> delegate = new DelegateCallback<>(this.trace);
DelegateCallback<T> delegate = new DelegateCallback<>(this.traceManager);
Trace traceScope = delegate.startSpan();
try {
return callback.doInTrace(traceScope);
} finally {
this.trace.close(traceScope);
this.traceManager.close(traceScope);
}
} else {
return callback.doInTrace(null);

View File

@@ -0,0 +1,39 @@
package org.springframework.cloud.sleuth.template;
import static org.assertj.core.api.BDDAssertions.then;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.cloud.sleuth.Trace;
import org.springframework.cloud.sleuth.TraceManager;
import org.springframework.cloud.sleuth.sampler.AlwaysSampler;
import org.springframework.cloud.sleuth.trace.DefaultTraceManager;
import org.springframework.cloud.sleuth.trace.TraceContextHolder;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.util.JdkIdGenerator;
public class TraceTemplateTest {
TraceManager traceManager = new DefaultTraceManager(new AlwaysSampler(), new JdkIdGenerator(), Mockito.mock(ApplicationEventPublisher.class));
@Test
public void should_pass_trace_to_the_callback_if_tracing_is_active() {
Trace initialTrace = traceManager.startSpan("test");
TraceTemplate traceTemplate = new TraceTemplate(traceManager);
Trace traceFromCallback = whenTraceCallbackReturningCurrentTraceIsExecuted(traceTemplate);
then(traceFromCallback).isNotNull();
then(traceFromCallback.getSpan().getTraceId()).isEqualTo(initialTrace.getSpan().getTraceId());
}
private Trace whenTraceCallbackReturningCurrentTraceIsExecuted(TraceTemplate traceTemplate) {
return traceTemplate.trace(new TraceCallback<Trace>() {
@Override
public Trace doInTrace(Trace traceScope) {
return TraceContextHolder.getCurrentTrace();
}
});
}
}