Skip to content

Commit

Permalink
Fix Mariadb testing
Browse files Browse the repository at this point in the history
MariaDB 5.5 and 10.0 version are EOL, Adding current GA version to test suite
change statistics test (mariadb doesn't have flush_tables)
change load data infile disable (MariaDB return a specific error 4166 : ER_LOAD_INFILE_CAPABILITY_DISABLED)
  • Loading branch information
rusher committed Dec 1, 2020
1 parent 318dd23 commit ad14f3f
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 2 deletions.
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ matrix:
env: "DOCKER_MYSQL_TYPE=mysql DOCKER_MYSQL_VERSION=5.5"
- node_js: *lts
env: "DOCKER_MYSQL_TYPE=mysql DOCKER_MYSQL_VERSION=5.6"
- node_js: *lts
env: "DOCKER_MYSQL_TYPE=mariadb DOCKER_MYSQL_VERSION=5.5"
- node_js: *lts
env: "DOCKER_MYSQL_TYPE=mariadb DOCKER_MYSQL_VERSION=10.0"
- node_js: *lts
env: "DOCKER_MYSQL_TYPE=mariadb DOCKER_MYSQL_VERSION=10.1"
- node_js: *lts
Expand Down
87 changes: 87 additions & 0 deletions test/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -158,3 +158,90 @@ function mergeTestConfig(config) {

return config;
}

/**
* Indicate if connection use a MariaDB or MySQL server
* @param {String=} connection current connection
* @returns {boolean} true if MariaDB server
*/
common.isMariaDB = function(connection) {
var serverVersion = '';
if (connection && connection._protocol && connection._protocol._handshakeInitializationPacket) {
serverVersion = connection._protocol._handshakeInitializationPacket.serverVersion;
}
// MariaDB prefix server string with '5.5.5-'
// Since https://jira.mariadb.org/browse/MDEV-7780 server version can skipped '5.5.5-' prefix
// so adding test containing 'MariaDB'
return (serverVersion.startsWith('5.5.5-') || serverVersion.includes('MariaDB'));
};

/**
* Return true if connection has minimum version
*
* @param {Object=} connection current connection
* @param {Number=} major major server version
* @param {Number=} minor minor server version
* @param {Number=} patch patch server version
* @returns {boolean} true is server version is >= to major.minor.patch version.
*/
common.minVersion = function(connection, major, minor, patch) {
var versionString = '';
if (connection && connection._protocol && connection._protocol._handshakeInitializationPacket) {
versionString = connection._protocol._handshakeInitializationPacket.serverVersion;
}
if (!versionString) throw new Error('unknown server version');
if (!major) throw new Error('a major version must be set');
if (!minor) minor = 0;
if (!patch) patch = 0;
var ver = parseVersionString(versionString);

return (
ver.major > major ||
(ver.major === major && ver.minor > minor) ||
(ver.major === major && ver.minor === minor && ver.patch >= patch)
);
};

/**
* Utility function to return JSON object from versionString.
* Example:
* '5.5.5-10.4.13-MariaDB' => { "major": 10, "minor": 4, "patch": 13 }
* @param {String=} versionString Server verion string
* @returns {{major: number, minor: number, patch: number}} JSON server version
*/
var parseVersionString = function(versionString) {
var ver = versionString.startsWith('5.5.5-') ? versionString.substring(6) : versionString;
var char;
var offset = 0;
var type = 0;
var val = 0;

var result = {
major : 0,
minor : 0,
patch : 0
};
for (; offset < ver.length; offset++) {
char = ver.charCodeAt(offset);
if (char < 48 || char > 57) {
switch (type) {
case 0:
result.major = val;
break;
case 1:
result.minor = val;
break;
case 2:
result.patch = val;
return result;
}
type++;
val = 0;
} else {
val = val * 10 + char - 48;
}
}
//serverVersion finished by number like "5.5.57", assign patchVersion
if (type === 2) result.patch = val;
return result;
};
8 changes: 6 additions & 2 deletions test/integration/connection/test-load-data-infile-disable.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,12 @@ common.getTestConnection({localInfile: false}, function (err, connection) {

connection.query(sql, [path, table, ',', newline], function (err) {
assert.ok(err);
// mariadb return 4166 error, mysql 1148
assert.ok(err.errno === 4166 || err.errno === 1148);
if (common.isMariaDB(connection) && common.minVersion(connection, 10, 5, 0)) {
// mariadb error ER_LOAD_INFILE_CAPABILITY_DISABLED
assert.equal(err.errno, 4166);
} else {
assert.equal(err.code, 'ER_NOT_ALLOWED_COMMAND');
}
});

connection.query('SELECT * FROM ??', [table], function (err, rows) {
Expand Down
3 changes: 3 additions & 0 deletions test/integration/connection/test-statistics.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ common.getTestConnection(function (err, connection) {
assert.ok(data.hasOwnProperty('questions'));
assert.ok(data.hasOwnProperty('slow_queries'));
assert.ok(data.hasOwnProperty('opens'));
if (!common.isMariaDB(connection)) {
assert.ok(data.hasOwnProperty('flush_tables'));
}
assert.ok(data.hasOwnProperty('open_tables'));
assert.ok(data.hasOwnProperty('queries_per_second_avg'));
connection.end(assert.ifError);
Expand Down

0 comments on commit ad14f3f

Please sign in to comment.