Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { RendererWorker } from '@lvce-editor/rpc-registry'
import type { ProcessExplorerState } from '../ProcessExplorerState/ProcessExplorerState.ts'
import * as Signal from '../Signal/Signal.ts'
import * as ProcessExplorer from '../ProcessExplorer/ProcessExplorer.ts'

export const killProcess = async (
state: ProcessExplorerState,
Expand All @@ -10,6 +9,6 @@ export const killProcess = async (
if (!process) {
return state
}
await RendererWorker.invoke('Process.kill', process.pid, Signal.SigTerm)
await ProcessExplorer.invoke('Process.kill', process.pid)
return state
}

This file was deleted.

23 changes: 20 additions & 3 deletions packages/process-explorer-worker/test/ProcessCommands.test.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,26 @@
import { expect, jest, test } from '@jest/globals'
import { createMockRpc } from '@lvce-editor/rpc'
import { RendererWorker } from '@lvce-editor/rpc-registry'
import { createDefaultState } from '../src/parts/CreateDefaultState/CreateDefaultState.ts'
import * as DebugProcess from '../src/parts/DebugProcess/DebugProcess.ts'
import * as GetVisibleProcesses from '../src/parts/GetVisibleProcesses/GetVisibleProcesses.ts'
import * as KillProcess from '../src/parts/KillProcess/KillProcess.ts'
import * as ProcessExplorer from '../src/parts/ProcessExplorer/ProcessExplorer.ts'

interface DisposableMockRpc {
[Symbol.dispose](): void
}

const registerProcessExplorerMock = (
commandMap: Record<string, unknown>,
): DisposableMockRpc => {
ProcessExplorer.set(createMockRpc({ commandMap }))
return {
[Symbol.dispose](): void {
ProcessExplorer.clear()
},
}
}

const processes = [
{
Expand All @@ -24,20 +41,20 @@ const processes = [

test('killProcess', async () => {
const kill = jest.fn()
using _mockRpc = RendererWorker.registerMockRpc({
using _mockRpc = registerProcessExplorerMock({
'Process.kill': kill,
})
const state = {
...createDefaultState(),
visibleProcesses: GetVisibleProcesses.getVisibleProcesses(processes, [], 1),
}
await expect(KillProcess.killProcess(state, 0)).resolves.toBe(state)
expect(kill).toHaveBeenCalledWith(1, 'SIGTERM')
expect(kill).toHaveBeenCalledWith(1)
})

test('killProcess - missing process', async () => {
const kill = jest.fn()
using _mockRpc = RendererWorker.registerMockRpc({
using _mockRpc = registerProcessExplorerMock({
'Process.kill': kill,
})
const state = createDefaultState()
Expand Down
2 changes: 2 additions & 0 deletions packages/process-explorer/src/parts/CommandMap/CommandMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as HandleElectronMessagePort from '../HandleElectronMessagePort/HandleE
import * as HandleMessagePort from '../HandleMessagePort/HandleMessagePort.ts'
import * as HandleSocket from '../HandleSocket/HandleSocket.ts'
import * as HandleWebSocket from '../HandleWebSocket/HandleWebSocket.ts'
import * as KillProcess from '../KillProcess/KillProcess.ts'
import * as ListProcessesWithMemoryUsage from '../ListProcessesWithMemoryUsage/ListProcessesWithMemoryUsage.ts'
import * as ProcessId from '../ProcessId/ProcessId.ts'

Expand All @@ -13,5 +14,6 @@ export const commandMap = {
'HandleWebSocket.handleWebSocket': HandleWebSocket.handleWebSocket,
'ListProcessesWithMemoryUsage.listProcessesWithMemoryUsage':
ListProcessesWithMemoryUsage.listProcessesWithMemoryUsage,
'Process.kill': KillProcess.killProcess,
'ProcessId.getMainProcessId': ProcessId.getMainProcessId,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import * as Process from '../Process/Process.ts'
import * as Signal from '../Signal/Signal.ts'

export const killProcess = (pid: number): void => {
Process.kill(pid, Signal.SIGTERM)
}
3 changes: 3 additions & 0 deletions packages/process-explorer/src/parts/Process/Process.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const kill = (pid: number, signal: NodeJS.Signals): void => {
process.kill(pid, signal)
}
1 change: 1 addition & 0 deletions packages/process-explorer/src/parts/Signal/Signal.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export const SIGINT = 'SIGINT'
export const SIGTERM = 'SIGTERM'
2 changes: 2 additions & 0 deletions packages/process-explorer/test/CommandMapRpc.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as HandleElectronMessagePort from '../src/parts/HandleElectronMessagePo
import * as HandleMessagePort from '../src/parts/HandleMessagePort/HandleMessagePort.ts'
import * as HandleSocket from '../src/parts/HandleSocket/HandleSocket.ts'
import * as HandleWebSocket from '../src/parts/HandleWebSocket/HandleWebSocket.ts'
import * as KillProcess from '../src/parts/KillProcess/KillProcess.ts'

test('commandMap exposes rpc handoff commands', () => {
expect(
Expand All @@ -20,4 +21,5 @@ test('commandMap exposes rpc handoff commands', () => {
expect(CommandMap.commandMap['HandleWebSocket.handleWebSocket']).toBe(
HandleWebSocket.handleWebSocket,
)
expect(CommandMap.commandMap['Process.kill']).toBe(KillProcess.killProcess)
})
13 changes: 13 additions & 0 deletions packages/process-explorer/test/KillProcess.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { expect, jest, test } from '@jest/globals'
import * as KillProcess from '../src/parts/KillProcess/KillProcess.ts'

test('killProcess', () => {
const kill = jest.spyOn(process, 'kill').mockImplementation(() => true)

try {
KillProcess.killProcess(123)
expect(kill).toHaveBeenCalledWith(123, 'SIGTERM')
} finally {
kill.mockRestore()
}
})