Skip to content

Commit d70a57d

Browse files
committed
Test propagation of trace info over stream scopes
1 parent 461f3b5 commit d70a57d

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

build.sbt

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ lazy val core = crossProject(JVMPlatform, JSPlatform)
3333
libraryDependencies ++= Seq(
3434
"org.typelevel" %%% "cats-core" % "2.8.0",
3535
"org.typelevel" %%% "cats-effect" % "3.3.13",
36-
"co.fs2" %%% "fs2-core" % "3.2.11",
36+
"org.scodec" %%% "scodec-bits" % "1.1.34",
3737
"org.scalameta" %%% "munit" % "0.7.29" % Test,
3838
"org.typelevel" %%% "munit-cats-effect-3" % "1.0.7" % Test,
3939
"org.typelevel" %%% "cats-effect-testkit" % "3.3.13" % Test
@@ -69,6 +69,7 @@ lazy val java = crossProject(JVMPlatform)
6969
"io.opentelemetry" % "opentelemetry-api" % "1.15.0",
7070
"io.opentelemetry" % "opentelemetry-sdk" % "1.15.0" % Test,
7171
"io.opentelemetry" % "opentelemetry-sdk-testing" % "1.15.0" % Test,
72+
"co.fs2" %%% "fs2-core" % "3.2.11" % Test,
7273
"org.scalameta" %% "munit" % "0.7.29" % Test,
7374
"org.typelevel" %% "munit-cats-effect-3" % "1.0.7" % Test,
7475
"org.typelevel" %%% "cats-effect-testkit" % "3.3.13" % Test

java/src/test/scala/org/typelevel/otel4s/java/trace/TracerSuite.scala

+46
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package org.typelevel.otel4s.java.trace
1919
import cats.effect.IO
2020
import cats.effect.Resource
2121
import cats.effect.testkit.TestControl
22+
import fs2.Stream
2223
import io.opentelemetry.api.common.Attributes
2324
import io.opentelemetry.api.trace.StatusCode
2425
import io.opentelemetry.sdk.common.InstrumentationScopeInfo
@@ -451,6 +452,51 @@ class TracerSuite extends CatsEffectSuite {
451452
}
452453
}
453454

455+
test("propagate trace info over stream scopes") {
456+
def expected(now: FiniteDuration) =
457+
SpanNode(
458+
"span",
459+
now,
460+
now,
461+
List(
462+
SpanNode("span-3", now, now, Nil),
463+
SpanNode("span-2", now, now, Nil)
464+
)
465+
)
466+
467+
def flow(tracer: Tracer[IO]): Stream[IO, Unit] =
468+
for {
469+
span <- Stream.resource(tracer.span("span"))
470+
_ <- Stream.eval(
471+
tracer.currentSpanContext.assertEquals(Some(span.context))
472+
)
473+
span2 <- Stream.resource(tracer.span("span-2"))
474+
_ <- Stream.eval(
475+
tracer.currentSpanContext.assertEquals(Some(span2.context))
476+
)
477+
span3 <- Stream.resource(
478+
tracer.spanBuilder("span-3").withParent(span.context).createAuto
479+
)
480+
_ <- Stream.eval(
481+
tracer.currentSpanContext.assertEquals(Some(span3.context))
482+
)
483+
} yield ()
484+
485+
TestControl.executeEmbed {
486+
for {
487+
now <- IO.monotonic.delayBy(1.second) // otherwise returns 0
488+
sdk <- makeSdk()
489+
tracer <- sdk.provider.tracer("tracer").get
490+
_ <- tracer.currentSpanContext.assertEquals(None)
491+
_ <- flow(tracer).compile.drain
492+
_ <- tracer.currentSpanContext.assertEquals(None)
493+
spans <- sdk.finishedSpans
494+
tree <- IO.pure(SpanNode.fromSpans(spans))
495+
// _ <- IO.println(tree.map(SpanNode.render).mkString("\n"))
496+
} yield assertEquals(tree, List(expected(now)))
497+
}
498+
}
499+
454500
private def assertIdsNotEqual(s1: Span[IO], s2: Span[IO]): Unit = {
455501
assertNotEquals(s1.context.traceIdHex, s2.context.traceIdHex)
456502
assertNotEquals(s1.context.spanIdHex, s2.context.spanIdHex)

0 commit comments

Comments
 (0)