You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.9 KiB

// Make sure we get the correct results when splitting frames across
// data packets. See https://github.com/postwait/node-amqp/issues/65
require('./harness');
var Connection = require('../amqp').Connection;
var _ = require('lodash');
var EventEmitter = require('events').EventEmitter;
_.assignIn(Connection.prototype, EventEmitter.prototype);
var errorThrown = false;
function fresh_connection() {
var c = new Connection();
EventEmitter.call(c);
c.on('error', function() {
errorThrown = true;
});
c.write = function() {};
c.emit('connect');
return c;
}
connection = fresh_connection();
function packets() {
for (var i in arguments) {
connection.emit('data', new Buffer(arguments[i]));
}
}
// First, check that we will wait for a full header if sent only a
// partial one. For this purpose we'll use a heartbeat frame.
var heartbeat = [
8, // 'type'
0, 0, // channel
0, 0, 0, 0, // frame size, exclusive of the header
206]; // frame delimiter
packets(heartbeat.slice(0, 4), heartbeat.slice(4));
// Now make sure we can send a full method frame. We'll use
// basic.consume with default arguments.
connection = fresh_connection();
var consume = [
1,0,1,0,0,0,13, // frame header
0,60,0,20, // method header
0,0,0,0,0,0,0,0,0, // content (no fields)
206]; // frame delimiter
for (var i = 0; i < consume.length; i++) {
connection = fresh_connection();
packets(consume.slice(0, i), consume.slice(i));
}
// And test if a packet with more than one frame gets parsed OK
var consumeX2 = [
1,0,1,0,0,0,13, // frame header
0,60,0,20, // method header
0,0,0,0,0,0,0,0,0, // content (no fields)
206,
1,0,1,0,0,0,13, // frame header
0,60,0,20, // method header
0,0,0,0,0,0,0,0,0, // content (no fields)
206
]
for (var j = 0; j < consumeX2.length; j++) {
connection = fresh_connection();
packets(consumeX2.slice(0, j), consumeX2.slice(j));
}
assert(!errorThrown);