desktopComposeImages.test.ts 1.6 KB

1234567891011121314151617181920212223
  1. // @vitest-environment node
  2. import {it,expect} from 'vitest'
  3. import {readFileSync} from 'node:fs'
  4. // @ts-expect-error Deployment generator is a standalone Node script.
  5. import {generateDesktopCompose} from '../../scripts/generate-desktop-compose.mjs'
  6. import {parseComposeDesktops} from '../../src/server/composeDesktops'
  7. const base=readFileSync(new URL('../../compose.yaml',import.meta.url),'utf8')
  8. const entries=JSON.parse(readFileSync(new URL('../../deploy/compose-desktops.json',import.meta.url),'utf8'))
  9. it('generates different recipes and isolated persistent volumes for two fixed desktops',()=>{
  10. const yaml=generateDesktopCompose(base,[entries[0],{...entries[1],imageKey:'cursor'}])
  11. expect(yaml).toContain('dockerfile: Dockerfile\n')
  12. expect(yaml).toContain('dockerfile: Dockerfile.cursor\n')
  13. expect(yaml).toContain('platform: linux/amd64')
  14. expect(yaml).toContain('YAOYAO_CURSOR_DESKTOP_IMAGE:-yaoyao-desktop:cursor')
  15. expect(yaml).toContain('desktop-1-workspace:/home/cua/workspace')
  16. expect(yaml).toContain('desktop-2-workspace:/home/cua/workspace')
  17. expect(yaml).not.toContain('/var/run/docker.sock')
  18. const line=yaml.split('\n').find((s:string)=>s.includes('HERMES_YAOYAO_COMPOSE_DESKTOPS:'))!
  19. const targets=parseComposeDesktops(JSON.parse(line.slice(line.indexOf(':')+1).trim()))
  20. expect(targets.map(d=>d.imageKey)).toEqual(['standard','cursor'])
  21. expect(targets[0]?.socketPath).not.toBe(targets[1]?.socketPath)
  22. for(const key of ['arbitrary','__proto__','constructor','cursor\n privileged: true'])expect(()=>generateDesktopCompose(base,[{...entries[0],imageKey:key}])).toThrow()
  23. })