fix(server-runtime): enforce auth & routing safety, fix lifecycle leaks (#1686)

This commit is contained in:
Iro
2026-04-22 14:03:16 +08:00
committed by GitHub
parent e165829b19
commit 3f829421d3
13 changed files with 455 additions and 83 deletions
@@ -1,3 +1,4 @@
import { Format, LogLevelString } from '@guiiai/logg'
import { beforeEach, describe, expect, it, vi } from 'vitest'
const serveMocks = vi.hoisted(() => {
@@ -10,15 +11,18 @@ const serveMocks = vi.hoisted(() => {
}))
const closeCall = vi.fn(async () => {})
const disposeCall = vi.fn(() => {})
const setupAppCall = vi.fn(() => ({
app: {
fetch: vi.fn(async () => ({ crossws: {} })),
},
closeAllPeers: vi.fn(),
dispose: disposeCall,
}))
return {
closeCall,
disposeCall,
rejectServe: (error: Error) => rejectServe?.(error),
resolveServe: () => resolveServe?.(),
serveCall,
@@ -77,6 +81,7 @@ describe('createServer', async () => {
serveMocks.rejectServe(new Error('bind failed'))
await expect(firstStart).rejects.toThrow('bind failed')
expect(serveMocks.disposeCall).toHaveBeenCalledTimes(1)
const retryStart = server.start()
expect(serveMocks.serveCall).toHaveBeenCalledTimes(2)
@@ -84,4 +89,37 @@ describe('createServer', async () => {
serveMocks.resolveServe()
await retryStart
})
it('merges nested config updates instead of replacing sibling logger settings', async () => {
const server = createServer({
hostname: '127.0.0.1',
port: 6121,
logger: {
app: { level: LogLevelString.Log },
websocket: { format: Format.Pretty },
},
})
server.updateConfig({
logger: {
app: { format: Format.Pretty },
},
})
const startTask = server.start()
serveMocks.resolveServe()
await startTask
expect(serveMocks.setupAppCall).toHaveBeenCalledWith(expect.objectContaining({
logger: {
app: {
level: LogLevelString.Log,
format: Format.Pretty,
},
websocket: {
format: Format.Pretty,
},
},
}))
})
})