Some checks failed
Axolotl desktop CI / guardrails (push) Has been cancelled
Axolotl desktop CI / desktop (macos-latest) (push) Has been cancelled
Axolotl desktop CI / desktop (ubuntu-latest) (push) Has been cancelled
Axolotl desktop CI / desktop (windows-latest) (push) Has been cancelled
Axolotl desktop CI / website (push) Has been cancelled
Repository checks / typos (push) Has been cancelled
Repository checks / tombi (push) Has been cancelled
Rust checks / shear (push) Has been cancelled
Sync source to CNB / Sync Git ref (push) Has been cancelled
Add pack sync markers, tagged mod updates, parallel progress, JWT downloads and retry recovery. Include pending onboarding, about scene, compatibility data pack and download fixes.
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
import { createHostedDownloadFailures } from './hosted-download-failures.ts'
|
|
|
|
test('retry clears only its own failure before progress arrives and ignores late old events', () => {
|
|
const state = createHostedDownloadFailures()
|
|
const failed = (instanceId: string, loader: string, error: string) => ({
|
|
fraction: null,
|
|
loader_uuid: loader,
|
|
event: { type: 'hosted_pack_sync', instance_id: instanceId, instance_name: instanceId, error },
|
|
})
|
|
const oldFailure = failed('one', 'old', 'old failure')
|
|
state.update(oldFailure)
|
|
state.update(failed('two', 'other', 'other failure'))
|
|
state.begin('one', state.values())
|
|
assert.equal(state.has('one'), false)
|
|
assert.equal(state.has('two'), true)
|
|
assert.equal(state.isRetired('old'), true)
|
|
state.update(oldFailure)
|
|
assert.equal(state.has('one'), false)
|
|
state.update(failed('one', 'new', 'new failure'))
|
|
state.update({ ...oldFailure, fraction: 0.5 })
|
|
assert.equal(
|
|
state.values().find((bar) => bar.bar_type?.instance_id === 'one')?.message,
|
|
'new failure',
|
|
)
|
|
})
|
|
|
|
test('a new native task retires the previous failed task without a frontend retry', () => {
|
|
const state = createHostedDownloadFailures()
|
|
const old = {
|
|
fraction: null,
|
|
loader_uuid: 'old',
|
|
event: { type: 'hosted_pack_sync', instance_id: 'instance', error: 'old failure' },
|
|
}
|
|
state.update(old)
|
|
state.update({ fraction: 0, loader_uuid: 'new', event: { ...old.event, error: null } })
|
|
state.update(old)
|
|
assert.equal(state.has('instance'), false)
|
|
})
|
|
|
|
test('late failure from an older active task cannot replace the new task', () => {
|
|
const state = createHostedDownloadFailures()
|
|
const event = { type: 'hosted_pack_sync', instance_id: 'instance' }
|
|
state.update({ fraction: 0.5, loader_uuid: 'old', event })
|
|
state.update({ fraction: 0, loader_uuid: 'new', event })
|
|
state.update({ fraction: null, loader_uuid: 'old', event: { ...event, error: 'old failure' } })
|
|
assert.equal(state.has('instance'), false)
|
|
assert.equal(state.isRetired('old'), true)
|
|
assert.equal(state.isRetired('new'), false)
|
|
})
|