mirror of
https://github.com/oven-sh/bun
synced 2026-02-16 05:42:43 +00:00
Add test for child process send return value and fix header extraction
This commit is contained in:
1
bun
Submodule
1
bun
Submodule
Submodule bun added at f62940bbda
@@ -40,7 +40,7 @@ static StringView extractCookieName(const StringView& cookie)
|
||||
{
|
||||
auto nameEnd = cookie.find('=');
|
||||
if (nameEnd == notFound)
|
||||
return String();
|
||||
return StringView();
|
||||
return cookie.substring(0, nameEnd);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
|
||||
// subprocess.send() will return false if the channel has closed or when the
|
||||
// backlog of unsent messages exceeds a threshold that makes it unwise to send
|
||||
// more. Otherwise, the method returns true.
|
||||
|
||||
const assert = require('assert');
|
||||
const net = require('net');
|
||||
const { fork, spawn } = require('child_process');
|
||||
const fixtures = require('../common/fixtures');
|
||||
|
||||
// Just a script that stays alive (does not listen to `process.on('message')`).
|
||||
const subScript = fixtures.path('child-process-persistent.js');
|
||||
|
||||
{
|
||||
// Test `send` return value on `fork` that opens and IPC by default.
|
||||
const n = fork(subScript);
|
||||
// `subprocess.send` should always return `true` for the first send.
|
||||
const rv = n.send({ h: 'w' }, assert.ifError);
|
||||
assert.strictEqual(rv, true);
|
||||
n.kill('SIGKILL');
|
||||
}
|
||||
|
||||
{
|
||||
// Test `send` return value on `spawn` and saturate backlog with handles.
|
||||
// Call `spawn` with options that open an IPC channel.
|
||||
const spawnOptions = { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] };
|
||||
const s = spawn(process.execPath, [subScript], spawnOptions);
|
||||
|
||||
const server = net.createServer(common.mustNotCall()).listen(0, () => {
|
||||
const handle = server._handle;
|
||||
|
||||
// Sending a handle and not giving the tickQueue time to acknowledge should
|
||||
// create the internal backlog, but leave it empty.
|
||||
const rv1 = s.send('one', handle, (err) => { if (err) assert.fail(err); });
|
||||
assert.strictEqual(rv1, true);
|
||||
// Since the first `send` included a handle (should be unacknowledged),
|
||||
// we can safely queue up only one more message.
|
||||
const rv2 = s.send('two', (err) => { if (err) assert.fail(err); });
|
||||
assert.strictEqual(rv2, true);
|
||||
// The backlog should now be indicate to backoff.
|
||||
const rv3 = s.send('three', (err) => { if (err) assert.fail(err); });
|
||||
assert.strictEqual(rv3, false);
|
||||
const rv4 = s.send('four', (err) => {
|
||||
if (err) assert.fail(err);
|
||||
// `send` queue should have been drained.
|
||||
const rv5 = s.send('5', handle, (err) => { if (err) assert.fail(err); });
|
||||
assert.strictEqual(rv5, true);
|
||||
|
||||
// End test and cleanup.
|
||||
s.kill();
|
||||
handle.close();
|
||||
server.close();
|
||||
});
|
||||
assert.strictEqual(rv4, false);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user