mirror of
https://github.com/EKKOLearnAI/hermes-web-ui.git
synced 2026-07-10 02:30:15 +00:00
59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
describe('LAN peer tools service', () => {
|
|
afterEach(() => {
|
|
vi.resetModules()
|
|
vi.doUnmock('../../packages/server/src/services/lan-peer-socket')
|
|
})
|
|
|
|
it('rejects remote tool calls on passive server-side peer connections', async () => {
|
|
const execRemoteCommand = vi.fn()
|
|
vi.doMock('../../packages/server/src/services/lan-peer-socket', () => ({
|
|
getLanPeerSocketManager: () => ({
|
|
getConnection: () => ({
|
|
info: () => ({ role: 'server' }),
|
|
execRemoteCommand,
|
|
}),
|
|
}),
|
|
}))
|
|
|
|
const { getLanPeerToolsService } = await import('../../packages/server/src/services/lan-peer-tools')
|
|
|
|
expect(() => getLanPeerToolsService().exec({
|
|
connectionId: 'server-side-connection',
|
|
command: 'id',
|
|
})).toThrow('Peer connection is not authorized for remote tools')
|
|
expect(execRemoteCommand).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('allows remote tool calls on active client-side peer connections', async () => {
|
|
const execRemoteCommand = vi.fn(async () => ({
|
|
stdout: 'ok',
|
|
stderr: '',
|
|
exit_code: 0,
|
|
timed_out: false,
|
|
}))
|
|
vi.doMock('../../packages/server/src/services/lan-peer-socket', () => ({
|
|
getLanPeerSocketManager: () => ({
|
|
getConnection: () => ({
|
|
info: () => ({ role: 'client' }),
|
|
execRemoteCommand,
|
|
}),
|
|
}),
|
|
}))
|
|
|
|
const { getLanPeerToolsService } = await import('../../packages/server/src/services/lan-peer-tools')
|
|
const result = await getLanPeerToolsService().exec({
|
|
connectionId: 'client-side-connection',
|
|
command: 'id',
|
|
args: ['-u'],
|
|
})
|
|
|
|
expect(result.stdout).toBe('ok')
|
|
expect(execRemoteCommand).toHaveBeenCalledWith(expect.objectContaining({
|
|
command: 'id',
|
|
args: ['-u'],
|
|
}))
|
|
})
|
|
})
|