mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
got spliced packet tests passing
This commit is contained in:
parent
e4d6b91668
commit
851e928d38
@ -5,6 +5,17 @@ var Parser = function(buffer) {
|
||||
var p = Parser.prototype;
|
||||
|
||||
p.setBuffer = function(buffer) {
|
||||
if(this.lastBuffer) { //we have unfinished biznaz
|
||||
//need to combine last two buffers
|
||||
var remaining = this.lastBuffer.length - this.lastOffset;
|
||||
var combinedBuffer = new Buffer(buffer.length + remaining);
|
||||
this.lastBuffer.copy(combinedBuffer, 0, this.lastOffset);
|
||||
this.lastBuffer = false;
|
||||
buffer.copy(combinedBuffer, remaining, 0);
|
||||
this.buffer = combinedBuffer;
|
||||
this.offset = 0;
|
||||
return;
|
||||
}
|
||||
this.buffer = buffer;
|
||||
this.offset = 0;
|
||||
};
|
||||
@ -14,7 +25,15 @@ p.parseMessage = function() {
|
||||
//clean packet - nothing left for next buffer
|
||||
return false;
|
||||
}
|
||||
var remaining = this.buffer.length - this.offset - 1;
|
||||
var messageID = this.buffer[this.offset];
|
||||
var length = this.peekInt32(this.offset + 1);
|
||||
if(remaining < 5 || remaining < length) {
|
||||
this.lastBuffer = this.buffer;
|
||||
this.lastOffset = this.offset;
|
||||
return false;
|
||||
}
|
||||
|
||||
return this["parse"+messageID]();
|
||||
};
|
||||
|
||||
@ -146,8 +165,8 @@ p.parseInt32 = function() {
|
||||
return value;
|
||||
};
|
||||
|
||||
p.peekInt32 = function() {
|
||||
var offset = this.offset;
|
||||
p.peekInt32 = function(offset) {
|
||||
offset = offset || this.offset;
|
||||
var buffer = this.buffer;
|
||||
return ((buffer[offset++] << 24) +
|
||||
(buffer[offset++] << 16) +
|
||||
|
||||
@ -310,6 +310,7 @@ test('split buffer message parsing', function() {
|
||||
client.on('message', function(msg) {
|
||||
message = msg;
|
||||
});
|
||||
|
||||
test('parses when full buffer comes in', function() {
|
||||
stream.emit('data', fullBuffer);
|
||||
assert.length(message.fields, 5);
|
||||
@ -320,8 +321,7 @@ test('split buffer message parsing', function() {
|
||||
assert.equal(message.fields[4], "!");
|
||||
});
|
||||
|
||||
test('parses when split in the middle', function() {
|
||||
var split = 6;
|
||||
var testMessageRecievedAfterSpiltAt = function(split) {
|
||||
var firstBuffer = new Buffer(fullBuffer.length-split);
|
||||
var secondBuffer = new Buffer(fullBuffer.length-firstBuffer.length);
|
||||
fullBuffer.copy(firstBuffer, 0, 0);
|
||||
@ -334,5 +334,16 @@ test('split buffer message parsing', function() {
|
||||
assert.equal(message.fields[2], "zug zug");
|
||||
assert.equal(message.fields[3], null);
|
||||
assert.equal(message.fields[4], "!");
|
||||
|
||||
};
|
||||
|
||||
test('parses when split in the middle', function() {
|
||||
testMessageRecievedAfterSpiltAt(6);
|
||||
});
|
||||
|
||||
test('parses when split at beginning', function() {
|
||||
testMessageRecievedAfterSpiltAt(2);
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user