Skip to content

Commit 58149ce

Browse files
committed
tests: add changeUser timeout test
1 parent b6cdce5 commit 58149ce

File tree

2 files changed

+66
-26
lines changed

2 files changed

+66
-26
lines changed

test/FakeServer.js

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -309,34 +309,36 @@ FakeConnection.prototype._parsePacket = function(header) {
309309
}
310310
break;
311311
case Packets.ComChangeUserPacket:
312-
if (packet.user === 'does-not-exist') {
313-
this._sendPacket(new Packets.ErrorPacket({
314-
errno : Errors.ER_ACCESS_DENIED_ERROR,
315-
message : 'User does not exist'
316-
}));
317-
this._parser.resetPacketNumber();
318-
break;
319-
} else if (packet.database === 'does-not-exist') {
320-
this._sendPacket(new Packets.ErrorPacket({
321-
errno : Errors.ER_BAD_DB_ERROR,
322-
message : 'Database does not exist'
323-
}));
312+
if (!this.emit('changeUser', packet)) {
313+
if (packet.user === 'does-not-exist') {
314+
this._sendPacket(new Packets.ErrorPacket({
315+
errno : Errors.ER_ACCESS_DENIED_ERROR,
316+
message : 'User does not exist'
317+
}));
318+
this._parser.resetPacketNumber();
319+
break;
320+
} else if (packet.database === 'does-not-exist') {
321+
this._sendPacket(new Packets.ErrorPacket({
322+
errno : Errors.ER_BAD_DB_ERROR,
323+
message : 'Database does not exist'
324+
}));
325+
this._parser.resetPacketNumber();
326+
break;
327+
}
328+
329+
this._clientAuthenticationPacket = new Packets.ClientAuthenticationPacket({
330+
clientFlags : this._clientAuthenticationPacket.clientFlags,
331+
filler : this._clientAuthenticationPacket.filler,
332+
maxPacketSize : this._clientAuthenticationPacket.maxPacketSize,
333+
protocol41 : this._clientAuthenticationPacket.protocol41,
334+
charsetNumber : packet.charsetNumber,
335+
database : packet.database,
336+
scrambleBuff : packet.scrambleBuff,
337+
user : packet.user
338+
});
339+
this._sendPacket(new Packets.OkPacket());
324340
this._parser.resetPacketNumber();
325-
break;
326341
}
327-
328-
this._clientAuthenticationPacket = new Packets.ClientAuthenticationPacket({
329-
clientFlags : this._clientAuthenticationPacket.clientFlags,
330-
filler : this._clientAuthenticationPacket.filler,
331-
maxPacketSize : this._clientAuthenticationPacket.maxPacketSize,
332-
protocol41 : this._clientAuthenticationPacket.protocol41,
333-
charsetNumber : packet.charsetNumber,
334-
database : packet.database,
335-
scrambleBuff : packet.scrambleBuff,
336-
user : packet.user
337-
});
338-
this._sendPacket(new Packets.OkPacket());
339-
this._parser.resetPacketNumber();
340342
break;
341343
case Packets.ComQuitPacket:
342344
if (!this.emit('quit', packet)) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var assert = require('assert');
2+
var common = require('../../common');
3+
var connection = common.createConnection({
4+
port : common.fakeServerPort,
5+
user : 'user_1'
6+
});
7+
8+
var timeout = setTimeout(function () {
9+
throw new Error('test timeout');
10+
}, 5000);
11+
12+
var server = common.createFakeServer();
13+
14+
server.listen(common.fakeServerPort, function (err) {
15+
assert.ifError(err);
16+
17+
connection.query('SELECT CURRENT_USER()', function (err, result) {
18+
assert.ifError(err);
19+
assert.strictEqual(result[0]['CURRENT_USER()'], 'user_1@localhost');
20+
21+
connection.changeUser({user: 'user_2', timeout: 1000}, function (err) {
22+
assert.ok(err);
23+
assert.equal(err.code, 'PROTOCOL_SEQUENCE_TIMEOUT');
24+
assert.equal(err.message, 'ChangeUser inactivity timeout');
25+
26+
connection.destroy();
27+
server.destroy();
28+
clearTimeout(timeout);
29+
});
30+
});
31+
});
32+
33+
server.on('connection', function (conn) {
34+
conn.handshake();
35+
conn.on('changeUser', function () {
36+
// do nothing
37+
});
38+
});

0 commit comments

Comments
 (0)