test: stabilize storage loss validation races
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s

This commit is contained in:
mesalogo
2026-10-08 00:39:03 +08:00
parent 7eb51bd5ff
commit 384683e861
4 changed files with 4 additions and 2 deletions
@@ -17,6 +17,7 @@ app.setPath('userData', join(root, 'electron'))
async function run(): Promise<void> { async function run(): Promise<void> {
await app.whenReady() await app.whenReady()
await chmod(root, 0o700)
const options = { assistantPath: join(root, 'assistant.sqlite'), knowledgePath: join(root, 'knowledge.sqlite'), const options = { assistantPath: join(root, 'assistant.sqlite'), knowledgePath: join(root, 'knowledge.sqlite'),
defaultRootPath: root, userDataPath: root, entryPath: join(root, 'desktop-storage-entry.mjs'), defaultRootPath: root, userDataPath: root, entryPath: join(root, 'desktop-storage-entry.mjs'),
readerWorkerPath: join(root, 'readonly-query-worker.cjs'), upgradeWorkerPath: join(root, 'assistant-storage-worker.cjs') } readerWorkerPath: join(root, 'readonly-query-worker.cjs'), upgradeWorkerPath: join(root, 'assistant-storage-worker.cjs') }
+1
View File
@@ -94,6 +94,7 @@ it('awaits a termination already in progress before close settles or capacity ca
const transport = new DelayedTransport() const transport = new DelayedTransport()
const reader = new ReadonlyQueryReader('assistant', '', '', Date.now, { createTransport: () => transport }) const reader = new ReadonlyQueryReader('assistant', '', '', Date.now, { createTransport: () => transport })
const pending = reader.call('assistant.save', []) const pending = reader.call('assistant.save', [])
await Promise.resolve()
const rejected = expect(pending).rejects.toMatchObject({ code: 'STORAGE_UNCONFIRMED' }) const rejected = expect(pending).rejects.toMatchObject({ code: 'STORAGE_UNCONFIRMED' })
transport.emit('error', new Error('host failed')) transport.emit('error', new Error('host failed'))
reader.resetBackoffForTest() reader.resetBackoffForTest()
+1 -1
View File
@@ -258,7 +258,7 @@ describe('assistant readonly worker', () => {
// Termination races the response. Either outcome is valid here; the // Termination races the response. Either outcome is valid here; the
// dedicated crash tests cover deterministic rejection propagation. // dedicated crash tests cover deterministic rejection propagation.
await inFlight.then( await inFlight.then(
result => expect(result).toEqual(expected[1]), result => expect(result).toEqual(database.listConversationSummaries([conversations[3]!.id])),
error => expect(error).toBeInstanceOf(ReadonlyWorkerUnavailableError), error => expect(error).toBeInstanceOf(ReadonlyWorkerUnavailableError),
) )
} finally { database.close() } } finally { database.close() }
+1 -1
View File
@@ -1892,7 +1892,7 @@ describe('SettingsPanel runtime files', () => {
const modelName = kind === 'embedding' ? embeddingCatalogEntry.displayName : speechCatalog[0]!.displayName const modelName = kind === 'embedding' ? embeddingCatalogEntry.displayName : speechCatalog[0]!.displayName
const download = await screen.findByRole('button', { name: `下载 ${modelName}` }) const download = await screen.findByRole('button', { name: `下载 ${modelName}` })
expect(screen.queryByText('当前来源不可下载')).not.toBeInTheDocument() expect(screen.queryByText('当前来源不可下载')).not.toBeInTheDocument()
expect(screen.getByRole('button', { name: '模型下载源' })).toHaveFocus() await waitFor(() => expect(screen.getByRole('button', { name: '模型下载源' })).toHaveFocus())
fireEvent.click(download) fireEvent.click(download)
await waitFor(() => { await waitFor(() => {
if (kind === 'embedding') expect(installEmbeddingModel).toHaveBeenCalledWith(embeddingCatalogEntry.id, 'hugging-face') if (kind === 'embedding') expect(installEmbeddingModel).toHaveBeenCalledWith(embeddingCatalogEntry.id, 'hugging-face')