opencode/packages/server/test/observability.test.ts

32 lines
1.4 KiB
TypeScript

import { expect, test } from "bun:test"
import { NodeServices } from "@effect/platform-node"
import { Context, Effect, Layer, References } from "effect"
import { HttpMiddleware, HttpServer, HttpServerRequest } from "effect/unstable/http"
test("route construction retains the server tracing policy", async () => {
const database = process.env.OPENCODE_DB
const endpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT
delete process.env.OTEL_EXPORTER_OTLP_ENDPOINT
process.env.OPENCODE_DB = ":memory:"
try {
const { createEmbeddedRoutes } = await import("../src/routes")
await Effect.gen(function* () {
const context = yield* Layer.build(
createEmbeddedRoutes().pipe(
Layer.provide(HttpServer.layerServices),
Layer.provide(NodeServices.layer),
),
)
const request = HttpServerRequest.fromWeb(new Request("http://opencode.local/api/session"))
expect(Context.get(context, References.TracerEnabled)).toBeFalse()
expect(Context.get(context, HttpMiddleware.TracerDisabledWhen)(request)).toBeTrue()
}).pipe(Effect.scoped, Effect.runPromise)
} finally {
if (database === undefined) delete process.env.OPENCODE_DB
else process.env.OPENCODE_DB = database
if (endpoint === undefined) delete process.env.OTEL_EXPORTER_OTLP_ENDPOINT
else process.env.OTEL_EXPORTER_OTLP_ENDPOINT = endpoint
}
})