Esempio n. 1
0
test('split buffer, single message parsing', function() {
  var fullBuffer = buffers.dataRow([null, "bang", "zug zug", null, "!"]);
  var stream = new MemoryStream();
  stream.readyState = 'open';
  var client = new Connection({
    stream: stream
  });
  client.connect();
  var message = null;
  client.on('message', function(msg) {
    message = msg;
  });

  test('parses when full buffer comes in', function() {
    stream.emit('data', fullBuffer);
    assert.length(message.fields, 5);
    assert.equal(message.fields[0], null);
    assert.equal(message.fields[1], "bang");
    assert.equal(message.fields[2], "zug zug");
    assert.equal(message.fields[3], null);
    assert.equal(message.fields[4], "!");
  });

  var testMessageRecievedAfterSpiltAt = function(split) {
    var firstBuffer = new Buffer(fullBuffer.length-split);
    var secondBuffer = new Buffer(fullBuffer.length-firstBuffer.length);
    fullBuffer.copy(firstBuffer, 0, 0);
    fullBuffer.copy(secondBuffer, 0, firstBuffer.length);
    stream.emit('data', firstBuffer);
    stream.emit('data', secondBuffer);
    assert.length(message.fields, 5);
    assert.equal(message.fields[0], null);
    assert.equal(message.fields[1], "bang");
    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 end', function() {
    testMessageRecievedAfterSpiltAt(2);
  });

  test('parses when split at beginning', function() {
    testMessageRecievedAfterSpiltAt(fullBuffer.length - 2);
    testMessageRecievedAfterSpiltAt(fullBuffer.length - 1);
    testMessageRecievedAfterSpiltAt(fullBuffer.length - 5);
  });
});
Esempio n. 2
0
},{
  name: 'name',
  tableID: 1,
  attributeNumber: 2,
  dataTypeID: 25, //text
  typeModifer: 0,
  formatCode: 0 //text format
}, {
  name: 'comment',
  tableID: 1,
  attributeNumber: 3,
  dataTypeID: 25, //text
  typeModifer: 0,
  formatCode: 0 //text format
}]);
var row1 = buffers.dataRow(['1', 'Brian', 'Something groovy']);
var row2 = buffers.dataRow(['2', 'Bob', 'Testint test']);
var row3 = buffers.dataRow(['3', 'The amazing power of the everlasting gobstopper', 'okay now']);
var complete = buffers.commandComplete('SELECT 3');
var ready = buffers.readyForQuery();
var buffer = Buffer.concat([
                           rowDescription, 
                           row1, row2, row3, 
                           row1, row2, row3, 
                           row1, row2, row3, 
                           complete, ready]);
var bufferSlice = require('buffer-slice');
buffers = bufferSlice(10, buffer);

client.connect(assert.calls(function() {
  client.connection.emit('readyForQuery');
Esempio n. 3
0
test('split buffer, multiple message parsing', function() {
  var dataRowBuffer = buffers.dataRow(['!']);
  var readyForQueryBuffer = buffers.readyForQuery();
  var fullBuffer = new Buffer(dataRowBuffer.length + readyForQueryBuffer.length);
  dataRowBuffer.copy(fullBuffer, 0, 0);
  readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0);

  var messages = [];
  var stream = new MemoryStream();
  var client = new Connection({
    stream: stream
  });
  client.connect();
  client.on('message', function(msg) {
    messages.push(msg);
  });


  var verifyMessages = function() {
    assert.length(messages, 2);
    assert.same(messages[0],{
      name: 'dataRow',
      fieldCount: 1
    });
    assert.equal(messages[0].fields[0],'!');
    assert.same(messages[1],{
      name: 'readyForQuery'
    });
    messages = [];
  };
  //sanity check
  test('recieves both messages when packet is not split', function() {
    stream.emit('data', fullBuffer);
    verifyMessages();
  });
  var splitAndVerifyTwoMessages = function(split) {
    var firstBuffer = new Buffer(fullBuffer.length-split);
    var secondBuffer = new Buffer(fullBuffer.length-firstBuffer.length);
    fullBuffer.copy(firstBuffer, 0, 0);
    fullBuffer.copy(secondBuffer, 0, firstBuffer.length);
    stream.emit('data', firstBuffer);
    stream.emit('data', secondBuffer);
  };

  test('recieves both messages when packet is split', function() {
    test('in the middle', function() {
      splitAndVerifyTwoMessages(11);
    });
    test('at the front', function() {
      splitAndVerifyTwoMessages(fullBuffer.length-1);
      splitAndVerifyTwoMessages(fullBuffer.length-4);
      splitAndVerifyTwoMessages(fullBuffer.length-6);
    });

    test('at the end', function() {
      splitAndVerifyTwoMessages(8);
      splitAndVerifyTwoMessages(1);
    });
  });

});
Esempio n. 4
0
var twoRowBuf = new buffers.rowDescription([row1,{
  name: 'whoah',
  tableID: 10,
  attributeNumber: 11,
  dataTypeID: 12,
  dataTypeSize: 13,
  typeModifier: 14,
  formatCode: 0
}])


var emptyRowFieldBuf = new BufferList()
  .addInt16(0)
  .join(true, 'D');

var emptyRowFieldBuf = buffers.dataRow();

var oneFieldBuf = new BufferList()
  .addInt16(1) //number of fields
  .addInt32(5) //length of bytes of fields
  .addCString('test')
  .join(true, 'D');

var oneFieldBuf = buffers.dataRow(['test']);


var expectedAuthenticationOkayMessage = {
  name: 'authenticationOk',
  length: 8
};