mirror of
https://github.com/mclueppers/xo-server.git
synced 2025-08-16 07:28:40 +02:00
234 lines
5.3 KiB
JavaScript
234 lines
5.3 KiB
JavaScript
var common = require('../../common');
|
|
var assert = require('assert');
|
|
|
|
function createPoolCluster(clusterConfig, poolConfig) {
|
|
var cluster = common.createPoolCluster(clusterConfig);
|
|
|
|
if (typeof poolConfig === 'undefined') {
|
|
poolConfig = common.getTestConfig();
|
|
}
|
|
|
|
cluster.add(poolConfig);
|
|
cluster.add('MASTER', poolConfig);
|
|
cluster.add('SLAVE1', poolConfig);
|
|
cluster.add('SLAVE2', poolConfig);
|
|
|
|
return cluster;
|
|
}
|
|
|
|
// Test_base_function
|
|
(function () {
|
|
var cluster = createPoolCluster();
|
|
|
|
// added nodes
|
|
assert.deepEqual(cluster._serviceableNodeIds, ['CLUSTER::1', 'MASTER', 'SLAVE1', 'SLAVE2']);
|
|
|
|
// _findNodeIds
|
|
assert.deepEqual(cluster._findNodeIds('MASTER'), ['MASTER']);
|
|
assert.deepEqual(cluster._findNodeIds('SLAVE*'), ['SLAVE1', 'SLAVE2']);
|
|
|
|
// of singletone instance
|
|
var poolNamespace = cluster.of('*', 'RR');
|
|
var poolNamespace2 = cluster.of('*');
|
|
assert.strictEqual(poolNamespace, poolNamespace2);
|
|
|
|
// empty pattern
|
|
var emptyPoolNamespace = cluster.of();
|
|
assert.strictEqual(poolNamespace, emptyPoolNamespace);
|
|
|
|
// wrong selector
|
|
var wrongPoolNamespace = cluster.of('*', 'RR2');
|
|
assert.strictEqual(poolNamespace, wrongPoolNamespace);
|
|
|
|
cluster.end();
|
|
})();
|
|
|
|
// Test_getConnection_one
|
|
(function() {
|
|
var cluster = createPoolCluster();
|
|
|
|
cluster.getConnection('MASTER', function(err, connection) {
|
|
cluster.end();
|
|
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'MASTER');
|
|
}
|
|
}.bind(this));
|
|
})();
|
|
|
|
// Test_of_getConnection_one
|
|
(function() {
|
|
var cluster = createPoolCluster();
|
|
|
|
cluster.of('MASTER').getConnection(function(err, connection) {
|
|
cluster.end();
|
|
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'MASTER');
|
|
}
|
|
}.bind(this));
|
|
})();
|
|
|
|
// Test_getConnection_multi
|
|
(function() {
|
|
var cluster = createPoolCluster();
|
|
|
|
cluster.getConnection('SLAVE*', 'RR', function(err, connection) {
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE1');
|
|
}
|
|
|
|
cluster.getConnection('SLAVE*', 'RR', function(err, connection) {
|
|
cluster.end();
|
|
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE2');
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
|
|
// Test_of_getConnection_multi
|
|
(function() {
|
|
var cluster = createPoolCluster();
|
|
var pool = cluster.of('SLAVE*', 'RR');
|
|
|
|
pool.getConnection(function(err, connection) {
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE1');
|
|
}
|
|
|
|
pool.getConnection(function(err, connection) {
|
|
cluster.end();
|
|
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE2');
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
|
|
// Test_of_getConnection_ORDER_selector
|
|
(function() {
|
|
var cluster = createPoolCluster();
|
|
var pool = cluster.of('SLAVE*', 'ORDER');
|
|
|
|
pool.getConnection(function(err, connection) {
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE1');
|
|
}
|
|
|
|
pool.getConnection(function(err, connection) {
|
|
cluster.end();
|
|
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE1');
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
|
|
|
|
// Test_of_getConnection_default_selector
|
|
(function() {
|
|
var cluster = createPoolCluster({
|
|
defaultSelector: 'ORDER'
|
|
});
|
|
|
|
var pool = cluster.of('SLAVE*');
|
|
|
|
pool.getConnection(function(err, connection) {
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE1');
|
|
}
|
|
|
|
pool.getConnection(function(err, connection) {
|
|
cluster.end();
|
|
|
|
if (!err) {
|
|
assert.strictEqual(connection._clusterId, 'SLAVE1');
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
|
|
// Test_retry_throw_error
|
|
(function() {
|
|
var cluster = common.createPoolCluster({
|
|
canRetry: false
|
|
});
|
|
|
|
var poolConfig = common.getTestConfig();
|
|
|
|
var origPort = poolConfig.port;
|
|
poolConfig.port = 3300;
|
|
cluster.add('ERROR', poolConfig);
|
|
|
|
poolConfig.port = origPort;
|
|
cluster.add('CORRECT', poolConfig);
|
|
|
|
cluster.of('*').getConnection(function (err, connection) {
|
|
cluster.end();
|
|
|
|
assert.ok(err instanceof Error);
|
|
});
|
|
})();
|
|
|
|
// Test_retry
|
|
(function() {
|
|
var cluster = common.createPoolCluster();
|
|
|
|
var poolConfig = common.getTestConfig();
|
|
|
|
var origPort = poolConfig.port;
|
|
poolConfig.port = 3300;
|
|
cluster.add('ERROR', poolConfig);
|
|
|
|
poolConfig.port = origPort;
|
|
cluster.add('CORRECT', poolConfig);
|
|
|
|
cluster.of('*', 'RR').getConnection(function (err, connection) {
|
|
cluster.end();
|
|
|
|
assert.ok(err === null);
|
|
assert.equal(connection._clusterId, 'CORRECT');
|
|
|
|
assert.equal(cluster._nodes.ERROR.errorCount, 1);
|
|
});
|
|
})();
|
|
|
|
// Test_remove_node
|
|
(function() {
|
|
var cluster = common.createPoolCluster({
|
|
removeNodeErrorCount: 1
|
|
});
|
|
|
|
var poolConfig = common.getTestConfig();
|
|
|
|
var origPort = poolConfig.port;
|
|
poolConfig.port = 3300;
|
|
cluster.add('ERROR', poolConfig);
|
|
|
|
poolConfig.port = origPort;
|
|
cluster.add('CORRECT', poolConfig);
|
|
|
|
var removedNodeId = '';
|
|
|
|
cluster.on('remove', function(nodeId) {
|
|
removedNodeId = nodeId;
|
|
});
|
|
|
|
cluster.of('*', 'RR').getConnection(function (err, connection) {
|
|
cluster.end();
|
|
|
|
assert.ok(err === null);
|
|
assert.equal(connection._clusterId, 'CORRECT');
|
|
|
|
assert.equal(removedNodeId, 'ERROR');
|
|
|
|
assert.ok(typeof cluster._nodes.ERROR === 'undefined');
|
|
assert.equal(cluster._serviceableNodeIds.length, 1);
|
|
assert.deepEqual(cluster._serviceableNodeIds, ['CORRECT']);
|
|
});
|
|
})();
|