hostToolSettings.test.ts 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // @vitest-environment node
  2. import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
  3. import { tmpdir } from 'node:os'
  4. import { join } from 'node:path'
  5. import { afterEach, describe, expect, it } from 'vitest'
  6. import { deniedHostToolsets, readHostTools, saveHostTools } from '../../src/server/hostToolSettings'
  7. let home = ''
  8. afterEach(() => { if (home) rmSync(home, { recursive: true, force: true }) })
  9. describe('host tool settings', () => {
  10. it('uses one global approval policy and retires the ineffective native-tool switch', () => {
  11. home = mkdtempSync(join(tmpdir(), 'yaoyao-host-tools-'))
  12. expect(readHostTools(home)).toEqual({ denyServerTools: false, approvalPolicy:'ask', scriptMachine: true, serverComputer: true, vm: true, cloud: true, managedBrowser:false, fileTransferMaxMiB:25 })
  13. expect(deniedHostToolsets(home)).toEqual([])
  14. saveHostTools(home,{approvalPolicy:'allow',cloud:false})
  15. expect(saveHostTools(home,{denyServerTools:true})).toMatchObject({denyServerTools:false,approvalPolicy:'allow',cloud:false})
  16. expect(()=>saveHostTools(home,{approvalPolicy:'invalid'})).toThrow('审批策略无效')
  17. writeFileSync(join(home, 'host-tools.json'), '{')
  18. expect(()=>readHostTools(home)).toThrow('无法读取')
  19. })
  20. it('keeps old files that only stored the server-tool switch', () => {
  21. home = mkdtempSync(join(tmpdir(), 'yaoyao-host-tools-'))
  22. writeFileSync(join(home, 'host-tools.json'), JSON.stringify({ denyServerTools: true }))
  23. expect(readHostTools(home).scriptMachine).toBe(true)
  24. expect(readHostTools(home).managedBrowser).toBe(false)
  25. expect(saveHostTools(home, { denyServerTools: true, scriptMachine: false, serverComputer: true, vm: false, cloud: true })).toMatchObject({ scriptMachine: false, vm: false, cloud: true })
  26. })
  27. it('enables managed browsing explicitly without changing other environments or losing it on old-client saves',()=>{
  28. home=mkdtempSync(join(tmpdir(),'yaoyao-host-tools-'))
  29. expect(saveHostTools(home,{managedBrowser:true,vm:false})).toMatchObject({managedBrowser:true,vm:false,cloud:true,serverComputer:true})
  30. expect(saveHostTools(home,{cloud:false})).toMatchObject({managedBrowser:true,vm:false,cloud:false})
  31. expect(()=>saveHostTools(home,{managedBrowser:'true'})).toThrow('浏览器开关无效')
  32. })
  33. it('validates transfer limits and preserves them when an older client saves switches', () => {
  34. home = mkdtempSync(join(tmpdir(), 'yaoyao-host-tools-'))
  35. for (const fileTransferMaxMiB of [0, 101, 1.5, '25', null, NaN, Infinity]) expect(() => saveHostTools(home, { fileTransferMaxMiB })).toThrow('1–100')
  36. saveHostTools(home, { fileTransferMaxMiB: 100 })
  37. expect(saveHostTools(home, { cloud: false }).fileTransferMaxMiB).toBe(100)
  38. expect(readHostTools(home).fileTransferMaxMiB).toBe(100)
  39. expect(saveHostTools(home, { fileTransferMaxMiB: 1 }).fileTransferMaxMiB).toBe(1)
  40. })
  41. })