Skip to content

Commit 9575dd6

Browse files
committed
Include packets that failed parsing under debug
1 parent 0c99f56 commit 9575dd6

File tree

4 files changed

+100
-3
lines changed

4 files changed

+100
-3
lines changed

Changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ you spot any mistakes.
1616
* Fix `packet.default` to actually be a string
1717
* Fix `PARSER_*` errors to be catchable
1818
* Fix `PROTOCOL_PACKETS_OUT_OF_ORDER` error to be catchable #844
19+
* Include packets that failed parsing under `debug`
1920
* Return `Query` object from `pool.query` like `conn.query` #830
2021
* Use `EventEmitter.listenerCount` when possible for faster counting
2122

lib/protocol/Protocol.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,10 @@ Protocol.prototype._parsePacket = function() {
237237
return;
238238
}
239239

240-
packet.parse(this._parser);
241-
242240
if (this._config.debug) {
243-
this._debugPacket(true, packet);
241+
this._parsePacketDebug(packet);
242+
} else {
243+
packet.parse(this._parser);
244244
}
245245

246246
if (Packet === Packets.HandshakeInitializationPacket) {
@@ -251,6 +251,14 @@ Protocol.prototype._parsePacket = function() {
251251
sequence[Packet.name](packet);
252252
};
253253

254+
Protocol.prototype._parsePacketDebug = function _parsePacketDebug(packet) {
255+
try {
256+
packet.parse(this._parser);
257+
} finally {
258+
this._debugPacket(true, packet);
259+
}
260+
};
261+
254262
Protocol.prototype._emitPacket = function(packet) {
255263
var packetWriter = new PacketWriter();
256264
packet.write(packetWriter);
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
var assert = require('assert');
2+
var common = require('../../common');
3+
var connection = common.createConnection({debug: true, port: common.fakeServerPort});
4+
var Packets = require(common.lib + '/protocol/packets');
5+
var PacketWriter = require(common.lib + '/protocol/PacketWriter');
6+
7+
var server = common.createFakeServer();
8+
9+
server.listen(common.fakeServerPort, function (err) {
10+
assert.ifError(err);
11+
12+
var messages = [];
13+
14+
console.log = function (str) {
15+
if (typeof str === 'string' && str.length !== 0) {
16+
messages.push(str);
17+
}
18+
};
19+
20+
connection.query('SELECT value FROM stuff', function (err) {
21+
assert.ok(err, 'got error');
22+
assert.equal(messages.length, 6);
23+
assert.deepEqual(messages, [
24+
'<-- HandshakeInitializationPacket',
25+
'--> ClientAuthenticationPacket',
26+
'<-- OkPacket',
27+
'--> ComQueryPacket',
28+
'<-- ResultSetHeaderPacket',
29+
'<-- FieldPacket'
30+
]);
31+
32+
connection.destroy();
33+
server.destroy();
34+
});
35+
});
36+
37+
server.on('connection', function(conn) {
38+
conn.handshake();
39+
conn.on('query', function(packet) {
40+
switch (packet.sql) {
41+
case 'SELECT value FROM stuff':
42+
this._sendPacket(new Packets.ResultSetHeaderPacket({
43+
fieldCount: 1
44+
}));
45+
46+
var writer = new PacketWriter();
47+
writer.writeLengthCodedString('def');
48+
this._socket.write(writer.toBuffer(this._parser));
49+
this._parser.resetPacketNumber();
50+
break;
51+
default:
52+
this._handlePacketQuery(packet);
53+
break;
54+
}
55+
});
56+
});

test/unit/connection/test-debug.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var assert = require('assert');
2+
var common = require('../../common');
3+
var connection = common.createConnection({debug: true, port: common.fakeServerPort});
4+
5+
var server = common.createFakeServer();
6+
7+
server.listen(common.fakeServerPort, function (err) {
8+
assert.ifError(err);
9+
10+
var messages = [];
11+
12+
console.log = function (str) {
13+
if (typeof str === 'string' && str.length !== 0) {
14+
messages.push(str);
15+
}
16+
};
17+
18+
connection.ping(function (err) {
19+
assert.ifError(err);
20+
assert.equal(messages.length, 5);
21+
assert.deepEqual(messages, [
22+
'<-- HandshakeInitializationPacket',
23+
'--> ClientAuthenticationPacket',
24+
'<-- OkPacket',
25+
'--> ComPingPacket',
26+
'<-- OkPacket'
27+
]);
28+
29+
connection.destroy();
30+
server.destroy();
31+
});
32+
});

0 commit comments

Comments
 (0)