import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import test from 'node:test';
import { pollDue } from '@/lib/infra/poller';
import { ensureSource, latestSamples } from '@/lib/infra/store';
import { prismaRaw } from '@/lib/storage/prisma';
const FIXTURE = readFileSync(join(import.meta.dirname, 'fixtures', 'vllm-metrics-sample.txt'), 'utf8');
const fakeFetch = (() => (async () => ({ ok: true, status: 200, text: async () => FIXTURE })) as unknown as typeof fetch)();
test('pollDue 按每源 scrapeIntervalMs 控制节奏', async () => {
const endpoint = 'http://test-due.local:9997';
await prismaRaw.infraSource.deleteMany({ where: { endpoint } });
const src = await ensureSource({ endpoint, scrapeUrl: `${endpoint}/metrics`, kind: 'pull', scrapeIntervalMs: 10000 });
try {
const t = 1_000_000_000;
let r = await pollDue({ nowMs: t, fetchImpl: fakeFetch, endpoints: [endpoint] });
assert.equal(r.polled, 1);
assert.equal(r.skipped, 0);
r = await pollDue({ nowMs: t + 5000, fetchImpl: fakeFetch, endpoints: [endpoint] });
assert.equal(r.polled, 0);
assert.equal(r.skipped, 1);
r = await pollDue({ nowMs: t + 11000, fetchImpl: fakeFetch, endpoints: [endpoint] });
assert.equal(r.polled, 1);
const samples = await latestSamples(src.id, 10);
assert.equal(samples.length, 2, '应只在两次到点时落了 2 条');
} finally {
await prismaRaw.infraSource.deleteMany({ where: { endpoint } });
}
});