84 lines
2.6 KiB
TypeScript
84 lines
2.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as assert from 'assert';
|
|
import * as cp from 'child_process';
|
|
import * as objects from 'vs/base/common/objects';
|
|
import * as platform from 'vs/base/common/platform';
|
|
import * as processes from 'vs/base/node/processes';
|
|
import { getPathFromAmdModule } from 'vs/base/test/node/testUtils';
|
|
|
|
function fork(id: string): cp.ChildProcess {
|
|
const opts: any = {
|
|
env: objects.mixin(objects.deepClone(process.env), {
|
|
VSCODE_AMD_ENTRYPOINT: id,
|
|
VSCODE_PIPE_LOGGING: 'true',
|
|
VSCODE_VERBOSE_LOGGING: true
|
|
})
|
|
};
|
|
|
|
return cp.fork(getPathFromAmdModule(require, 'bootstrap-fork'), ['--type=processTests'], opts);
|
|
}
|
|
|
|
suite('Processes', () => {
|
|
test('buffered sending - simple data', function (done: () => void) {
|
|
if (process.env['VSCODE_PID']) {
|
|
return done(); // this test fails when run from within VS Code
|
|
}
|
|
|
|
const child = fork('vs/base/test/node/processes/fixtures/fork');
|
|
const sender = processes.createQueuedSender(child);
|
|
|
|
let counter = 0;
|
|
|
|
const msg1 = 'Hello One';
|
|
const msg2 = 'Hello Two';
|
|
const msg3 = 'Hello Three';
|
|
|
|
child.on('message', msgFromChild => {
|
|
if (msgFromChild === 'ready') {
|
|
sender.send(msg1);
|
|
sender.send(msg2);
|
|
sender.send(msg3);
|
|
} else {
|
|
counter++;
|
|
|
|
if (counter === 1) {
|
|
assert.strictEqual(msgFromChild, msg1);
|
|
} else if (counter === 2) {
|
|
assert.strictEqual(msgFromChild, msg2);
|
|
} else if (counter === 3) {
|
|
assert.strictEqual(msgFromChild, msg3);
|
|
|
|
child.kill();
|
|
done();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
(!platform.isWindows || process.env['VSCODE_PID'] ? test.skip : test)('buffered sending - lots of data (potential deadlock on win32)', function (done: () => void) { // test is only relevant for Windows and seems to crash randomly on some Linux builds
|
|
const child = fork('vs/base/test/node/processes/fixtures/fork_large');
|
|
const sender = processes.createQueuedSender(child);
|
|
|
|
const largeObj = Object.create(null);
|
|
for (let i = 0; i < 10000; i++) {
|
|
largeObj[i] = 'some data';
|
|
}
|
|
|
|
const msg = JSON.stringify(largeObj);
|
|
child.on('message', msgFromChild => {
|
|
if (msgFromChild === 'ready') {
|
|
sender.send(msg);
|
|
sender.send(msg);
|
|
sender.send(msg);
|
|
} else if (msgFromChild === 'done') {
|
|
child.kill();
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
});
|