91 行
3.0 KiB
JavaScript
91 行
3.0 KiB
JavaScript
const { initTracing, shutdownTracing } = require("../../../src/observability/tracing");
|
|
|
|
function buildDependencies({ constructError = null } = {}) {
|
|
const instances = [];
|
|
const resourceFromAttributes = vi.fn((attributes) => ({ attributes }));
|
|
const getNodeAutoInstrumentations = vi.fn((options) => ({ options }));
|
|
const logger = { log: vi.fn(), error: vi.fn() };
|
|
|
|
class TestNodeSDK {
|
|
constructor(options) {
|
|
if (constructError) {
|
|
throw constructError;
|
|
}
|
|
this.options = options;
|
|
this.start = vi.fn();
|
|
this.shutdown = vi.fn(async () => {});
|
|
instances.push(this);
|
|
}
|
|
}
|
|
|
|
return {
|
|
overrides: {
|
|
NodeSDK: TestNodeSDK,
|
|
ConsoleSpanExporter: class TestConsoleSpanExporter {},
|
|
resourceFromAttributes,
|
|
getNodeAutoInstrumentations,
|
|
logger,
|
|
},
|
|
instances,
|
|
resourceFromAttributes,
|
|
getNodeAutoInstrumentations,
|
|
logger,
|
|
};
|
|
}
|
|
|
|
describe("observability tracing", () => {
|
|
afterEach(async () => {
|
|
await shutdownTracing();
|
|
});
|
|
|
|
it("does not initialize the SDK when traces are disabled", () => {
|
|
const dependencies = buildDependencies();
|
|
|
|
expect(initTracing({ otelTracesEnabled: false }, dependencies.overrides)).toBeNull();
|
|
expect(dependencies.instances).toHaveLength(0);
|
|
});
|
|
|
|
it("initializes the SDK with the service resource and filesystem instrumentation disabled", () => {
|
|
const dependencies = buildDependencies();
|
|
|
|
const result = initTracing({ otelTracesEnabled: true }, dependencies.overrides);
|
|
|
|
expect(result).toBe(dependencies.instances[0]);
|
|
expect(dependencies.resourceFromAttributes).toHaveBeenCalledWith({ "service.name": "hyb-oa-server" });
|
|
expect(dependencies.getNodeAutoInstrumentations).toHaveBeenCalledWith({
|
|
"@opentelemetry/instrumentation-fs": { enabled: false },
|
|
});
|
|
expect(result.start).toHaveBeenCalledOnce();
|
|
expect(dependencies.logger.log).toHaveBeenCalledWith("OTel tracing initialized");
|
|
});
|
|
|
|
it("supports a distinct worker service name", () => {
|
|
const dependencies = buildDependencies();
|
|
|
|
initTracing({ otelTracesEnabled: true }, {
|
|
...dependencies.overrides,
|
|
serviceName: "hyb-oa-worker",
|
|
});
|
|
|
|
expect(dependencies.resourceFromAttributes).toHaveBeenCalledWith({ "service.name": "hyb-oa-worker" });
|
|
});
|
|
|
|
it("contains initialization failures and leaves tracing disabled", () => {
|
|
const error = new Error("otel_init_failed");
|
|
const dependencies = buildDependencies({ constructError: error });
|
|
|
|
expect(initTracing({ otelTracesEnabled: true }, dependencies.overrides)).toBeNull();
|
|
expect(dependencies.logger.error).toHaveBeenCalledWith("Error initializing OTel tracing", error);
|
|
});
|
|
|
|
it("shuts down an initialized SDK once", async () => {
|
|
const dependencies = buildDependencies();
|
|
const instance = initTracing({ otelTracesEnabled: true }, dependencies.overrides);
|
|
|
|
await shutdownTracing();
|
|
await shutdownTracing();
|
|
|
|
expect(instance.shutdown).toHaveBeenCalledOnce();
|
|
});
|
|
});
|