59 行
1.8 KiB
TypeScript
59 行
1.8 KiB
TypeScript
|
|
import assert from 'node:assert/strict'
|
||
|
|
import test from 'node:test'
|
||
|
|
|
||
|
|
import {
|
||
|
|
clearStoredQueue,
|
||
|
|
isBugCollectDisabledPayload,
|
||
|
|
openQueue,
|
||
|
|
sealQueue,
|
||
|
|
} from '../src/queue/queueStorage'
|
||
|
|
import type { IssueEvent } from '../src/types'
|
||
|
|
|
||
|
|
const issue: IssueEvent = {
|
||
|
|
type: 'issue',
|
||
|
|
level: 'error',
|
||
|
|
platform: 'android',
|
||
|
|
fingerprint: 'fingerprint',
|
||
|
|
timestamp: 1_000,
|
||
|
|
appKey: 'app',
|
||
|
|
release: '8.0.0',
|
||
|
|
exception: { type: 'Error', value: 'secret', stacktrace: 'private stack' },
|
||
|
|
symbolicationStatus: 'unavailable',
|
||
|
|
}
|
||
|
|
|
||
|
|
test('persistent queue is encrypted, context-bound and tamper-evident', () => {
|
||
|
|
const encrypted = sealQueue([issue], 'signing-key', 'bugcollect-queue|app')
|
||
|
|
assert.equal(encrypted.includes('private stack'), false)
|
||
|
|
assert.deepEqual(openQueue(encrypted, 'signing-key', 'bugcollect-queue|app', 0), [issue])
|
||
|
|
assert.throws(() => openQueue(encrypted, 'signing-key', 'bugcollect-queue|other', 0))
|
||
|
|
const parts = encrypted.split('.')
|
||
|
|
parts[2] = `${parts[2][0] === 'A' ? 'B' : 'A'}${parts[2].slice(1)}`
|
||
|
|
assert.throws(() => openQueue(parts.join('.'), 'signing-key', 'bugcollect-queue|app', 0))
|
||
|
|
})
|
||
|
|
|
||
|
|
test('platform disabled response recognizes the deployed message contract', () => {
|
||
|
|
assert.equal(
|
||
|
|
isBugCollectDisabledPayload({
|
||
|
|
code: 403,
|
||
|
|
status: '1',
|
||
|
|
message: 'BUGCOLLECT_DISABLED',
|
||
|
|
}),
|
||
|
|
true,
|
||
|
|
)
|
||
|
|
assert.equal(isBugCollectDisabledPayload({ code: 'BUGCOLLECT_DISABLED' }), true)
|
||
|
|
assert.equal(isBugCollectDisabledPayload({ code: 403, message: 'forbidden' }), false)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('cold-start disable removes a persisted queue before LogQueue is created', async () => {
|
||
|
|
const removed: string[] = []
|
||
|
|
await clearStoredQueue(
|
||
|
|
{
|
||
|
|
async removeItem(key) {
|
||
|
|
removed.push(key)
|
||
|
|
},
|
||
|
|
},
|
||
|
|
'app',
|
||
|
|
)
|
||
|
|
assert.deepEqual(removed, ['@xuqm_bugcollect:queue:app'])
|
||
|
|
})
|