Added tests for trace callable and runnable

This commit is contained in:
Marcin Grzejszczak
2015-12-01 16:03:07 +01:00
parent ac9ef5f740
commit c0e5c865dd
3 changed files with 136 additions and 0 deletions

View File

@@ -135,4 +135,5 @@ public class DefaultTraceManagerTests {
traceManager.close(cur);
}
}
}

View File

@@ -0,0 +1,62 @@
package org.springframework.cloud.sleuth.instrument;
import static org.assertj.core.api.BDDAssertions.then;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.cloud.sleuth.Trace;
import org.springframework.cloud.sleuth.TraceManager;
import org.springframework.cloud.sleuth.trace.TraceContextHolder;
@RunWith(MockitoJUnitRunner.class)
public class TraceCallableTest {
ExecutorService executor = Executors.newSingleThreadExecutor();
TraceManager traceManager = Mockito.mock(TraceManager.class);
@Test
@Ignore("Will fail because trace is not removed after callable gets executed")
public void should_remove_span_from_thread_local_after_finishing_work() throws Exception {
givenCallableGetsSubmitted(thatSetsTraceInCurrentThreadLocalWithInitialTrace());
Trace secondTrace = whenCallableGetsSubmitted(thatRetrievesTraceFromThreadLocal());
then(secondTrace).isNull();
}
private Callable<Trace> thatSetsTraceInCurrentThreadLocalWithInitialTrace() {
return new Callable<Trace>() {
@Override
public Trace call() throws Exception {
TraceContextHolder.setCurrentTrace(Mockito.mock(Trace.class));
return TraceContextHolder.getCurrentTrace();
}
};
}
private Callable<Trace> thatRetrievesTraceFromThreadLocal() {
return new Callable<Trace>() {
@Override
public Trace call() throws Exception {
return TraceContextHolder.getCurrentTrace();
}
};
}
private Trace givenCallableGetsSubmitted(Callable<Trace> callable) throws InterruptedException, java.util.concurrent.ExecutionException {
return whenCallableGetsSubmitted(callable);
}
private Trace whenCallableGetsSubmitted(Callable<Trace> callable) throws InterruptedException, java.util.concurrent.ExecutionException {
return executor.submit(new TraceCallable<>(traceManager, callable)).get();
}
}

View File

@@ -0,0 +1,73 @@
package org.springframework.cloud.sleuth.instrument;
import static org.assertj.core.api.BDDAssertions.then;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.cloud.sleuth.Trace;
import org.springframework.cloud.sleuth.TraceManager;
import org.springframework.cloud.sleuth.trace.TraceContextHolder;
@RunWith(MockitoJUnitRunner.class)
public class TraceRunnableTest {
ExecutorService executor = Executors.newSingleThreadExecutor();
TraceManager traceManager = Mockito.mock(TraceManager.class);
@Test
@Ignore("Will fail because trace is not removed after runnable gets executed")
public void should_remove_span_from_thread_local_after_finishing_work() throws Exception {
// given
TraceSettingRunnable traceSettingRunnable = runnableThatSetsTraceInCurrentThreadLocalWithInitialTrace();
givenRunnableGetsSubmitted(traceSettingRunnable);
then(traceSettingRunnable.trace).isNotNull();
// when
TraceKeepingRunnable traceKeepingRunnable = runnableThatRetrievesTraceFromThreadLocal();
whenRunnableGetsSubmitted(traceKeepingRunnable);
// then
then(traceKeepingRunnable.trace).isNull();
}
private TraceSettingRunnable runnableThatSetsTraceInCurrentThreadLocalWithInitialTrace() {
return new TraceSettingRunnable();
}
private TraceKeepingRunnable runnableThatRetrievesTraceFromThreadLocal() {
return new TraceKeepingRunnable();
}
private void givenRunnableGetsSubmitted(Runnable runnable) throws Exception {
whenRunnableGetsSubmitted(runnable);
}
private void whenRunnableGetsSubmitted(Runnable callable) throws Exception {
executor.submit(new TraceRunnable(traceManager, callable)).get();
}
static class TraceKeepingRunnable implements Runnable {
public Trace trace;
@Override
public void run() {
trace = TraceContextHolder.getCurrentTrace();
}
}
static class TraceSettingRunnable implements Runnable {
public Trace trace;
@Override
public void run() {
TraceContextHolder.setCurrentTrace(Mockito.mock(Trace.class));
trace = TraceContextHolder.getCurrentTrace();
}
}
}