diff --git a/request.js b/request.js index 8267c1253..96a71b6ed 100644 --- a/request.js +++ b/request.js @@ -958,6 +958,10 @@ Request.prototype.onRequestResponse = function (response) { }) responseContent.on('data', function (chunk) { + if (self.timing && !self.responseStarted) { + self.responseStartTime = (new Date()).getTime() + response.responseStartTime = self.responseStartTime + } self._destdata = true self.emit('data', chunk) }) diff --git a/tests/test-timing.js b/tests/test-timing.js index 04b13bdcc..754ffab56 100644 --- a/tests/test-timing.js +++ b/tests/test-timing.js @@ -27,21 +27,26 @@ tape('setup', function(t) { tape('non-redirected request is timed', function(t) { var options = {time: true} - request('http://localhost:' + plain_server.port + '/', options, function(err, res, body) { + var r = request('http://localhost:' + plain_server.port + '/', options, function(err, res, body) { t.equal(err, null) t.equal(typeof res.elapsedTime, 'number') + t.equal(typeof res.responseStartTime, 'number') t.equal((res.elapsedTime > 0), true) + t.equal((res.responseStartTime > r.startTime), true) t.end() }) }) tape('redirected request is timed with rollup', function(t) { var options = {time: true} - request('http://localhost:' + plain_server.port + '/redir', options, function(err, res, body) { + var r = request('http://localhost:' + plain_server.port + '/redir', options, function(err, res, body) { t.equal(err, null) t.equal(typeof res.elapsedTime, 'number') + t.equal(typeof res.responseStartTime, 'number') t.equal((res.elapsedTime > 0), true) + t.equal((res.responseStartTime > 0), true) t.equal((res.elapsedTime > redirect_mock_time), true) + t.equal((res.responseStartTime > r.startTime), true) t.end() }) })