monitor/core/modules/Metrics/svRuntime/perfUtils.test.ts
2025-04-16 22:30:27 +07:00

101 lines
4.1 KiB
TypeScript

import { expect, it, suite } from 'vitest';
import { diffPerfs, didPerfReset } from './perfUtils';
suite('diffPerfs', () => {
it('should correctly calculate the difference between two performance snapshots', () => {
const oldPerf = {
svSync: { count: 10, sum: 20, buckets: [1, 2, 3] },
svNetwork: { count: 15, sum: 30, buckets: [4, 5, 6] },
svMain: { count: 20, sum: 40, buckets: [7, 8, 9] },
};
const newPerf = {
svSync: { count: 20, sum: 40, buckets: [2, 4, 6] },
svNetwork: { count: 30, sum: 60, buckets: [8, 10, 12] },
svMain: { count: 40, sum: 80, buckets: [14, 16, 18] },
};
const expectedDiff = {
svSync: { count: 10, sum: 20, buckets: [1, 2, 3] },
svNetwork: { count: 15, sum: 30, buckets: [4, 5, 6] },
svMain: { count: 20, sum: 40, buckets: [7, 8, 9] },
};
const result = diffPerfs(newPerf, oldPerf);
expect(result).toEqual(expectedDiff);
});
it('should correctly return the diff when there is no old data', () => {
const newPerf = {
shouldBeIgnored: { count: 20, sum: 40, buckets: [2, 4, 6] },
svSync: { count: 20, sum: 40, buckets: [2, 4, 6] },
svNetwork: { count: 30, sum: 60, buckets: [8, 10, 12] },
svMain: { count: 40, sum: 80, buckets: [14, 16, 18] },
};
const expectedDiff = {
svSync: { count: 20, sum: 40, buckets: [2, 4, 6] },
svNetwork: { count: 30, sum: 60, buckets: [8, 10, 12] },
svMain: { count: 40, sum: 80, buckets: [14, 16, 18] },
};
const result = diffPerfs(newPerf);
expect(result).toEqual(expectedDiff);
});
});
suite('didPerfReset', () => {
it('should detect change in count in any thread', () => {
const oldPerf = {
svNetwork: { count: 10, sum: 0, buckets: [] },
svSync: { count: 10, sum: 0, buckets: [] },
svMain: { count: 10, sum: 0, buckets: [] },
};
const newPerf = {
svNetwork: { count: 10, sum: 0, buckets: [] },
svSync: { count: 5, sum: 0, buckets: [] },
svMain: { count: 10, sum: 0, buckets: [] },
};
expect(didPerfReset(newPerf, oldPerf)).toBe(true);
});
it('should detect change in sum in any thread', () => {
const oldPerf = {
svNetwork: { count: 0, sum: 10, buckets: [] },
svSync: { count: 0, sum: 10, buckets: [] },
svMain: { count: 0, sum: 10, buckets: [] },
};
const newPerf = {
svNetwork: { count: 0, sum: 10, buckets: [] },
svSync: { count: 0, sum: 5, buckets: [] },
svMain: { count: 0, sum: 10, buckets: [] },
};
expect(didPerfReset(newPerf, oldPerf)).toBe(true);
});
it('should detect reset - real case', () => {
const oldPerf = {
svNetwork: { count: 5940, sum: 0.08900000000000005, buckets: [] },
svSync: { count: 7333, sum: 0.1400000000000001, buckets: [] },
svMain: { count: 1209, sum: 0.1960000000000001, buckets: [] },
};
const newPerf = {
svSync: { count: 1451, sum: 0.01600000000000001, buckets: [] },
svNetwork: { count: 1793, sum: 0.03900000000000003, buckets: [] },
svMain: { count: 278, sum: 0.05300000000000004, buckets: [] },
};
expect(didPerfReset(newPerf, oldPerf)).toBe(true);
});
it('should detect progression - real case', () => {
const oldPerf = {
svSync: { count: 1451, sum: 0.01600000000000001, buckets: [] },
svNetwork: { count: 1793, sum: 0.03900000000000003, buckets: [] },
svMain: { count: 278, sum: 0.05300000000000004, buckets: [] },
};
const newPerf = {
svNetwork: { count: 8764, sum: 0.1030000000000001, buckets: [] },
svSync: { count: 10815, sum: 0.1880000000000001, buckets: [] },
svMain: { count: 1792, sum: 0.3180000000000002, buckets: [] },
};
expect(didPerfReset(newPerf, oldPerf)).toBe(false);
});
});