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