UNPKG

@revoloo/cypress6

Version:

Cypress.io end to end testing tool

197 lines (177 loc) 4.75 kB
import '../../spec_helper' import _ from 'lodash' import si from 'systeminformation' import { expect } from 'chai' import { _groupCyProcesses, _renameBrowserGroup, _aggregateGroups, _reset, } from '../../../lib/util/process_profiler' import sinon from 'sinon' import snapshot from 'snap-shot-it' const browsers = require('../../../lib/browsers') const plugins = require('../../../lib/plugins') const BROWSER_PID = 11111 const SUB_BROWSER_PID = 11112 const GUI_PID = 77777 const PLUGIN_PID = 22222 const SUB_PLUGIN_PID = 22223 const FFMPEG_PID = 33333 const MAIN_PID = process.pid const OTHER_PID = 66666 const ANOTHER_PID = 88888 const LAUNCHER_PID = 55555 const SHARED_BROKER_PID = 99990 const SHARED_GPU_PID = 99991 const SHARED_UTILITY_PID = 99992 const SHARED_ZYGOTE_PID = 99993 const PROCESSES: Partial<si.Systeminformation.ProcessesProcessData>[] = [ { pid: MAIN_PID, parentPid: LAUNCHER_PID, params: '', name: 'Cypress', }, { pid: BROWSER_PID, parentPid: MAIN_PID, params: '', name: 'firefox', }, { pid: SUB_BROWSER_PID, parentPid: BROWSER_PID, params: '', name: 'firefox-bin', }, { pid: GUI_PID, parentPid: MAIN_PID, params: '--type=renderer', name: 'Cypress', }, { pid: PLUGIN_PID, parentPid: MAIN_PID, params: 'plugin.js', name: 'node', }, { pid: SUB_PLUGIN_PID, parentPid: PLUGIN_PID, params: '', name: 'msword.exe', }, { pid: FFMPEG_PID, parentPid: MAIN_PID, params: '', name: 'ffmpeg', }, { pid: OTHER_PID, parentPid: MAIN_PID, params: '', name: 'foo', }, { pid: ANOTHER_PID, parentPid: MAIN_PID, params: '', name: 'bar', }, { pid: SHARED_GPU_PID, parentPid: MAIN_PID, params: '--type=gpu-process', name: 'Cypress', }, { pid: SHARED_BROKER_PID, parentPid: MAIN_PID, params: '--type=broker', name: 'Cypress', }, { pid: SHARED_UTILITY_PID, parentPid: MAIN_PID, params: '--type=utility', name: 'Cypress', }, { pid: SHARED_ZYGOTE_PID, parentPid: MAIN_PID, params: '--type=zygote', name: 'Cypress', }, ] describe('lib/util/process_profiler', function () { beforeEach(() => { _reset() }) context('._groupCyProcesses', () => { it('groups correctly', () => { sinon.stub(browsers, 'getBrowserInstance').returns({ pid: BROWSER_PID }) sinon.stub(plugins, 'getPluginPid').returns(PLUGIN_PID) // @ts-ignore const groupedProcesses = _groupCyProcesses({ list: PROCESSES }) const checkGroup = (pid, group) => { expect(_.find(groupedProcesses, { pid })) .to.have.property('group') .eq(group) } checkGroup(BROWSER_PID, 'browser') checkGroup(SUB_BROWSER_PID, 'browser') checkGroup(GUI_PID, 'desktop-gui') checkGroup(PLUGIN_PID, 'plugin') checkGroup(SUB_PLUGIN_PID, 'plugin') checkGroup(FFMPEG_PID, 'ffmpeg') checkGroup(MAIN_PID, 'cypress') checkGroup(OTHER_PID, 'other') checkGroup(ANOTHER_PID, 'other') checkGroup(SHARED_GPU_PID, 'electron-shared') checkGroup(SHARED_BROKER_PID, 'electron-shared') checkGroup(SHARED_UTILITY_PID, 'electron-shared') checkGroup(SHARED_ZYGOTE_PID, 'electron-shared') }) }) context('._renameBrowserGroup', () => { it('renames browser-grouped processes to correct name', () => { sinon.stub(browsers, 'getBrowserInstance').returns({ browser: { displayName: 'FooBrowser' } }) const processes = [ { group: 'foo' }, { group: 'bar' }, { group: 'browser', pid: 1 }, { group: 'browser', pid: 2 }, ] const expected = [ { group: 'foo' }, { group: 'bar' }, { group: 'FooBrowser', pid: 1 }, { group: 'FooBrowser', pid: 2 }, ] // @ts-ignore expect(_renameBrowserGroup(processes)).to.deep.eq(expected) }) }) context('._aggregateGroups', () => { it('aggregates groups as expected', () => { sinon.stub(browsers, 'getBrowserInstance').returns({ pid: BROWSER_PID }) sinon.stub(plugins, 'getPluginPid').returns(PLUGIN_PID) const processes = _.cloneDeep(PROCESSES) .map((proc) => { // add some dummy measurements so there is data to aggregate proc.memRss = 10 * 1024 // 10mb proc.cpu = 20 return proc }) // @ts-ignore const result = _aggregateGroups(_groupCyProcesses({ list: processes })) // main process will have variable pid, replace it w constant for snapshotting _.find(result, { pids: String(MAIN_PID) }).pids = '111111111' // @ts-ignore snapshot(result) }) }) })