Skip to content

Commit 83c8b68

Browse files
authored
Merge pull request #1373 from yuxizhe/feat-test-pool-cluster
test(poolCluster): add unit tests
2 parents 86f85ab + 9ba87a0 commit 83c8b68

File tree

6 files changed

+260
-0
lines changed

6 files changed

+260
-0
lines changed

test/common.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,14 @@ exports.createPool = function(args) {
165165
return driver.createPool(exports.getConfig(args));
166166
};
167167

168+
exports.createPoolCluster = function(args = {}) {
169+
let driver = require('../index.js');
170+
if (process.env.BENCHMARK_MYSQL1) {
171+
driver = require('mysql');
172+
}
173+
return driver.createPoolCluster(args)
174+
}
175+
168176
exports.createConnectionWithURI = function() {
169177
const driver = require('../index.js');
170178

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
'use strict';
2+
3+
const assert = require('assert');
4+
const portfinder = require('portfinder');
5+
6+
const common = require('../../common');
7+
const mysql = require('../../../index.js');
8+
const { exit } = require('process');
9+
10+
const cluster = common.createPoolCluster({
11+
removeNodeErrorCount : 1
12+
});
13+
14+
let connCount = 0;
15+
16+
const server1 = mysql.createServer();
17+
const server2 = mysql.createServer();
18+
19+
console.log('test pool cluster error remove');
20+
21+
portfinder.getPort((err,port) => {
22+
23+
cluster.add('SLAVE1', {port: port + 0});
24+
cluster.add('SLAVE2', {port: port + 1});
25+
26+
server1.listen(port + 0, err => {
27+
assert.ifError(err);
28+
29+
server2.listen(port + 1, err => {
30+
assert.ifError(err);
31+
32+
const pool = cluster.of('*', 'ORDER');
33+
let removedNodeId;
34+
35+
cluster.on('remove', nodeId => {
36+
removedNodeId = nodeId;
37+
});
38+
39+
pool.getConnection((err, connection) => {
40+
assert.ifError(err);
41+
42+
assert.equal(connCount, 2);
43+
assert.equal(connection._clusterId, 'SLAVE2');
44+
assert.equal(removedNodeId, 'SLAVE1');
45+
assert.deepEqual(cluster._serviceableNodeIds, [ 'SLAVE2' ]);
46+
console.log('done')
47+
48+
connection.release();
49+
50+
cluster.end(err => {
51+
assert.ifError(err);
52+
// throw error if no exit()
53+
exit();
54+
// server1.close();
55+
// server2.close();
56+
});
57+
});
58+
});
59+
});
60+
61+
server1.on('connection', conn => {
62+
connCount += 1;
63+
conn.close();
64+
});
65+
66+
server2.on('connection', conn => {
67+
connCount += 1;
68+
conn.serverHandshake({
69+
serverVersion: 'node.js rocks',
70+
});
71+
});
72+
});
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
'use strict';
2+
3+
const assert = require('assert');
4+
const common = require('../../common');
5+
const cluster = common.createPoolCluster();
6+
7+
const order = [];
8+
9+
const poolConfig = common.getConfig();
10+
cluster.add('SLAVE1', poolConfig);
11+
cluster.add('SLAVE2', poolConfig);
12+
13+
const done = function() {
14+
assert.deepEqual(order, [
15+
'SLAVE1',
16+
'SLAVE1',
17+
'SLAVE1',
18+
'SLAVE1',
19+
'SLAVE1'
20+
]);
21+
cluster.end();
22+
console.log('done');
23+
};
24+
25+
const pool = cluster.of('SLAVE*', 'ORDER');
26+
27+
console.log('test pool cluster connection ORDER');
28+
29+
let count = 0;
30+
31+
function getConnection(i) {
32+
pool.getConnection((err, conn) => {
33+
assert.ifError(err);
34+
order[i] = conn._clusterId;
35+
conn.release();
36+
37+
count += 1;
38+
39+
if(count <= 4) {
40+
getConnection(count);
41+
} else {
42+
done();
43+
}
44+
});
45+
}
46+
47+
getConnection(0);
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
'use strict';
2+
3+
const assert = require('assert');
4+
const portfinder = require('portfinder');
5+
const common = require('../../common');
6+
const mysql = require('../../../index.js');
7+
const cluster = common.createPoolCluster({
8+
canRetry : true,
9+
removeNodeErrorCount : 1,
10+
restoreNodeTimeout : 100
11+
});
12+
13+
let connCount = 0;
14+
15+
const server = mysql.createServer();
16+
17+
console.log('test pool cluster restore');
18+
19+
portfinder.getPort((err,port) => {
20+
cluster.add('MASTER', { port });
21+
22+
server.listen(port + 0, err => {
23+
assert.ifError(err);
24+
25+
const pool = cluster.of('*', 'ORDER');
26+
let removedNodeId;
27+
28+
cluster.on('remove', nodeId => {
29+
removedNodeId = nodeId;
30+
});
31+
32+
pool.getConnection(err => {
33+
assert.ok(err);
34+
console.log(connCount, cluster._serviceableNodeIds, removedNodeId)
35+
});
36+
37+
setTimeout(() => {
38+
pool.getConnection(() => {
39+
// TODO: restoreNodeTimeout is not supported now
40+
console.log(connCount, cluster._serviceableNodeIds, removedNodeId)
41+
42+
cluster.end(err => {
43+
assert.ifError(err);
44+
server._server.close();
45+
});
46+
});
47+
}, 200)
48+
});
49+
50+
server.on('connection', conn => {
51+
connCount += 1;
52+
console.log(connCount);
53+
if(connCount < 2) {
54+
conn.close();
55+
} else {
56+
conn.serverHandshake({
57+
serverVersion: 'node.js rocks',
58+
});
59+
}
60+
});
61+
});
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
'use strict';
2+
3+
const assert = require('assert');
4+
const common = require('../../common');
5+
const cluster = common.createPoolCluster();
6+
7+
const order = [];
8+
9+
const poolConfig = common.getConfig();
10+
cluster.add('SLAVE1', poolConfig);
11+
cluster.add('SLAVE2', poolConfig);
12+
13+
const done = function() {
14+
assert.deepEqual(order, [
15+
'SLAVE1',
16+
'SLAVE2',
17+
'SLAVE1',
18+
'SLAVE2',
19+
'SLAVE1'
20+
]);
21+
cluster.end();
22+
console.log('done');
23+
};
24+
25+
const pool = cluster.of('SLAVE*', 'RR');
26+
27+
console.log('test pool cluster connection RR');
28+
29+
let count = 0;
30+
31+
function getConnection(i) {
32+
pool.getConnection((err, conn) => {
33+
assert.ifError(err);
34+
order[i] = conn._clusterId;
35+
conn.release();
36+
37+
count += 1;
38+
39+
if(count <= 4) {
40+
getConnection(count);
41+
} else {
42+
done();
43+
}
44+
});
45+
}
46+
47+
getConnection(0);

test/unit/pool-cluster/test-query.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';
2+
3+
const assert = require('assert');
4+
const common = require('../../common');
5+
const cluster = common.createPoolCluster();
6+
const poolConfig = common.getConfig();
7+
8+
9+
cluster.add('MASTER', poolConfig);
10+
cluster.add('SLAVE1', poolConfig);
11+
cluster.add('SLAVE2', poolConfig);
12+
13+
const connection = cluster.of('*');
14+
15+
console.log('test pool cluster connection query');
16+
17+
connection.query('SELECT 1', (err, rows) => {
18+
assert.ifError(err);
19+
assert.equal(rows.length, 1);
20+
assert.equal(rows[0]['1'], 1);
21+
assert.deepEqual(cluster._serviceableNodeIds, [ 'MASTER', 'SLAVE1', 'SLAVE2' ])
22+
23+
cluster.end();
24+
console.log('done');
25+
});

0 commit comments

Comments
 (0)