Skip to content

Commit

Permalink
Merge pull request #1767 from JoshWillik/sockets-with-querystrings
Browse files Browse the repository at this point in the history
Query strings now cooperate with unix sockets
  • Loading branch information
simov committed Sep 11, 2015
2 parents 4b5488c + cf6df69 commit 2bca671
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 14 deletions.
30 changes: 19 additions & 11 deletions request.js
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down
36 changes: 33 additions & 3 deletions tests/test-unix.js
Expand Up @@ -6,16 +6,32 @@ 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

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)
})
Expand All @@ -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')
Expand Down

0 comments on commit 2bca671

Please sign in to comment.