diff --git a/request.js b/request.js index 700b9e0a9..af91a11d3 100644 --- a/request.js +++ b/request.js @@ -256,17 +256,7 @@ Request.prototype.init = function (options) { // Support Unix Sockets if (self.uri.host === 'unix') { - // Get the socket & request paths from the URL - var unixParts = self.uri.path.split(':') - , host = unixParts[0] - , path = unixParts[1] - // Apply unix properties to request - self.socketPath = host - self.uri.pathname = path - self.uri.path = path - self.uri.host = host - self.uri.hostname = host - self.uri.isUnix = true + self.enableUnixSocket() } if (self.strictSSL === false) { @@ -1163,6 +1153,10 @@ Request.prototype.qs = function (q, clobber) { self.url = self.uri self.path = self.uri.path + if (self.uri.host === 'unix') { + self.enableUnixSocket() + } + return self } Request.prototype.form = function (form) { @@ -1246,6 +1240,20 @@ Request.prototype.getHeader = function (name, headers) { }) return result } +Request.prototype.enableUnixSocket = function () { + // Get the socket & request paths from the URL + var unixParts = this.uri.path.split(':') + , host = unixParts[0] + , path = unixParts[1] + // Apply unix properties to request + this.socketPath = host + this.uri.pathname = path + this.uri.path = path + this.uri.host = host + this.uri.hostname = host + this.uri.isUnix = true +} + Request.prototype.auth = function (user, pass, sendImmediately, bearer) { var self = this diff --git a/tests/test-unix.js b/tests/test-unix.js index 71395a6bc..7a75023b3 100644 --- a/tests/test-unix.js +++ b/tests/test-unix.js @@ -6,8 +6,11 @@ var request = require('../index') , rimraf = require('rimraf') , assert = require('assert') , tape = require('tape') + , url = require('url') -var path = [null, 'test', 'path'].join('/') +var rawPath = [null, 'raw', 'path'].join('/') + , queryPath = [null, 'query', 'path'].join('/') + , searchString = '?foo=bar' , socket = [__dirname, 'tmp-socket'].join('/') , expectedBody = 'connected' , statusCode = 200 @@ -15,7 +18,20 @@ var path = [null, 'test', 'path'].join('/') rimraf.sync(socket) var s = http.createServer(function(req, res) { - assert.equal(req.url, path, 'requested path is sent to server') + var incomingUrl = url.parse(req.url) + switch (incomingUrl.pathname) { + case rawPath: + assert.equal(incomingUrl.pathname, rawPath, 'requested path is sent to server') + break + + case queryPath: + assert.equal(incomingUrl.pathname, queryPath, 'requested path is sent to server') + assert.equal(incomingUrl.search, searchString, 'query string is sent to server') + break + + default: + assert(false, 'A valid path was requested') + } res.statusCode = statusCode res.end(expectedBody) }) @@ -27,7 +43,21 @@ tape('setup', function(t) { }) tape('unix socket connection', function(t) { - request('http://unix:' + socket + ':' + path, function(err, res, body) { + request( 'http://unix:' + socket + ':' + rawPath, function(err, res, body) { + t.equal(err, null, 'no error in connection') + t.equal(res.statusCode, statusCode, 'got HTTP 200 OK response') + t.equal(body, expectedBody, 'expected response body is received') + t.end() + }) +}) + +tape('unix socket connection with qs', function(t) { + request({ + uri: 'http://unix:' + socket + ':' + queryPath, + qs: { + foo: 'bar' + } + }, function(err, res, body) { t.equal(err, null, 'no error in connection') t.equal(res.statusCode, statusCode, 'got HTTP 200 OK response') t.equal(body, expectedBody, 'expected response body is received')