Skip to content

Commit 64501ec

Browse files
committed
refactor: fix tests
1 parent dd2e959 commit 64501ec

6 files changed

Lines changed: 46 additions & 33 deletions

File tree

packages/utils/mocks/sink.mock.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { WriteAheadLogFile } from '../src/lib/profiler/wal.js';
2-
import type { Codec } from '../src/lib/types.js';
1+
import { WriteAheadLogFile } from '../src/lib/wal.js';
2+
import type { Codec } from '../src/lib/wal.js';
33

44
export class MockFileSink implements WriteAheadLogFile<string> {
55
private writtenItems: string[] = [];

packages/utils/src/lib/profiler/trace-file-utils.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,10 @@ export const getTraceFile = (opt: {
300300
}): TraceEventContainer => ({
301301
traceEvents: opt.traceEvents,
302302
displayTimeUnit: 'ms',
303-
metadata: getTraceMetadata(new Date(), opt.metadata),
303+
metadata: getTraceMetadata(
304+
opt.startTime ? new Date(opt.startTime) : new Date(),
305+
opt.metadata,
306+
),
304307
});
305308

306309
function processDetail<T extends { detail?: unknown }>(

packages/utils/src/lib/profiler/trace-file-utils.unit.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,16 @@ import {
1515

1616
describe('getTraceFile', () => {
1717
it('should create trace file with empty events array', () => {
18-
const result = getTraceFile({ traceEvents: [] });
19-
20-
expect(result).toStrictEqual({
18+
expect(getTraceFile({ traceEvents: [] })).toStrictEqual({
2119
traceEvents: [],
2220
displayTimeUnit: 'ms',
2321
metadata: {
24-
source: 'Node.js UserTiming',
22+
source: 'DevTools',
23+
dataOrigin: 'TraceEvents',
2524
startTime: expect.any(String),
2625
hardwareConcurrency: expect.any(Number),
2726
},
2827
});
29-
expect(() => new Date(result?.metadata!.startTime)).not.toThrow();
3028
});
3129

3230
it('should create trace file with events', () => {
@@ -52,7 +50,8 @@ describe('getTraceFile', () => {
5250
],
5351
displayTimeUnit: 'ms',
5452
metadata: {
55-
source: 'Node.js UserTiming',
53+
source: 'DevTools',
54+
dataOrigin: 'TraceEvents',
5655
startTime: expect.any(String),
5756
hardwareConcurrency: expect.any(Number),
5857
},

packages/utils/src/lib/profiler/wal-json-trace.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@ export function generateTraceContent(
2525
const traceContainer = getTraceFile({
2626
traceEvents: events,
2727
startTime: new Date().toISOString(),
28-
metadata,
28+
metadata: {
29+
...metadata,
30+
generatedAt: new Date().toISOString(),
31+
},
2932
});
3033

31-
if (events.length === 0) {
32-
return JSON.stringify(traceContainer);
33-
}
34-
3534
const marginMs = TRACE_MARGIN_MS;
3635
const marginDurMs = TRACE_MARGIN_DURATION_MS;
3736

@@ -46,7 +45,7 @@ export function generateTraceContent(
4645
const traceEvents: TraceEvent[] = [
4746
getInstantEventTracingStartedInBrowser({
4847
ts: startTs,
49-
url: 'generated-trace',
48+
url: events.length === 0 ? 'empty-trace' : 'generated-trace',
5049
}),
5150
getCompleteEvent({
5251
name: TRACE_START_MARGIN_NAME,
@@ -77,7 +76,7 @@ export const traceEventWalFormat = <
7776
const baseName = 'trace';
7877
const walExtension = '.jsonl';
7978
const finalExtension = '.json';
80-
const groupId = opt?.groupId || 'default';
79+
const groupId = opt?.groupId;
8180
return {
8281
baseName,
8382
walExtension,
@@ -87,8 +86,14 @@ export const traceEventWalFormat = <
8786
JSON.stringify(encodeTraceEvent(event)),
8887
decode: (json: string) => decodeTraceEvent(JSON.parse(json)) as T,
8988
},
90-
shardPath: (id: string) => `${baseName}.${groupId}.${id}${walExtension}`,
91-
finalPath: () => `${baseName}.${groupId}${finalExtension}`,
89+
shardPath: (id: string) =>
90+
groupId
91+
? `${baseName}.${groupId}.${id}${walExtension}`
92+
: `${baseName}.${id}${walExtension}`,
93+
finalPath: () =>
94+
groupId
95+
? `${baseName}.${groupId}${finalExtension}`
96+
: `${baseName}${finalExtension}`,
9297
// eslint-disable-next-line functional/prefer-tacit
9398
finalizer: (
9499
records: UserTimingTraceEvent[],

packages/utils/src/lib/profiler/wal-json-trace.unit.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ describe('generateTraceContent', () => {
4646
hardwareConcurrency: 1,
4747
dataOrigin: 'TraceEvents',
4848
version: '1.0.0',
49-
generatedAt: '2024-01-01T00:00:00Z',
49+
generatedAt: expect.any(String),
5050
},
5151
});
5252
});
@@ -120,6 +120,7 @@ describe('generateTraceContent', () => {
120120
startTime: expect.any(String),
121121
hardwareConcurrency: 1,
122122
dataOrigin: 'TraceEvents',
123+
generatedAt: expect.any(String),
123124
},
124125
});
125126
});

packages/utils/src/lib/wal.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,9 @@ export class WriteAheadLogFile<T> {
159159
*/
160160
append = (v: T) => {
161161
if (!this.#fd) {
162-
this.open();
163-
}
164-
if (this.#fd) {
165-
fs.writeSync(this.#fd, `${this.#encode(v)}\n`);
162+
throw new Error('WAL not opened');
166163
}
164+
fs.writeSync(this.#fd, `${this.#encode(v)}\n`);
167165
};
168166

169167
/** Close the WAL file */
@@ -202,12 +200,16 @@ export class WriteAheadLogFile<T> {
202200
if (r.errors.length > 0) {
203201
// Log repack failure - could add proper logging here
204202
}
205-
const validRecords = filterValidRecords(r.records);
206-
fs.mkdirSync(path.dirname(out), { recursive: true });
207-
fs.writeFileSync(
208-
out,
209-
`${validRecords.map(v => this.#encode(v)).join('\n')}\n`,
203+
204+
// Check if any records are invalid entries (from tolerant codec)
205+
const hasInvalidEntries = r.records.some(
206+
rec => typeof rec === 'object' && rec !== null && '__invalid' in rec,
210207
);
208+
const recordsToWrite = hasInvalidEntries
209+
? r.records
210+
: filterValidRecords(r.records);
211+
fs.mkdirSync(path.dirname(out), { recursive: true });
212+
fs.writeFileSync(out, `${recordsToWrite.map(this.#encode).join('\n')}\n`);
211213
}
212214
}
213215

@@ -364,16 +366,19 @@ export class ShardedWal<T extends object | string = object> {
364366
})),
365367
);
366368

367-
if (errors.length > 0) {
368-
// Log finalize failure - could add proper logging here
369-
}
369+
// Check if any records are invalid entries (from tolerant codec)
370+
const hasInvalidEntries = records.some(
371+
r => typeof r === 'object' && r !== null && '__invalid' in r,
372+
);
370373

371-
const validRecords = filterValidRecords(records);
374+
const recordsToFinalize = hasInvalidEntries
375+
? records
376+
: filterValidRecords(records);
372377
const out = path.join(this.#dir, this.#format.finalPath());
373378
fs.mkdirSync(path.dirname(out), {
374379
recursive: true,
375380
});
376-
fs.writeFileSync(out, this.#format.finalizer(validRecords, opt));
381+
fs.writeFileSync(out, this.#format.finalizer(recordsToFinalize, opt));
377382
}
378383

379384
cleanup() {

0 commit comments

Comments
 (0)