diff --git a/dd-java-agent-ittests/src/main/scala/datadog/trace/agent/integration/executors/ScalaConcurrentTests.scala b/dd-java-agent-ittests/src/main/scala/datadog/trace/agent/integration/executors/ScalaConcurrentTests.scala index 57dc5e4c73..827f2989c3 100644 --- a/dd-java-agent-ittests/src/main/scala/datadog/trace/agent/integration/executors/ScalaConcurrentTests.scala +++ b/dd-java-agent-ittests/src/main/scala/datadog/trace/agent/integration/executors/ScalaConcurrentTests.scala @@ -32,6 +32,22 @@ class ScalaConcurrentTests { return 5 } + @Trace + def tracedAcrossThreadsWithNoTrace() :Integer = { + val goodFuture: Future[Integer] = Future { + 1 + } + goodFuture onSuccess { + case _ => Future { + 2 + } onSuccess { + case _ => tracedChild("callback") + } + } + + return 2 + } + /** * @return Number of expected spans in the trace */ diff --git a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/executors/ExecutorInstrumentationTest.groovy b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/executors/ExecutorInstrumentationTest.groovy index eaf25f4e75..976cd69d32 100644 --- a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/executors/ExecutorInstrumentationTest.groovy +++ b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/executors/ExecutorInstrumentationTest.groovy @@ -136,6 +136,17 @@ class ExecutorInstrumentationTest extends Specification { trace.size() == expectedNumberOfSpans } + def "scala propagates across futures with no traces"() { + setup: + ScalaConcurrentTests scalaTest = new ScalaConcurrentTests() + int expectedNumberOfSpans = scalaTest.tracedAcrossThreadsWithNoTrace() + testWriter.waitForTraces(1) + List trace = testWriter.get(0) + + expect: + trace.size() == expectedNumberOfSpans + } + def "scala either promise completion"() { setup: ScalaConcurrentTests scalaTest = new ScalaConcurrentTests()