49 lines · 2.1 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import { Effect, Tracer } from "effect"; import { currentPropagationHeaders } from "./do-headers"; const TRACE_ID = "0af7651916cd43dd8448eb211c80319c";const SPAN_ID = "b7ad6b7169203331"; describe("currentPropagationHeaders", () => {  it("emits a traceparent from an external parent span (the worker edge span)", async () => {    // The worker joins the edge http.server span via OtelTracer.withSpanContext,    // which provides an ExternalSpan (this is its effect-level shape) — not an    // Effect-local Span. Propagation must still see it, or the session DO    // starts a fresh root per request.    const request = new Request("https://executor.sh/mcp", { method: "POST" });    const headers = await Effect.runPromise(      currentPropagationHeaders(request).pipe(        Effect.withParentSpan(          Tracer.externalSpan({ traceId: TRACE_ID, spanId: SPAN_ID, sampled: true }),        ),      ),    );    expect(headers.traceparent).toBe(`00-${TRACE_ID}-${SPAN_ID}-01`);  });   it("emits a traceparent from an Effect-local span", async () => {    const request = new Request("https://executor.sh/mcp", { method: "POST" });    const headers = await Effect.runPromise(      currentPropagationHeaders(request).pipe(Effect.withSpan("test.span")),    );    expect(headers.traceparent).toMatch(/^00-[0-9a-f]{32}-[0-9a-f]{16}-0[01]$/);  });   it("omits the traceparent when no span is active", async () => {    const request = new Request("https://executor.sh/mcp", { method: "POST" });    const headers = await Effect.runPromise(currentPropagationHeaders(request));    expect(headers.traceparent).toBeUndefined();  });   it("passes through tracestate and baggage from the inbound request", async () => {    const request = new Request("https://executor.sh/mcp", {      method: "POST",      headers: { tracestate: "vendor=state", baggage: "k=v" },    });    const headers = await Effect.runPromise(currentPropagationHeaders(request));    expect(headers.tracestate).toBe("vendor=state");    expect(headers.baggage).toBe("k=v");  });});