Rebuild: test the corrupt-chunk report
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a979b5d11c
commit
babd3d781d
1 file changed
+20
@@ -84,4 +84,24 @@ test.group('Node API', (group) => {
|
||||
assert.equal(range.status, 'done')
|
||||
assert.isFalse(await Spool.has(rangeId, { from: 1, to: 100 }))
|
||||
})
|
||||
test('a chunk that does not inflate: reported, removed from the spool, the range goes back', async ({ client, assert }) => {
|
||||
const [g] = await db.table('groups').insert({ name: GROUP, priority: 1 }).returning('id')
|
||||
const [r] = await db.table('ranges').insert({ group_id: g.id, start_id: 1, end_id: 300, next_id: 1, spooled_chunks: 3 }).returning('id')
|
||||
const rangeId = Number(r.id)
|
||||
for (const span of Spool.chunksOf({ start: 1, end: 300 })) await Spool.write(rangeId, span, chunk(span.from + 10))
|
||||
const node = await Node.create({ name: 'n1' })
|
||||
const token = (await Node.accessTokens.create(node)).value!.release()
|
||||
;(await client.post('/api/v1/node/lease').bearerToken(token)).assertStatus(200)
|
||||
|
||||
;(await client.post(`/api/v1/node/ranges/${rangeId}/corrupt`).bearerToken(token).json({ from: 101 })).assertStatus(200)
|
||||
assert.deepEqual(
|
||||
await Promise.all(Spool.chunksOf({ start: 1, end: 300 }).map((span) => Spool.has(rangeId, span))),
|
||||
[true, false, true]
|
||||
)
|
||||
const range = await db.from('ranges').where('id', rangeId).first()
|
||||
assert.equal(range.status, 'planned')
|
||||
assert.isNull(range.node_id)
|
||||
// No longer this node's: a second report is refused.
|
||||
;(await client.post(`/api/v1/node/ranges/${rangeId}/corrupt`).bearerToken(token).json({ from: 101 })).assertStatus(409)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user