nodejs/test/parallel/test-cluster-http-pipe.js
Ben Noordhuis f337595441 lib,src: add unix socket getsockname/getpeername
The implementation is a minor API change in that socket.address() now
returns a `{ address: '/path/to/socket' }` object, like it does for TCP
and UDP sockets.  Before this commit, it returned `socket._pipeName`,
which is a string when present.

Change common.PIPE on Windows from '\\\\.\\pipe\\libuv-test' to
'\\\\?\\pipe\\libuv-test'.  Windows converts the '.' to a '?' when
creating a named pipe, meaning that common.PIPE didn't match the
result from NtQueryInformationFile().

Fixes: https://github.com/nodejs/node/issues/954
PR-URL: https://github.com/nodejs/node/pull/956
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
2015-08-27 17:45:04 +02:00

50 lines
1.2 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const cluster = require('cluster');
const http = require('http');
if (common.isWindows) {
console.log('1..0 # Skipped: It is not possible to send pipe handles over ' +
'the IPC pipe on Windows');
return;
}
if (cluster.isMaster) {
common.refreshTmpDir();
var ok = false;
var worker = cluster.fork();
worker.on('message', function(msg) {
assert.equal(msg, 'DONE');
ok = true;
});
worker.on('exit', function() {
process.exit();
});
process.on('exit', function() {
assert(ok);
});
return;
}
http.createServer(function(req, res) {
assert.equal(req.connection.remoteAddress, '');
assert.equal(req.connection.remoteFamily, 'pipe');
assert.equal(req.connection.remotePort, undefined);
assert.equal(req.connection.localAddress, common.PIPE);
assert.equal(req.connection.localPort, undefined);
res.writeHead(200);
res.end('OK');
}).listen(common.PIPE, function() {
var self = this;
http.get({ socketPath: common.PIPE, path: '/' }, function(res) {
res.resume();
res.on('end', function(err) {
if (err) throw err;
process.send('DONE');
process.exit();
});
});
});