This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

http: make the client "res" object gets the same domain as "req"

Fixes #4046.
  • Loading branch information...
1 parent 4a26707 commit 0f2ed2bc2c1164a33c39d172960b4aca1be08baa @TooTallNate TooTallNate committed Sep 24, 2012
Showing with 71 additions and 0 deletions.
  1. +6 −0 lib/http.js
  2. +65 −0 test/simple/test-http-client-response-domain.js
View
@@ -1412,6 +1412,12 @@ function parserOnIncomingClient(res, shouldKeepAlive) {
var socket = this.socket;
var req = socket._httpMessage;
+ // propogate "domain" setting...
+ if (req.domain && !res.domain) {
+ debug('setting "res.domain"');
+ res.domain = req.domain;
+ }
+
debug('AGENT incoming response!');
if (req.res) {
@@ -0,0 +1,65 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common'),
+ assert = require('assert'),
+ http = require('http'),
+ domain = require('domain');
+
+var gotDomainError = false;
+var d;
+
+process.on('exit', function() {
+ assert(gotDomainError);
+});
+
+// first fire up a simple HTTP server
+var server = http.createServer(function(req, res) {
+ res.writeHead(200);
+ res.end();
+ server.close();
+});
+server.listen(common.PIPE, function() {
+ // create a domain
+ d = domain.create();
+ d.run(test);
+});
+
+function test() {
+
+ d.on('error', function(err) {
+ gotDomainError = true;
+ assert.equal('should be caught by domain', err.message);
+ });
+
+ var req = http.get({
+ socketPath: common.PIPE,
+ headers: {'Content-Length':'1'},
+ method: 'POST',
+ path: '/'
+ });
+ req.on('response', function(res) {
+ res.on('end', function() {
+ res.emit('error', new Error('should be caught by domain'));
+ });
+ });
+ req.end();
+}

0 comments on commit 0f2ed2b

Please sign in to comment.