mirror of https://github.com/lukechilds/node.git
David Sklar
15 years ago
committed by
Ryan Dahl
4 changed files with 364 additions and 24 deletions
@ -0,0 +1,37 @@ |
|||
process.mixin(require("../common")); |
|||
net = require("net"); |
|||
|
|||
process.Buffer.prototype.toString = function () { |
|||
return this.utf8Slice(0, this.length); |
|||
}; |
|||
|
|||
|
|||
path = process.ARGV[2]; |
|||
greeting = process.ARGV[3]; |
|||
|
|||
receiver = net.createServer(function(socket) { |
|||
socket.addListener("fd", function(fd) { |
|||
var peerInfo = process.getpeername(fd); |
|||
peerInfo.fd = fd; |
|||
var passedSocket = new net.Socket(peerInfo); |
|||
|
|||
passedSocket.addListener("eof", function() { |
|||
passedSocket.close(); |
|||
}); |
|||
|
|||
passedSocket.addListener("data", function(data) { |
|||
passedSocket.send("[echo] " + data); |
|||
}); |
|||
passedSocket.addListener("close", function() { |
|||
receiver.close(); |
|||
}); |
|||
passedSocket.send("[greeting] " + greeting); |
|||
}); |
|||
}); |
|||
|
|||
/* To signal the test runne we're up and listening */ |
|||
receiver.addListener("listening", function() { |
|||
print("ready"); |
|||
}); |
|||
|
|||
receiver.listen(path); |
@ -0,0 +1,67 @@ |
|||
process.mixin(require("./common")); |
|||
net = require("net"); |
|||
|
|||
process.Buffer.prototype.toString = function () { |
|||
return this.utf8Slice(0, this.length); |
|||
}; |
|||
|
|||
var tests_run = 0; |
|||
|
|||
function fdPassingTest(path, port) { |
|||
var greeting = "howdy"; |
|||
var message = "beep toot"; |
|||
var expectedData = ["[greeting] " + greeting, "[echo] " + message]; |
|||
|
|||
puts(fixturesDir); |
|||
var receiverArgs = [fixturesDir + "/net-fd-passing-receiver.js", path, greeting]; |
|||
var receiver = process.createChildProcess(process.ARGV[0], receiverArgs); |
|||
|
|||
var initializeSender = function() { |
|||
var fdHighway = new net.Socket(); |
|||
fdHighway.connect(path); |
|||
|
|||
var sender = net.createServer(function(socket) { |
|||
fdHighway.sendFD(socket); |
|||
socket.flush(); |
|||
socket.forceClose(); // want to close() the fd, not shutdown()
|
|||
}); |
|||
|
|||
sender.addListener("listening", function() { |
|||
var client = net.createConnection(port); |
|||
|
|||
client.addListener("connect", function() { |
|||
client.send(message); |
|||
}); |
|||
|
|||
client.addListener("data", function(data) { |
|||
assert.equal(expectedData[0], data); |
|||
if (expectedData.length > 1) { |
|||
expectedData.shift(); |
|||
} |
|||
else { |
|||
// time to shut down
|
|||
fdHighway.close(); |
|||
sender.close(); |
|||
client.forceClose(); |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
tests_run += 1; |
|||
sender.listen(port); |
|||
}; |
|||
|
|||
receiver.addListener("output", function(data) { |
|||
var initialized = false; |
|||
if ((! initialized) && (data == "ready")) { |
|||
initializeSender(); |
|||
initialized = true; |
|||
} |
|||
}); |
|||
} |
|||
|
|||
fdPassingTest("/tmp/passing-socket-test", 31075); |
|||
|
|||
process.addListener("exit", function () { |
|||
assert.equal(1, tests_run); |
|||
}); |
Loading…
Reference in new issue