mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-09-14 04:01:35 +00:00
104 lines
4.1 KiB
TypeScript
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)
|
|
})
|
|
})
|