Files
deepseek-harness/apps/desktop/tests/core-package-set.spec.ts
T

104 lines
4.1 KiB
TypeScript

import { createHash } from 'node:crypto'
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import {
DESKTOP_PACKAGES_DIR,
DESKTOP_PACKAGE_SET_FILE,
desktopCorePackageOverrides,
desktopDshPackageSpec,
parseDesktopCorePackageSet,
verifyDesktopCoreLockfile,
verifyDesktopCorePackageSet,
type DesktopCorePackageRecord,
} from '../src/core-package-set.ts'
const roots: string[] = []
function record(name: string, file: string, body: Buffer, version = '1.2.3'): DesktopCorePackageRecord {
return {
name,
version,
file,
bytes: body.byteLength,
integrity: `sha512-${createHash('sha512').update(body).digest('base64')}`,
}
}
function packageSetProject(): {
root: string
dsh: DesktopCorePackageRecord
base: DesktopCorePackageRecord
host: DesktopCorePackageRecord
} {
const root = mkdtempSync(join(tmpdir(), 'dsh-desktop-package-set-'))
roots.push(root)
const packageDir = join(root, DESKTOP_PACKAGES_DIR)
mkdirSync(packageDir)
const dshBody = Buffer.from('dsh')
const baseBody = Buffer.from('base')
const hostBody = Buffer.from('host')
const dsh = record('@deepseek-ai/dsh', 'dsh.tgz', dshBody)
const base = record('@deepseek-ai/dsh-base', 'dsh-base.tgz', baseBody)
const host = record('@deepseek-ai/dsh-desktop-host', 'dsh-desktop-host.tgz', hostBody)
writeFileSync(join(packageDir, dsh.file), dshBody)
writeFileSync(join(packageDir, base.file), baseBody)
writeFileSync(join(packageDir, host.file), hostBody)
writeFileSync(join(root, DESKTOP_PACKAGE_SET_FILE), `${JSON.stringify({
schemaVersion: 1,
packages: [dsh, base, host],
})}\n`)
return { root, dsh, base, host }
}
afterEach(() => {
for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true })
})
describe('desktop core package set', () => {
it('pins the direct dsh dependency and every internal package to local tarballs', () => {
const { root } = packageSetProject()
const packageSet = verifyDesktopCorePackageSet(root, '1.2.3')
expect(desktopDshPackageSpec(packageSet)).toBe('file:./desktop-packages/dsh.tgz')
expect(desktopCorePackageOverrides(packageSet)).toEqual({
'@deepseek-ai/dsh': 'file:./desktop-packages/dsh.tgz',
'@deepseek-ai/dsh-base': 'file:./desktop-packages/dsh-base.tgz',
'@deepseek-ai/dsh-desktop-host': 'file:./desktop-packages/dsh-desktop-host.tgz',
})
})
it('rejects version drift, descriptor disorder, corruption, and extra files', () => {
const { root, dsh, base, host } = packageSetProject()
expect(() => verifyDesktopCorePackageSet(root, '2.0.0')).toThrow(/does not match Desktop/u)
expect(() => parseDesktopCorePackageSet({
schemaVersion: 1,
packages: [dsh, base, { ...host, version: '2.0.0' }],
}, '1.2.3')).toThrow(/dsh-desktop-host@2\.0\.0 does not match Desktop 1\.2\.3/u)
expect(() => parseDesktopCorePackageSet({ schemaVersion: 1, packages: [base, dsh, host] }))
.toThrow(/sorted by name/u)
writeFileSync(join(root, DESKTOP_PACKAGES_DIR, dsh.file), 'changed')
expect(() => verifyDesktopCorePackageSet(root, '1.2.3')).toThrow(/integrity check failed/u)
writeFileSync(join(root, DESKTOP_PACKAGES_DIR, 'extra.tgz'), '')
expect(() => verifyDesktopCorePackageSet(root, '1.2.3')).toThrow(/does not match its descriptor/u)
})
it('rejects registry resolutions for names supplied by the local package set', () => {
const dsh = record('@deepseek-ai/dsh', 'dsh.tgz', Buffer.from('dsh'))
const host = record('@deepseek-ai/dsh-desktop-host', 'host.tgz', Buffer.from('host'))
const packageSet = parseDesktopCorePackageSet({ schemaVersion: 1, packages: [dsh, host] })
expect(() => {
verifyDesktopCoreLockfile(
"packages:\n '@deepseek-ai/dsh@file:desktop-packages/dsh.tgz':\n resolution: {}\n",
packageSet,
)
}).not.toThrow()
expect(() => {
verifyDesktopCoreLockfile(
"packages:\n '@deepseek-ai/dsh@1.2.3':\n resolution: {integrity: sha512-registry}\n",
packageSet,
)
}).toThrow(/outside the local package set/u)
})
})