| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import { afterEach, describe, expect, test } from "bun:test"
- import { resource } from "@opencode-ai/core/effect/observability"
- const otelResourceAttributes = process.env.OTEL_RESOURCE_ATTRIBUTES
- const opencodeClient = process.env.OPENCODE_CLIENT
- afterEach(() => {
- if (otelResourceAttributes === undefined) delete process.env.OTEL_RESOURCE_ATTRIBUTES
- else process.env.OTEL_RESOURCE_ATTRIBUTES = otelResourceAttributes
- if (opencodeClient === undefined) delete process.env.OPENCODE_CLIENT
- else process.env.OPENCODE_CLIENT = opencodeClient
- })
- describe("resource", () => {
- test("parses and decodes OTEL resource attributes", () => {
- process.env.OTEL_RESOURCE_ATTRIBUTES =
- "service.namespace=anomalyco,team=platform%2Cobservability,label=hello%3Dworld,key%2Fname=value%20here"
- expect(resource().attributes).toMatchObject({
- "service.namespace": "anomalyco",
- team: "platform,observability",
- label: "hello=world",
- "key/name": "value here",
- })
- })
- test("drops OTEL resource attributes when any entry is invalid", () => {
- process.env.OTEL_RESOURCE_ATTRIBUTES = "service.namespace=anomalyco,broken"
- expect(resource().attributes["service.namespace"]).toBeUndefined()
- expect(resource().attributes["opencode.client"]).toBeDefined()
- })
- test("keeps built-in attributes when env values conflict", () => {
- process.env.OPENCODE_CLIENT = "cli"
- process.env.OTEL_RESOURCE_ATTRIBUTES =
- "opencode.client=web,service.instance.id=override,service.namespace=anomalyco"
- expect(resource().attributes).toMatchObject({
- "opencode.client": "cli",
- "service.namespace": "anomalyco",
- })
- expect(resource().attributes["service.instance.id"]).not.toBe("override")
- })
- })
|