Organize uploader storage and restore transfer readiness

This commit is contained in:
2026-10-14 19:15:46 +09:00
parent 69e7449ba7
commit c3573b605c
24 changed files with 966 additions and 449 deletions

View File

@@ -2,6 +2,41 @@ import { test } from 'node:test';
import assert from 'node:assert/strict';
import { fixture } from './helpers.js';
import { Limiter, ApiError } from '../src/security.js';
import { randomUUID } from 'node:crypto';
import { once } from 'node:events';
test('a known reconnecting peer returns a transient code without creating a request or charging quotas', async () => {
const f = await fixture(true);
try {
f.cfg.offlineGraceMs = 1000;
f.cfg.pairRate = 1;
const a = await f.create('8.8.8.8'),
b = await f.create('8.8.8.8');
const disconnected = once(f.service.io.sockets.sockets.get(b.socket.id), 'disconnect');
b.socket.disconnect();
await disconnected;
const key = randomUUID();
for (let i = 0; i < 3; i++) {
const response = await f.request(a, b, 'test', 'url', 1, key);
assert.equal(response.statusCode, 409);
assert.equal(response.json().code, 'TARGET_RECONNECTING');
assert.equal((await f.call(a, '/transfer-requests')).json().requests.length, 0);
}
await f.call(b, '/device/me', 'PATCH', { discoverable: false });
assert.equal((await f.request(a, b, 'test', 'url', 1, key)).json().code, 'TARGET_UNAVAILABLE');
await f.call(b, '/device/me', 'PATCH', { discoverable: true });
await f.connect(b);
const response = await f.request(a, b, 'test', 'url', 1, key);
assert.equal(response.statusCode, 200);
assert.equal(
(await f.request(a, b, 'test', 'url', 1, key)).json().requestId,
response.json().requestId,
);
assert.equal((await f.call(a, '/transfer-requests')).json().requests.length, 1);
} finally {
await f.close();
}
});
test('rate windows report their deadline; denied retries do not charge other quotas', (t) => {
let now = 1000;