http-deceiver
Advanced tools
Comparing version 1.2.0 to 1.2.1
@@ -154,3 +154,13 @@ var assert = require('assert'); | ||
var self = this; | ||
var oldExecute = parser.execute; | ||
var oldFinish = parser.finish; | ||
parser.execute = function execute(buffer, start, len) { | ||
// Parser reuse | ||
if (this.socket !== self.socket) { | ||
this.execute = oldExecute; | ||
this.finish = oldFinish; | ||
return this.execute(buffer, start, len); | ||
} | ||
if (start !== undefined) | ||
@@ -162,2 +172,9 @@ buffer = buffer.slice(start, start + len); | ||
parser.finish = function finish() { | ||
// Parser reuse | ||
if (this.socket !== self.socket) { | ||
this.execute = oldExecute; | ||
this.finish = oldFinish; | ||
return this.finish(); | ||
} | ||
self.emitMessageComplete(); | ||
@@ -164,0 +181,0 @@ }; |
{ | ||
"name": "http-deceiver", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "Deceive HTTP parser", | ||
@@ -5,0 +5,0 @@ "main": "lib/deceiver.js", |
@@ -75,2 +75,78 @@ var assert = require('assert'); | ||
}); | ||
it('should override .execute and .finish', function(done) { | ||
var server = http.createServer(); | ||
server.emit('connection', socket); | ||
server.on('request', function(req, res) { | ||
assert.equal(req.method, 'PUT'); | ||
assert.equal(req.url, '/hello'); | ||
assert.deepEqual(req.headers, { a: 'b' }); | ||
var actual = ''; | ||
req.on('data', function(chunk) { | ||
actual += chunk; | ||
}); | ||
req.once('end', function() { | ||
assert.equal(actual, 'hello world'); | ||
done(); | ||
}); | ||
}); | ||
deceiver.emitRequest({ | ||
method: 'PUT', | ||
path: '/hello', | ||
headers: { | ||
a: 'b' | ||
} | ||
}); | ||
pair.write('hello'); | ||
pair.end(' world'); | ||
}); | ||
it('should work with reusing parser', function(done) { | ||
var server = http.createServer(); | ||
server.emit('connection', socket); | ||
function secondRequest() { | ||
pair = streamPair.create(); | ||
handle = thing.create(pair.other); | ||
socket = new net.Socket({ handle: handle }); | ||
// For v0.8 | ||
socket.readable = true; | ||
socket.writable = true; | ||
server.emit('connection', socket); | ||
pair.end('PUT /second HTTP/1.1\r\nContent-Length:11\r\n\r\nhello world'); | ||
} | ||
server.on('request', function(req, res) { | ||
var actual = ''; | ||
req.on('data', function(chunk) { | ||
actual += chunk; | ||
}); | ||
req.once('end', function() { | ||
assert.equal(actual, 'hello world'); | ||
if (req.url === '/first') | ||
secondRequest(); | ||
else | ||
done(); | ||
}); | ||
}); | ||
deceiver.emitRequest({ | ||
method: 'PUT', | ||
path: '/first', | ||
headers: { | ||
a: 'b' | ||
} | ||
}); | ||
pair.write('hello'); | ||
pair.end(' world'); | ||
}); | ||
}); |
10792
283