blob: 1172ba757ec906c79c8ca2ff8f4860663da6c6cf [file] [log] [blame]
/*---------------------------------------------------------
* Copyright 2021 The Go Authors. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------*/
import * as assert from 'assert';
import { AttachItem, compareByProcessId, mergeExecutableAttachItem, parseGoVersionOutput } from '../../src/pickProcess';
import { parseLsofProcesses } from '../../src/utils/lsofProcessParser';
suite('Pick Process Tests', () => {
test('Parse go version output', () => {
const tt = [
{
input:
'/path/to/process/a: go1.16.2\n/path/to/process/b: go1.15.4\n/path/to/process/a b c: go1.8.0\n/path/to/process/d: go1.14',
want: ['/path/to/process/a', '/path/to/process/b', '/path/to/process/a b c', '/path/to/process/d']
},
{
input:
'C:\\path\\to\\process\\a: go1.16.2\nC:\\path\\to\\process\\b: go1.15.4\nC:\\path\\to\\process\\a b c: go1.8.0\nC:\\path\\to\\process\\d: go1.14',
want: [
'C:\\path\\to\\process\\a',
'C:\\path\\to\\process\\b',
'C:\\path\\to\\process\\a b c',
'C:\\path\\to\\process\\d'
]
},
{
input: 'go version go1.15.7 darwin/amd64',
want: []
},
{
input:
'/path/to/process/a: go11a62b12\n/path/to/process/b: go1/15/4\n/path/to/process/a b c: gob.v.b\n/path/to/process/d: gp1.14',
want: []
}
];
for (const tc of tt) {
const got = parseGoVersionOutput(tc.input);
assert.strictEqual(got.length, tc.want.length);
for (let i = 0; i < got.length; i++) {
assert.strictEqual(got[i], tc.want[i]);
}
}
});
test('Parse lsof output', () => {
const tt = [
{
input: `p1010
ftxt
n/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer)
ftxt
n/Applications/Visual Studio Code.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework
ftxt
n/Applications/Visual Studio Code.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib
p2020
ftxt
n/User/name/go/bin/go`,
want: [
{
id: '1010',
executable:
'/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer)'
},
{
id: '2020',
executable: '/User/name/go/bin/go'
}
]
}
];
for (const tc of tt) {
const got = parseLsofProcesses(tc.input);
got.sort(compareByProcessId);
assert.strictEqual(got.length, tc.want.length);
for (let i = 0; i < got.length; i++) {
assert.strictEqual(got[i].id, tc.want[i].id);
assert.strictEqual(got[i].executable, tc.want[i].executable);
}
}
});
test('Merge processes', () => {
const tt: {
processes: AttachItem[];
execInfo: AttachItem[];
want: AttachItem[];
}[] = [
{
processes: [
{
id: '100',
processName: 'a',
label: 'a'
},
{
id: '50',
processName: 'b',
label: 'b'
},
{
id: '130',
processName: 'b',
label: 'b'
},
{
id: '300',
processName: 'c',
label: 'c'
}
],
execInfo: [
{
id: '50',
label: '',
executable: '/path/to/b'
},
{
id: '300',
label: '',
executable: '/path/to/c'
}
],
want: [
{
id: '50',
processName: 'b',
label: 'b',
executable: '/path/to/b'
},
{
id: '100',
processName: 'a',
label: 'a'
},
{
id: '130',
processName: 'b',
label: 'b'
},
{
id: '300',
processName: 'c',
label: 'c',
executable: '/path/to/c'
}
]
}
];
for (const tc of tt) {
mergeExecutableAttachItem(tc.processes, tc.execInfo);
tc.processes.sort(compareByProcessId);
assert.strictEqual(tc.processes.length, tc.want.length);
for (let i = 0; i < tc.processes.length; i++) {
assert.strictEqual(tc.processes[i].id, tc.want[i].id);
assert.strictEqual(tc.processes[i].label, tc.want[i].label);
assert.strictEqual(tc.processes[i].processName, tc.want[i].processName);
assert.strictEqual(tc.processes[i].executable, tc.want[i].executable);
}
}
});
});