Skip to content

Commit de55048

Browse files
committed
test: Implement 100% test coverage for OpenAI OpenTelemetry support in TypeScript
1 parent c3fc61f commit de55048

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
import { INVALID_SPANID, INVALID_TRACEID } from '@opentelemetry/api';
3+
import { randomBytes } from 'crypto';
4+
import { CryptoIdGenerator } from './id-generator';
5+
6+
vi.mock('crypto', () => ({
7+
randomBytes: vi.fn(),
8+
}));
9+
10+
describe('CryptoIdGenerator', () => {
11+
beforeEach(() => {
12+
vi.clearAllMocks();
13+
});
14+
it('should generate valid trace id', () => {
15+
const mockHex = '1234567890abcdef1234567890abcdef';
16+
vi.mocked(randomBytes).mockReturnValue({
17+
toString: vi.fn().mockReturnValue(mockHex),
18+
} as any);
19+
20+
const generator = new CryptoIdGenerator();
21+
const traceId = generator.generateTraceId();
22+
23+
expect(randomBytes).toHaveBeenCalledWith(16);
24+
expect(traceId).toBe(mockHex);
25+
});
26+
27+
it('should generate valid span id', () => {
28+
const mockHex = '1234567890abcdef';
29+
vi.mocked(randomBytes).mockReturnValue({
30+
toString: vi.fn().mockReturnValue(mockHex),
31+
} as any);
32+
33+
const generator = new CryptoIdGenerator();
34+
const spanId = generator.generateSpanId();
35+
36+
expect(randomBytes).toHaveBeenCalledWith(8);
37+
expect(spanId).toBe(mockHex);
38+
});
39+
40+
it('should regenerate trace id if invalid', () => {
41+
const validHex = '1234567890abcdef1234567890abcdef';
42+
vi.mocked(randomBytes)
43+
.mockReturnValueOnce({
44+
toString: vi.fn().mockReturnValue(INVALID_TRACEID),
45+
} as any)
46+
.mockReturnValueOnce({
47+
toString: vi.fn().mockReturnValue(validHex),
48+
} as any);
49+
50+
const generator = new CryptoIdGenerator();
51+
const traceId = generator.generateTraceId();
52+
53+
expect(randomBytes).toHaveBeenCalledTimes(2);
54+
expect(traceId).toBe(validHex);
55+
expect(traceId).not.toBe(INVALID_TRACEID);
56+
});
57+
58+
it('should regenerate span id if invalid', () => {
59+
const validHex = '1234567890abcdef';
60+
vi.mocked(randomBytes)
61+
.mockReturnValueOnce({
62+
toString: vi.fn().mockReturnValue(INVALID_SPANID),
63+
} as any)
64+
.mockReturnValueOnce({
65+
toString: vi.fn().mockReturnValue(validHex),
66+
} as any);
67+
68+
const generator = new CryptoIdGenerator();
69+
const spanId = generator.generateSpanId();
70+
71+
expect(randomBytes).toHaveBeenCalledTimes(2);
72+
expect(spanId).toBe(validHex);
73+
expect(spanId).not.toBe(INVALID_SPANID);
74+
});
75+
76+
it('should generate different ids on each call', () => {
77+
let callCount = 0;
78+
const hexValues = [
79+
'1234567890abcdef1234567890abcdef',
80+
'fedcba0987654321fedcba0987654321',
81+
'abcdef1234567890abcdef1234567890',
82+
];
83+
84+
vi.mocked(randomBytes).mockImplementation(
85+
() =>
86+
({
87+
toString: vi.fn().mockReturnValue(hexValues[callCount++]),
88+
}) as any
89+
);
90+
91+
const generator = new CryptoIdGenerator();
92+
const traceId1 = generator.generateTraceId();
93+
const traceId2 = generator.generateTraceId();
94+
const traceId3 = generator.generateTraceId();
95+
96+
expect(traceId1).not.toBe(traceId2);
97+
expect(traceId2).not.toBe(traceId3);
98+
expect(traceId1).not.toBe(traceId3);
99+
});
100+
});

0 commit comments

Comments
 (0)