Files
usenet-indexer/tests/functional/seven_zip_tails.spec.ts
T
Daan MeijerandClaude Opus 5.5 3b61215f6b
Test and deploy / test (push) Successful in 48s
Test and deploy / edge (push) Successful in 1m47s
Test and deploy / deploy (push) Successful in 1m49s
Keep only the 7z tails of a release's highest volume
The live tail reads an upload in pieces while it is posted, and each
piece queued a 7z-tail candidate for the last volume it had seen so far
(release 306905984: seven, for .002-.008). Only the last volume's end
holds the 7z listing. When candidates are stored, and when releases are
merged, waiting tails below the release's highest volume are deleted.
All tails of the highest volume stay: a piece that saw only part of it
queued a segment that is not its last. RAR is unaffected: it lists its
files in the first volume's header and gets no tail candidate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 11:16:25 +02:00

31 lines
1.7 KiB
TypeScript

import { test } from '@japa/runner'
import db from '@adonisjs/lucid/services/db'
import testUtils from '@adonisjs/core/services/test_utils'
import { pruneSevenZipTails } from '#services/seven_zip_tails'
test.group('7z tails', (group) => {
group.each.setup(() => testUtils.db().withGlobalTransaction())
test("of a release's waiting tails, those below its highest volume go; the highest volume's all stay", async ({ assert }) => {
const row = (key: string) => ({ release_key: key.padEnd(40, '0'), identity_key: key.padEnd(40, '0'), name: key, source: 'stem', groups: '[]', files: 4 })
const [merged, other] = (await db.table('releases').multiInsert([row('a'), row('b')]).returning('id')).map((r) => r.id)
const tail = (releaseId: number, volume: string, mid: string, status = 'waiting') => ({ release_id: releaseId, kind: '7z-tail', message_id: mid, file: `x.7z.${volume}`, status })
await db.table('probe_candidates').multiInsert([
// Two merged members' tails, one of the highest volume probed already.
tail(merged, '002', '<1@x>'),
tail(merged, '005', '<2@x>'),
tail(merged, '003', '<3@x>', 'done'),
tail(merged, '009', '<4@x>', 'taken'),
// Two pieces that each saw part of volume 009.
tail(merged, '009', '<5@x>'),
{ release_id: merged, kind: 'archive', message_id: '<6@x>', file: 'x.7z.001' },
// Another release: not asked for.
tail(other, '002', '<7@x>'),
tail(other, '004', '<8@x>'),
])
assert.equal(await pruneSevenZipTails(db, [merged]), 2)
const left = await db.from('probe_candidates').orderBy('message_id').select('message_id')
assert.deepEqual(left.map((c) => c.message_id), ['<3@x>', '<4@x>', '<5@x>', '<6@x>', '<7@x>', '<8@x>'])
})
})