| 12345678910111213141516171819202122232425262728 |
- // 服务关闭:有 SSE 推送连接时 server.close() 不能一直等待(否则 systemd 等 90 秒后强制结束)
- import type { AddressInfo } from 'node:net'
- import pino from 'pino'
- import { expect, it } from 'vitest'
- import { createApp } from '../src/app'
- import { buildServer } from '../src/http/server'
- it('关闭服务时主动结束 SSE 推送', async () => {
- const log = pino({ level: 'silent' })
- const app = createApp(log, { providers: {} })
- const server = await buildServer(app, { logger: log })
- await server.listen({ host: '127.0.0.1', port: 0 })
- const base = `http://127.0.0.1:${(server.server.address() as AddressInfo).port}`
- const builtin = app.profiles.getBuiltin().id
- const key = app.apiKeys.create('shutdown', { allowedProfileIds: [builtin], defaultProfileId: builtin })
- const s = await app.sessions.create(key.apiKey.id, {})
- const res = await fetch(`${base}/v1/sessions/${s.id}/stream`, { headers: { authorization: `Bearer ${key.key}` } })
- expect(res.status).toBe(200)
- const reader = res.body!.getReader()
- await reader.read()
- const t0 = Date.now()
- await server.close()
- expect(Date.now() - t0).toBeLessThan(1000)
- // 客户端看到流结束(随后会按 retry 重连到新进程)
- let done = false
- while (!done) done = (await reader.read()).done
- })
|