* feat: better hardware setting * chore: update layout * feat: better hardware setting * chore: fix title section * chore: added hardware engine management * chore: integrate gpus and enable set gpu activate * chore: update calculate ram and vram * chore: update calulate vram and ram used * fix: set active gpus * chore: fix progress bar spacing * chore: always update cache vram gpu * chore: update cpu usage percentage * chore: fix type usage cpu * chore: update ram cpus usage getsystemmonitor from new api harware engine management system * test: update test case data using hardware management extension * chore: resolve conflict lock json * chore: cleanup app services * chore: update type OperationSystemInfo * chore: update app service * chore: show list gpus on system monitor * chore: remove monitoring extension * chore: update test case app service * chore: remove unused hooks useGpusSetting * chore: remove monitor from shource index * chore: fix test core * chore: update gpu and cpu info on engine management ext * chore: fix app service test * chore: update test appService include cpu info * chore: filter gpus show or hide on system monitor based activated gpu * chore: remove unused run_mode * chore: remove tensort * chore: update check gpu run_mode * chore: handle undefined gpus * chore: cleanup PR * chore: cleanup process node error * chore: fix type
128 lines
3.5 KiB
TypeScript
128 lines
3.5 KiB
TypeScript
/**
|
|
* @jest-environment jsdom
|
|
*/
|
|
import '@testing-library/jest-dom'
|
|
import React from 'react'
|
|
import { render, screen, waitFor } from '@testing-library/react'
|
|
import SystemMonitor from './index'
|
|
import { useAtom, useAtomValue } from 'jotai'
|
|
import {
|
|
cpuUsageAtom,
|
|
gpusAtom,
|
|
totalRamAtom,
|
|
usedRamAtom,
|
|
} from '@/helpers/atoms/SystemBar.atom'
|
|
import useGetSystemResources from '@/hooks/useGetSystemResources'
|
|
|
|
// Mock dependencies
|
|
jest.mock('jotai', () => ({
|
|
useAtomValue: jest.fn(),
|
|
useSetAtom: jest.fn(),
|
|
useAtom: jest.fn(),
|
|
atom: jest.fn(),
|
|
}))
|
|
|
|
// Mock the hooks and atoms
|
|
jest.mock('@/hooks/useGetSystemResources')
|
|
|
|
jest.mock('@/hooks/usePath', () => ({
|
|
usePath: () => ({ onRevealInFinder: jest.fn() }),
|
|
}))
|
|
|
|
jest.mock('@/helpers/atoms/App.atom', () => ({
|
|
showSystemMonitorPanelAtom: { init: false },
|
|
}))
|
|
|
|
jest.mock('@/helpers/atoms/Setting.atom', () => ({
|
|
reduceTransparentAtom: { init: false },
|
|
}))
|
|
|
|
jest.mock('@/helpers/atoms/SystemBar.atom', () => ({
|
|
totalRamAtom: { init: 16000000000 },
|
|
usedRamAtom: { init: 8000000000 },
|
|
cpuUsageAtom: { init: 50 },
|
|
gpusAtom: { init: [] },
|
|
ramUtilitizedAtom: { init: 50 },
|
|
}))
|
|
|
|
describe('SystemMonitor', () => {
|
|
const mockWatch = jest.fn()
|
|
const mockStopWatching = jest.fn()
|
|
beforeAll(() => {
|
|
jest.clearAllMocks()
|
|
;(useGetSystemResources as jest.Mock).mockReturnValue({
|
|
watch: mockWatch,
|
|
stopWatching: mockStopWatching,
|
|
})
|
|
})
|
|
it('renders without crashing', () => {
|
|
;(useAtom as jest.Mock).mockReturnValue([false, jest.fn()])
|
|
render(<SystemMonitor />)
|
|
expect(screen.getByText('System Monitor')).toBeInTheDocument()
|
|
})
|
|
|
|
it('renders information on expand', () => {
|
|
const mockGpusAtom = jest.fn()
|
|
const mockShowPanel = jest.fn()
|
|
;(useAtom as jest.Mock).mockImplementation(mockShowPanel)
|
|
// Mock Jotai hooks
|
|
;(useAtomValue as jest.Mock).mockImplementation((atom) => {
|
|
switch (atom) {
|
|
case totalRamAtom:
|
|
return 16000000000
|
|
case usedRamAtom:
|
|
return 8000000000
|
|
case cpuUsageAtom:
|
|
return 30
|
|
case gpusAtom:
|
|
return mockGpusAtom
|
|
default:
|
|
return jest.fn()
|
|
}
|
|
})
|
|
mockGpusAtom.mockImplementation(() => [])
|
|
mockShowPanel.mockImplementation(() => [true, jest.fn()])
|
|
|
|
render(<SystemMonitor />)
|
|
|
|
expect(screen.getByText('Running Models')).toBeInTheDocument()
|
|
expect(screen.getByText('App Log')).toBeInTheDocument()
|
|
expect(screen.getByText('7.45GB / 14.90GB')).toBeInTheDocument()
|
|
expect(screen.getByText('30%')).toBeInTheDocument()
|
|
})
|
|
|
|
it('it should not request system resource on close', async () => {
|
|
const mockGpusAtom = jest.fn()
|
|
const mockShowPanel = jest.fn()
|
|
;(useAtom as jest.Mock).mockImplementation(mockShowPanel)
|
|
|
|
// Mock Jotai hooks
|
|
;(useAtomValue as jest.Mock).mockImplementation((atom) => {
|
|
switch (atom) {
|
|
case totalRamAtom:
|
|
return 16000000000
|
|
case usedRamAtom:
|
|
return 8000000000
|
|
case cpuUsageAtom:
|
|
return 30
|
|
case gpusAtom:
|
|
return mockGpusAtom
|
|
default:
|
|
return jest.fn()
|
|
}
|
|
})
|
|
mockGpusAtom.mockImplementation(() => [])
|
|
mockShowPanel.mockImplementation(() => [true, jest.fn()])
|
|
|
|
await waitFor(async () => {
|
|
await render(<SystemMonitor />)
|
|
|
|
const toggle = screen.getByTestId('system-monitoring')
|
|
toggle.click()
|
|
})
|
|
|
|
expect(mockWatch).not.toHaveBeenCalled()
|
|
expect(mockStopWatching).toHaveBeenCalled()
|
|
})
|
|
})
|