diff --git a/lib/cmd/handshake/authentication.js b/lib/cmd/handshake/authentication.js index 81f67bea..711ecf52 100644 --- a/lib/cmd/handshake/authentication.js +++ b/lib/cmd/handshake/authentication.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -128,6 +128,10 @@ class Authentication extends Command { info.redirect(value, this.successEnd); break; + case 'maxscale': + info.maxscaleVersion = value; + break; + case 'connection_id': info.threadId = parseInt(value); break; diff --git a/lib/config/connection-options.js b/lib/config/connection-options.js index 01a5f0b1..0124c33f 100644 --- a/lib/config/connection-options.js +++ b/lib/config/connection-options.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -55,10 +55,12 @@ class ConnectionOptions { if (opts.logger.logParam !== undefined) this.logParam = opts.logger.logParam; } } else { - this.logger = { network: null, query: null, error: null, warning: console.log }; - if ((this.debug || this.debugCompress) && !this.logger.network) { - this.logger.network = console.log; - } + this.logger = { + network: this.debug || this.debugCompress ? console.log : null, + query: null, + error: null, + warning: console.log + }; } this.debug = !!this.logger.network; diff --git a/lib/connection.js b/lib/connection.js index e98dc567..1547f19f 100644 --- a/lib/connection.js +++ b/lib/connection.js @@ -1481,7 +1481,13 @@ class Connection extends EventEmitter { } await Promise.allSettled(queryPromises) .then(() => { - if (!cmdParam.skipDbCheck && cmdParam.database && cmdParam.database != prevDatabase) { + // reset connection to initial database if was set + if ( + !cmdParam.skipDbCheck && + prevDatabase && + cmdParam.database && + cmdParam.database != prevDatabase + ) { return new Promise(tmpQuery.bind(conn, `USE \`${prevDatabase.replace(/`/gi, '``')}\``)); } return Promise.resolve(); diff --git a/test/base.js b/test/base.js index f6b64a15..911d0f91 100644 --- a/test/base.js +++ b/test/base.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -43,6 +43,68 @@ module.exports.createConnection = function createConnection(opts) { return basePromise.createConnection(connOptionTemp); }; +module.exports.isMaxscale = function isMaxscale() { + if (!global.maxscaleVersion) { + const maxscaleVersion = global.shareConn.info.maxscaleVersion; + if (!maxscaleVersion) { + // maxscale before 23.08 + return process.env.srv === 'maxscale'; + } + } + return true; +}; + +module.exports.isMaxscaleMinVersion = function isMaxscaleMinVersion(major, minor, patch) { + if (!global.maxscaleVersion) { + const maxscaleVersion = global.shareConn.info.maxscaleVersion; + if (!maxscaleVersion) { + // maxscale before 23.08 + return false; + } + let car; + let offset = 0; + let type = 0; + let val = 0; + let maxscaleMajor = 0; + let maxscaleMinor = 0; + let maxscalePatch = 0; + for (; offset < maxscaleVersion.length; offset++) { + car = maxscaleVersion.charCodeAt(offset); + if (car < 48 || car > 57) { + switch (type) { + case 0: + maxscaleMajor = val; + break; + case 1: + maxscaleMinor = val; + break; + case 2: + maxscalePatch = val; + return; + } + type++; + val = 0; + } else { + val = val * 10 + car - 48; + } + } + //serverVersion finished by number like "5.5.57", assign patchVersion + if (type === 2) maxscalePatch = val; + global.maxscaleVersion = { + major: maxscaleMajor, + minor: maxscaleMinor, + patch: maxscalePatch + }; + } + + let ver = this.maxscaleVersion; + return ( + ver.major > major || + (ver.major === major && ver.minor > minor) || + (ver.major === major && ver.minor === minor && ver.patch >= patch) + ); +}; + module.exports.createPool = (opts) => { const poolOptionTemp = Object.assign({}, Conf.baseConfig, opts); return basePromise.createPool(poolOptionTemp); diff --git a/test/integration/datatype/test-datetime.js b/test/integration/datatype/test-datetime.js index cc0865c0..67a01f97 100644 --- a/test/integration/datatype/test-datetime.js +++ b/test/integration/datatype/test-datetime.js @@ -1,12 +1,12 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../../base'); const { assert } = require('chai'); const Conf = require('../../conf'); -const { isXpand } = require('../../base'); +const { isXpand, isMaxscale } = require('../../base'); describe('datetime', () => { const date = new Date('2001-12-31 00:00:00'); @@ -49,7 +49,7 @@ describe('datetime', () => { if (!process.env.LOCAL_SOCKET_AVAILABLE) this.skip(); if ( (Conf.baseConfig.host !== 'localhost' && Conf.baseConfig.host !== 'mariadb.example.com') || - process.env.srv === 'maxscale' || + isMaxscale() || process.env.srv === 'skysql-ha' ) this.skip(); diff --git a/test/integration/test-additional-server-info.js b/test/integration/test-additional-server-info.js index 1821cdc2..f2480d10 100644 --- a/test/integration/test-additional-server-info.js +++ b/test/integration/test-additional-server-info.js @@ -1,19 +1,15 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); +const { isMaxscale } = require('../base'); describe('server additional information API', () => { it('server version', async function () { - if ( - process.env.srv === 'skysql' || - process.env.srv === 'skysql-ha' || - process.env.srv === 'maxscale' || - process.env.srv === 'build' - ) + if (process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isMaxscale() || process.env.srv === 'build') this.skip(); const res = await shareConn.query('SELECT VERSION() a'); diff --git a/test/integration/test-auth-plugin.js b/test/integration/test-auth-plugin.js index 4c2be756..63942268 100644 --- a/test/integration/test-auth-plugin.js +++ b/test/integration/test-auth-plugin.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -9,6 +9,7 @@ const Conf = require('../conf'); const fs = require('fs'); const os = require('os'); const path = require('path'); +const { isMaxscale } = require('../base'); describe('authentication plugin', () => { let rsaPublicKey = process.env.TEST_RSA_PUBLIC_KEY; @@ -65,14 +66,14 @@ describe('authentication plugin', () => { } else { await shareConn.query("CREATE USER 'sha256User'@'%'"); await shareConn.query( - "GRANT ALL PRIVILEGES ON *.* TO 'sha256User'@'%' IDENTIFIED WITH " + "sha256_password BY 'password'" + "GRANT ALL PRIVILEGES ON *.* TO 'sha256User'@'%' IDENTIFIED WITH sha256_password BY 'password'" ); } } }); it('ed25519 authentication plugin', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || process.env.srv === 'skysql') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha' || process.env.srv === 'skysql') this.skip(); const self = this; if (!shareConn.info.isMariaDB() || !shareConn.info.hasMinVersion(10, 1, 22)) this.skip(); @@ -135,7 +136,7 @@ describe('authentication plugin', () => { it('name pipe authentication plugin', function (done) { if (process.platform !== 'win32') this.skip(); - if (process.env.srv === 'maxscale') this.skip(); + if (isMaxscale()) this.skip(); if (!shareConn.info.isMariaDB() || !shareConn.info.hasMinVersion(10, 1, 11)) this.skip(); if (Conf.baseConfig.host !== 'localhost' && Conf.baseConfig.host !== 'mariadb.example.com') this.skip(); const windowsUser = process.env.USERNAME; @@ -288,7 +289,7 @@ describe('authentication plugin', () => { }); it('multi authentication plugin', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); if (!shareConn.info.isMariaDB() || !shareConn.info.hasMinVersion(10, 4, 3)) this.skip(); shareConn.query("drop user IF EXISTS mysqltest1@'%'").catch((err) => {}); shareConn diff --git a/test/integration/test-batch-geometry-type.js b/test/integration/test-batch-geometry-type.js index 115c906a..846bcf16 100644 --- a/test/integration/test-batch-geometry-type.js +++ b/test/integration/test-batch-geometry-type.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -11,18 +11,19 @@ const { isXpand } = require('../base'); describe('batch geometry type', () => { let supportBulk; + let serverPermitExtendedInfos; before(function () { supportBulk = (Conf.baseConfig.bulk === undefined ? true : Conf.baseConfig.bulk) ? (shareConn.info.serverCapabilities & Capabilities.MARIADB_CLIENT_STMT_BULK_OPERATIONS) > 0 : false; + serverPermitExtendedInfos = + (shareConn.info.serverCapabilities & Capabilities.MARIADB_CLIENT_EXTENDED_TYPE_INFO) > 0; }); it('Point format', async function () { // xpand doesn't support geometry // https://jira.mariadb.org/browse/XPT-12 if (!shareConn.info.isMariaDB() || isXpand()) this.skip(); - const serverPermitExtendedInfos = - (shareConn.info.serverCapabilities & Capabilities.MARIADB_CLIENT_EXTENDED_TYPE_INFO) > 0; await shareConn.query('DROP TABLE IF EXISTS gis_point_batch'); await shareConn.query('CREATE TABLE gis_point_batch (g POINT)'); @@ -430,9 +431,7 @@ describe('batch geometry type', () => { type: 'MultiPoint', coordinates: [] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiPoint' } : null }, @@ -442,9 +441,7 @@ describe('batch geometry type', () => { type: 'MultiPoint', coordinates: [] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiPoint' } : null } @@ -559,9 +556,7 @@ describe('batch geometry type', () => { type: 'MultiLineString', coordinates: [[]] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiLineString' } : null }, @@ -571,9 +566,7 @@ describe('batch geometry type', () => { type: 'MultiLineString', coordinates: [] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiLineString' } : null }, @@ -583,9 +576,7 @@ describe('batch geometry type', () => { type: 'MultiLineString', coordinates: [] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiLineString' } : null } @@ -787,9 +778,7 @@ describe('batch geometry type', () => { type: 'MultiPolygon', coordinates: [[[]]] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiPolygon' } : null }, @@ -799,9 +788,7 @@ describe('batch geometry type', () => { type: 'MultiPolygon', coordinates: [[]] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiPolygon' } : null }, @@ -811,9 +798,7 @@ describe('batch geometry type', () => { type: 'MultiPolygon', coordinates: [] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiPolygon' } : null }, @@ -823,9 +808,7 @@ describe('batch geometry type', () => { type: 'MultiPolygon', coordinates: [] } - : shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' + : serverPermitExtendedInfos ? { type: 'MultiPolygon' } : null } diff --git a/test/integration/test-batch.js b/test/integration/test-batch.js index bc940f93..acefd7aa 100644 --- a/test/integration/test-batch.js +++ b/test/integration/test-batch.js @@ -1437,16 +1437,14 @@ describe('batch', function () { }); it('16M+ batch with 16M max_allowed_packet', async function () { - // // skipping in maxscale due to a bug: https://jira.mariadb.org/browse/MXS-3588 - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST || maxAllowedSize <= testSize) return this.skip(); this.timeout(320000); await bigBatchWith16mMaxAllowedPacket(useCompression, true); }); it('16M+ batch with 16M max_allowed_packet big insert', async function () { - // // skipping in maxscale due to a bug: https://jira.mariadb.org/browse/MXS-3588 - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST || maxAllowedSize <= testSize) return this.skip(); this.timeout(320000); await bigBatchWith16mMaxAllowedPacketBig(useCompression, true); @@ -1532,8 +1530,7 @@ describe('batch', function () { }); it('16M+ batch with 16M max_allowed_packet', async function () { - // skipping in maxscale due to a bug: https://jira.mariadb.org/browse/MXS-3588 - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST) this.skip(); if (maxAllowedSize <= testSize) this.skip(); this.timeout(180000); @@ -1713,8 +1710,7 @@ describe('batch', function () { }); it('16M+ batch with 16M max_allowed_packet', async function () { - // skipping in maxscale due to a bug: https://jira.mariadb.org/browse/MXS-3588 - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST || maxAllowedSize <= testSize) return this.skip(); this.timeout(320000); await bigBatchWith16mMaxAllowedPacket(useCompression, false); @@ -1818,8 +1814,7 @@ describe('batch', function () { }); it('16M+ batch with 16M max_allowed_packet', async function () { - // skipping in maxscale due to a bug: https://jira.mariadb.org/browse/MXS-3588 - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST || maxAllowedSize <= testSize) return this.skip(); this.timeout(380000); await bigBatchWith16mMaxAllowedPacket(useCompression, false); @@ -1872,8 +1867,7 @@ describe('batch', function () { }); it('16M+ batch', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - this.skip(); + if (process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST || maxAllowedSize <= testSize) return this.skip(); this.timeout(320000); await more16MNamedPlaceHolders(true); @@ -1903,8 +1897,7 @@ describe('batch', function () { }); it('16M+ batch', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - this.skip(); + if (process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); if (!RUN_LONG_TEST || maxAllowedSize <= testSize) return this.skip(); this.timeout(320000); await more16MNamedPlaceHolders(false); diff --git a/test/integration/test-change-user.js b/test/integration/test-change-user.js index d6d4280b..dd8659a4 100644 --- a/test/integration/test-change-user.js +++ b/test/integration/test-change-user.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -7,7 +7,7 @@ const base = require('../base.js'); const { assert } = require('chai'); const ServerStatus = require('../../lib/const/server-status'); const Conf = require('../conf'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); const path = require('path'); const os = require('os'); const fs = require('fs'); @@ -15,7 +15,7 @@ const winston = require('winston'); describe('change user', () => { before(async () => { - if (process.env.srv !== 'maxscale' && process.env.srv !== 'skysql-ha') { + if (process.env.srv !== 'skysql-ha') { await shareConn.query("DROP USER ChangeUser@'%'").catch((e) => {}); await shareConn.query("DROP USER ChangeUser2@'%'").catch((e) => {}); await shareConn.query('CREATE DATABASE IF NOT EXISTS test'); @@ -30,7 +30,7 @@ describe('change user', () => { }); after(async () => { - if (process.env.srv !== 'maxscale' && process.env.srv !== 'skysql-ha') { + if (process.env.srv !== 'skysql-ha') { await shareConn.query("DROP USER ChangeUser@'%'").catch((e) => {}); await shareConn.query("DROP USER ChangeUser2@'%'").catch((e) => {}); } @@ -75,7 +75,7 @@ describe('change user', () => { }); it('basic change user using callback', function (done) { - if (process.env.srv == 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); const conn = base.createCallbackConnection(); conn.connect((err) => { @@ -101,7 +101,7 @@ describe('change user', () => { }); it('wrong charset', function (done) { - if (process.env.srv == 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base.createConnection().then((conn) => { conn @@ -122,7 +122,7 @@ describe('change user', () => { }); it('wrong collation in charset', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); const tmpLogFile = path.join(os.tmpdir(), 'wrongCollation.txt'); try { @@ -167,7 +167,7 @@ describe('change user', () => { }); it('wrong collation', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base.createConnection().then((conn) => { conn @@ -188,7 +188,7 @@ describe('change user', () => { }); it('basic change user using callback no function', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); const conn = base.createCallbackConnection(); conn.connect((err) => { @@ -208,7 +208,7 @@ describe('change user', () => { }); it('callback change user without option', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); const conn = base.createCallbackConnection(); conn.connect((err) => { @@ -228,7 +228,7 @@ describe('change user', () => { }); it('basic change user using promise', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base @@ -267,7 +267,7 @@ describe('change user', () => { }); it('change user using connection attributes', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base @@ -306,7 +306,7 @@ describe('change user', () => { }); it('basic change user using promise non node.js encoding', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base @@ -346,7 +346,7 @@ describe('change user', () => { }); it('change user with collation', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base .createConnection() @@ -386,7 +386,7 @@ describe('change user', () => { }); it('autocommit state after changing user', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); base .createConnection() @@ -408,7 +408,7 @@ describe('change user', () => { if ( shareConn.info.isMariaDB() && shareConn.info.hasMinVersion(10, 2, 2) && - process.env.srv !== 'maxscale' && + !isMaxscale() && process.env.srv !== 'skysql-ha' ) { assert.equal(conn.info.database, 'test'); @@ -430,7 +430,7 @@ describe('change user', () => { }); it('collation index > 255', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); // requires mariadb 10.2+ const conn = await base.createConnection(); const res = await conn.query('SELECT @@COLLATION_CONNECTION as c'); diff --git a/test/integration/test-cluster.js b/test/integration/test-cluster.js index a8f28cd2..bec800ad 100644 --- a/test/integration/test-cluster.js +++ b/test/integration/test-cluster.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -11,7 +11,7 @@ const Proxy = require('../tools/proxy'); const base = require('../base.js'); const { assert } = require('chai'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); describe('cluster', function () { before(async function () { @@ -398,8 +398,7 @@ describe('cluster', function () { }); it('one node failing', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const cluster = basePromise.createPoolCluster({}); @@ -474,8 +473,7 @@ describe('cluster', function () { }); it('one node failing with blacklisted host', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const cluster = basePromise.createPoolCluster({}); @@ -601,13 +599,7 @@ describe('cluster', function () { }); it('server close connection during query', function (done) { - if ( - process.env.srv === 'maxscale' || - process.env.srv === 'skysql' || - process.env.srv === 'skysql-ha' || - isXpand() - ) - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); this.timeout(20000); const cluster = basePromise.createPoolCluster({}); @@ -646,8 +638,7 @@ describe('cluster', function () { }); it('socket close connection during query', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); if (!shareConn.info.isMariaDB() || !shareConn.info.hasMinVersion(10, 1, 2)) this.skip(); this.timeout(10000); const cluster = basePromise.createPoolCluster({}); diff --git a/test/integration/test-connection-meta.js b/test/integration/test-connection-meta.js index 3ecc4ded..7d15592e 100644 --- a/test/integration/test-connection-meta.js +++ b/test/integration/test-connection-meta.js @@ -1,9 +1,10 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); +const { isMaxscale } = require('../base'); const assert = require('chai').assert; describe('Connection meta', function () { @@ -13,7 +14,7 @@ describe('Connection meta', function () { if ( process.env.srv !== 'skysql' && process.env.srv !== 'skysql-ha' && - process.env.srv !== 'maxscale' && + !isMaxscale() && process.env.srv !== 'xpand' ) { const version = process.env.v; diff --git a/test/integration/test-connection-opts.js b/test/integration/test-connection-opts.js index 1291c835..8b7a59bc 100644 --- a/test/integration/test-connection-opts.js +++ b/test/integration/test-connection-opts.js @@ -1,10 +1,11 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); +const { isMaxscale } = require('../base'); describe('connection option', () => { it('with undefined collation', function (done) { @@ -163,7 +164,7 @@ describe('connection option', () => { // node.js before v13 doesn't permit to set TZ value repeatedly if (parseInt(process.versions.node.split('.')[0]) <= 12) this.skip(); - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); //MySQL 5.5 doesn't have milliseconds if (!shareConn.info.isMariaDB() && !shareConn.info.hasMinVersion(5, 6, 0)) this.skip(); const defaultTz = process.env.TZ; diff --git a/test/integration/test-connection.js b/test/integration/test-connection.js index 047b2dde..f633bc03 100644 --- a/test/integration/test-connection.js +++ b/test/integration/test-connection.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -10,7 +10,7 @@ const Conf = require('../conf'); const Connection = require('../../lib/connection'); const ConnOptions = require('../../lib/config/connection-options'); const Net = require('net'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); const dns = require('dns'); describe('connection', () => { @@ -193,7 +193,7 @@ describe('connection', () => { }); it('connection error event', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); if (!shareConn.info.isMariaDB() && !shareConn.info.hasMinVersion(5, 6, 0)) this.skip(); base .createConnection() @@ -402,7 +402,7 @@ describe('connection', () => { }); it('connection.destroy() during query execution', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(10000); @@ -633,7 +633,7 @@ describe('connection', () => { if ( (shareConn.info.isMariaDB() && !shareConn.info.hasMinVersion(10, 2, 2)) || (!shareConn.info.isMariaDB() && !shareConn.info.hasMinVersion(5, 7, 4)) || - process.env.srv === 'maxscale' || + isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' ) { @@ -827,7 +827,7 @@ describe('connection', () => { if ( ((shareConn.info.isMariaDB() && shareConn.info.hasMinVersion(10, 2)) || (!shareConn.info.isMariaDB() && shareConn.info.hasMinVersion(5, 7))) && - process.env.srv !== 'maxscale' && + !isMaxscale() && process.env.srv !== 'skysql' && process.env.srv !== 'skysql-ha' ) { @@ -897,8 +897,7 @@ describe('connection', () => { it('error reaching max connection', async function () { // error occurs on handshake packet, with old error format - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); this.timeout(10000); const res = await shareConn.query('select @@max_connections as a'); @@ -1000,7 +999,7 @@ describe('connection', () => { if ( !shareConn.info.isMariaDB() || !shareConn.info.hasMinVersion(10, 4, 3) || - process.env.srv === 'maxscale' || + isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' ) { @@ -1040,7 +1039,7 @@ describe('connection', () => { if ( !shareConn.info.isMariaDB() || !shareConn.info.hasMinVersion(10, 4, 3) || - process.env.srv === 'maxscale' || + isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' ) { @@ -1080,7 +1079,7 @@ describe('connection', () => { }); it('collation index > 255', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); // requires mariadb 10.2+ const conn = await base.createConnection({ collation: 'UTF8MB4_UNICODE_520_NOPAD_CI' }); const res = await conn.query('SELECT @@COLLATION_CONNECTION as c'); diff --git a/test/integration/test-debug.js b/test/integration/test-debug.js index 28de361d..b51f4ab5 100644 --- a/test/integration/test-debug.js +++ b/test/integration/test-debug.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -10,7 +10,7 @@ const os = require('os'); const path = require('path'); const util = require('util'); const winston = require('winston'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); const Conf = require('../conf'); describe('debug', () => { @@ -86,12 +86,7 @@ describe('debug', () => { conn .query('CREATE TABLE debugVoid (val int)') .then(() => { - if ( - compress && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql' && - process.env.srv !== 'skysql-ha' - ) { + if (compress && !isMaxscale() && process.env.srv !== 'skysql' && process.env.srv !== 'skysql-ha') { conn.debugCompress((msg) => logger.info(msg)); } else { conn.debug((msg) => logger.info(msg)); @@ -99,12 +94,7 @@ describe('debug', () => { return conn.query('SELECT 2'); }) .then(() => { - if ( - compress && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql' && - process.env.srv !== 'skysql-ha' - ) { + if (compress && !isMaxscale() && process.env.srv !== 'skysql' && process.env.srv !== 'skysql-ha') { conn.debugCompress(false); } else { conn.debug(false); @@ -127,8 +117,7 @@ describe('debug', () => { //wait 100ms to ensure stream has been written setTimeout(() => { const serverVersion = conn.serverVersion(); - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - compress = false; + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') compress = false; const rangeWithEOF = compress ? [1500, 2000] : [1800, 4250]; const rangeWithoutEOF = compress ? [1500, 2000] : [2350, 3250]; const data = fs.readFileSync(tmpLogFile, 'utf8'); @@ -146,7 +135,7 @@ describe('debug', () => { if ( ((conn.info.isMariaDB() && conn.info.hasMinVersion(10, 2, 2)) || (!conn.info.isMariaDB() && conn.info.hasMinVersion(5, 7, 5))) && - process.env.srv !== 'maxscale' && + !isMaxscale() && process.env.srv !== 'skysql' && process.env.srv !== 'skysql-ha' ) { @@ -190,8 +179,7 @@ describe('debug', () => { } it('select big request (compressed data) debug', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); const buf = Buffer.alloc(5000, 'z'); base @@ -350,8 +338,7 @@ describe('debug', () => { setTimeout(resolve, 100); }); const serverVersion = conn.serverVersion(); - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') - compress = false; + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') compress = false; const range = compress ? [60, 180] : [60, 170]; const data = fs.readFileSync(tmpLogFile, 'utf8'); assert.isTrue(data.includes('PING')); diff --git a/test/integration/test-error.js b/test/integration/test-error.js index ed4ebfcf..6c686274 100644 --- a/test/integration/test-error.js +++ b/test/integration/test-error.js @@ -1,11 +1,11 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); describe('Error', () => { after((done) => { @@ -369,7 +369,7 @@ describe('Error', () => { it('server close connection without warning', function (done) { //removed for maxscale, since wait_timeout will be set to other connections - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); this.timeout(20000); let connectionErr = false; base @@ -411,8 +411,7 @@ describe('Error', () => { it('server close connection - no connection error event', function (done) { this.timeout(20000); - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); // Remove Mocha's error listener const originalException = process.listeners('uncaughtException').pop(); process.removeListener('uncaughtException', originalException); @@ -455,7 +454,7 @@ describe('Error', () => { }); it('server close connection during query', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(20000); base .createConnection() @@ -467,7 +466,7 @@ describe('Error', () => { done(new Error('must have thrown error !')); }) .catch((err) => { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') { + if (isMaxscale() || process.env.srv === 'skysql-ha') { assert.isTrue(err.message.includes('Lost connection to backend server'), err.message); assert.equal(err.sqlState, 'HY000'); } else { @@ -485,7 +484,7 @@ describe('Error', () => { }); it('end connection query error', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); const conn = await base.createConnection(); setTimeout(() => { conn.__tests.getSocket().destroy(new Error('close forced')); diff --git a/test/integration/test-execute.js b/test/integration/test-execute.js index 266a91a8..0d1b96a9 100644 --- a/test/integration/test-execute.js +++ b/test/integration/test-execute.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -11,6 +11,7 @@ const path = require('path'); const { isXpand } = require('../base'); const { baseConfig } = require('../conf'); const { Readable } = require('stream'); +const Conf = require('../conf'); describe('prepare and execute', () => { let bigVal; @@ -115,7 +116,9 @@ describe('prepare and execute', () => { console.log(errorLogged); assert.isTrue( errorLogged.includes( - "Table 'testn.nonexistant' doesn't exist\n" + + "Table '" + + Conf.baseConfig.database + + ".nonexistant' doesn't exist\n" + "sql: SELECT * FROM nonexistant WHERE a = ? AND b= ? - parameters:['a',true]" ), errorLogged diff --git a/test/integration/test-file.js b/test/integration/test-file.js index 600e507d..434ab555 100644 --- a/test/integration/test-file.js +++ b/test/integration/test-file.js @@ -19,14 +19,14 @@ describe('sql file import', () => { }); beforeEach(async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); await shareConn.query('DROP DATABASE IF EXISTS fimp'); await shareConn.query('CREATE DATABASE IF NOT EXISTS fimp'); await shareConn.query('FLUSH TABLES'); }); afterEach(async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); await shareConn.query('DROP DATABASE IF EXISTS fimp'); }); @@ -45,7 +45,7 @@ describe('sql file import', () => { }); it('simple file import with direct connection options', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); await basePromise.importFile( Object.assign({}, Conf.baseConfig, { file: __dirname + '/../tools/data-dump.sql', database: 'fimp' }) @@ -54,7 +54,7 @@ describe('sql file import', () => { }); it('big file import with direct connection options', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); this.timeout(300000); if (maxAllowedSize <= 32000000) return this.skip(); await basePromise.importFile( @@ -64,7 +64,7 @@ describe('sql file import', () => { }); it('no database selected', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); try { await basePromise.importFile( @@ -83,7 +83,7 @@ describe('sql file import', () => { describe('base connection', () => { it('missing options', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); try { await shareConn.importFile(); @@ -98,7 +98,7 @@ describe('sql file import', () => { }); it('wrong file options', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); try { await shareConn.importFile({ file: '/tt' }); @@ -112,13 +112,27 @@ describe('sql file import', () => { } }); it('simple file import', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); await shareConn.importFile({ file: __dirname + '/../tools/data-dump.sql', database: 'fimp' }); const res = await shareConn.query('SELECT DATABASE() as db'); assert.equal(res[0].db, Conf.baseConfig.database); await ensureLoaded(); }); + + it('simple file import without initial import ', async function () { + if (process.env.srv === 'skysql-ha') this.skip(); + this.timeout(30000); + const conn = await base.createConnection({ database: null }); + try { + await conn.importFile({ file: __dirname + '/../tools/data-dump.sql', database: 'fimp' }); + const res = await conn.query('SELECT DATABASE() as db'); + assert.equal(res[0].db, 'fimp'); + await ensureLoaded(); + } finally { + conn.end(); + } + }); }); describe('base pool', () => { @@ -139,7 +153,7 @@ describe('sql file import', () => { }); it('pool import', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const pool = base.createPool({ connectionLimit: 1 @@ -150,7 +164,7 @@ describe('sql file import', () => { }); it('no database selected', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const pool = base.createPool({ connectionLimit: 1, @@ -171,8 +185,7 @@ describe('sql file import', () => { }); it('Error in file', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || process.env.srv === 'xpand') - this.skip(); + if (process.env.srv === 'skysql-ha' || process.env.srv === 'xpand') this.skip(); this.timeout(30000); const conn = await base.createConnection({}); try { @@ -211,7 +224,7 @@ describe('sql file import', () => { }); it('simple file import without callback', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); baseCallback.importFile( Object.assign({}, Conf.baseConfig, { file: __dirname + '/../tools/data-dump.sql', database: 'fimp' }) @@ -223,7 +236,7 @@ describe('sql file import', () => { } else { const inter = setInterval(function () { conn.query('select count(*) as c from fimp.post', (err, res) => { - if (res[0].c == 3) { + if (res && res[0] && res[0].c == 3) { clearInterval(inter); conn.end(); done(); @@ -235,7 +248,7 @@ describe('sql file import', () => { }); it('simple file import with direct connection options', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); baseCallback.importFile( Object.assign({}, Conf.baseConfig, { file: __dirname + '/../tools/data-dump.sql', database: 'fimp' }), @@ -251,7 +264,7 @@ describe('sql file import', () => { it('big file import with direct connection options', function (done) { // skipping if it takes too long - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); + if (process.env.srv === 'skysql-ha' || isXpand()) this.skip(); this.timeout(300000); if (maxAllowedSize <= 32000000) return this.skip(); baseCallback.importFile( @@ -267,7 +280,7 @@ describe('sql file import', () => { }); it('no database selected', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); baseCallback.importFile( Object.assign({}, Conf.baseConfig, { file: __dirname + '/../tools/data-dump.sql', database: null }), @@ -287,8 +300,7 @@ describe('sql file import', () => { }); it('error in import file', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha' || process.env.srv === 'xpand') - this.skip(); + if (process.env.srv === 'skysql-ha' || process.env.srv === 'xpand') this.skip(); this.timeout(30000); baseCallback.importFile( Object.assign({}, Conf.baseConfig, { file: __dirname + '/../tools/data-dump-err.sql' }), @@ -317,7 +329,7 @@ describe('sql file import', () => { describe('base connection', () => { it('missing options', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const conn = base.createCallbackConnection(); conn.connect((err) => { @@ -338,7 +350,7 @@ describe('sql file import', () => { }); it('wrong file options', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const conn = base.createCallbackConnection(); conn.connect((err) => { @@ -359,7 +371,7 @@ describe('sql file import', () => { }); it('simple file import', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const conn = base.createCallbackConnection(); conn.connect((err) => { @@ -401,7 +413,7 @@ describe('sql file import', () => { }); it('pool import', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const pool = base.createPoolCallback({ connectionLimit: 1 @@ -419,7 +431,7 @@ describe('sql file import', () => { }); it('no database selected', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const pool = base.createPoolCallback({ connectionLimit: 1, diff --git a/test/integration/test-pool-callback.js b/test/integration/test-pool-callback.js index 57b92b3e..5141a316 100644 --- a/test/integration/test-pool-callback.js +++ b/test/integration/test-pool-callback.js @@ -1,16 +1,16 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); const Conf = require('../conf'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); describe('Pool callback', () => { before(function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); }); it('pool with wrong authentication', function (done) { @@ -152,7 +152,7 @@ describe('Pool callback', () => { }); it('pool error event', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const pool = base.createPoolCallback({ acquireTimeout: 4000, @@ -179,7 +179,7 @@ describe('Pool callback', () => { }); it('pool error fail connection', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const initTime = Date.now(); const pool = base.createPoolCallback({ @@ -939,7 +939,7 @@ describe('Pool callback', () => { }); it('pool execute timeout', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const pool = base.createPoolCallback({ connectionLimit: 1, @@ -960,7 +960,7 @@ describe('Pool callback', () => { }); it('pool batch timeout', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const pool = base.createPoolCallback({ connectionLimit: 1, diff --git a/test/integration/test-pool.js b/test/integration/test-pool.js index d7e57601..b5251a2b 100644 --- a/test/integration/test-pool.js +++ b/test/integration/test-pool.js @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; @@ -11,7 +11,7 @@ const fs = require('fs'); const path = require('path'); const os = require('os'); const Proxy = require('../tools/proxy'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); const { baseConfig } = require('../conf'); const winston = require('winston'); @@ -463,7 +463,7 @@ describe('Pool', () => { }); it('pool with wrong authentication', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const initTime = Date.now(); const pool = base.createPool({ @@ -529,7 +529,7 @@ describe('Pool', () => { }); it('pool execute timeout', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const pool = base.createPool({ connectionLimit: 1, @@ -549,7 +549,7 @@ describe('Pool', () => { }); it('pool batch timeout', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const pool = base.createPool({ connectionLimit: 1, @@ -567,7 +567,7 @@ describe('Pool', () => { }); it('pool error event', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const pool = base.createPool({ acquireTimeout: 4000, @@ -594,7 +594,7 @@ describe('Pool', () => { }); it('pool error fail connection', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); //to avoid host being blocked this.timeout(10000); const initTime = Date.now(); const pool = base.createPool({ @@ -614,7 +614,7 @@ describe('Pool', () => { }); it('pool with wrong authentication connection', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(15000); let err; let pool; @@ -644,7 +644,7 @@ describe('Pool', () => { }); it('create pool', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(5000); const pool = base.createPool({ connectionLimit: 1 }); const initTime = Date.now(); @@ -668,7 +668,7 @@ describe('Pool', () => { }); it('create pool with multipleStatement', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(5000); const pool = base.createPool({ connectionLimit: 5, @@ -736,7 +736,7 @@ describe('Pool', () => { }); it('pool ending during requests', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(20000); const pool = base.createPool({ connectionLimit: 1 }); const conn = await pool.getConnection(); @@ -839,12 +839,7 @@ describe('Pool', () => { }); it('pool getConnection timeout', function (done) { - if ( - process.env.srv === 'maxscale' || - process.env.srv === 'skysql' || - process.env.srv === 'skysql-ha' || - process.env.srv === 'xpand' - ) + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || process.env.srv === 'xpand') this.skip(); const pool = base.createPool({ connectionLimit: 1, acquireTimeout: 200 }); let errorThrown = false; @@ -877,7 +872,7 @@ describe('Pool', () => { let logger = winston.createLogger({ transports: [new winston.transports.File({ filename: tmpLogFile })] }); - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 1, acquireTimeout: 200, @@ -921,7 +916,7 @@ describe('Pool', () => { }); it('pool leakDetectionTimeout timeout', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 1, acquireTimeout: 200, @@ -968,7 +963,7 @@ describe('Pool', () => { }); it('pool getConnection timeout recovery', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(5000); const pool = base.createPool({ connectionLimit: 2, @@ -1016,7 +1011,7 @@ describe('Pool', () => { }); it('pool query timeout', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(5000); const pool = base.createPool({ connectionLimit: 1, acquireTimeout: 500 }); const initTime = Date.now(); @@ -1140,7 +1135,7 @@ describe('Pool', () => { }); it('connection fail handling', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 2, minDelayValidation: 200 @@ -1181,8 +1176,7 @@ describe('Pool', () => { it('query fail handling', function (done) { this.timeout(20000); - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) - this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha' || isXpand()) this.skip(); const pool = base.createPool({ connectionLimit: 2, minDelayValidation: 200 @@ -1224,7 +1218,7 @@ describe('Pool', () => { }); it('connection end', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 2 }); setTimeout(() => { //check available connections in pool @@ -1258,7 +1252,7 @@ describe('Pool', () => { }); it('connection release alias', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 2 }); setTimeout(() => { //check available connections in pool @@ -1292,7 +1286,7 @@ describe('Pool', () => { }); it('connection destroy', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 2 }); setTimeout(() => { //check available connections in pool @@ -1444,7 +1438,7 @@ describe('Pool', () => { }); it("ensure pipe ending doesn't stall connection", function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); //sequence engine only exist in MariaDB if (!shareConn.info.isMariaDB()) this.skip(); const ver = process.version.substring(1).split('.'); @@ -1487,7 +1481,7 @@ describe('Pool', () => { }); it("ensure pipe ending doesn't stall connection promise", async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); //sequence engine only exist in MariaDB if (!shareConn.info.isMariaDB()) this.skip(); const ver = process.version.substring(1).split('.'); @@ -1531,7 +1525,7 @@ describe('Pool', () => { }); it('test minimum idle decrease', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(30000); const pool = base.createPool({ connectionLimit: 10, @@ -1595,7 +1589,7 @@ describe('Pool', () => { }); it('test minimum idle', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(5000); const pool = base.createPool({ connectionLimit: 10, @@ -1616,7 +1610,7 @@ describe('Pool', () => { }); it('pool immediate error', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool({ connectionLimit: 1 }); pool .getConnection() @@ -1634,7 +1628,7 @@ describe('Pool', () => { }); it('pool server defect timeout', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); this.timeout(50000); const proxy = new Proxy({ port: Conf.baseConfig.port, diff --git a/test/integration/test-query-values-in-sql.js b/test/integration/test-query-values-in-sql.js index 29f85957..7b81846d 100644 --- a/test/integration/test-query-values-in-sql.js +++ b/test/integration/test-query-values-in-sql.js @@ -1,11 +1,11 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); describe('sql template strings', () => { const value = "'`\\"; @@ -153,7 +153,7 @@ describe('sql template strings', () => { }); it('pool query with parameters', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPool(); try { await pool.query('drop table IF EXISTS pool_query_param'); @@ -170,7 +170,7 @@ describe('sql template strings', () => { }); it('pool batch with parameters', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); let params = {}; const pool = base.createPool(params); pool @@ -198,7 +198,7 @@ describe('sql template strings', () => { }); it('pool callback query with parameters', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); const pool = base.createPoolCallback(); pool.query('drop table IF EXISTS pool_parse_call', (err, res) => { pool.query('CREATE TABLE pool_parse_call(t varchar(128))', (err, res) => { @@ -223,7 +223,7 @@ describe('sql template strings', () => { }); it('pool callback batch with parameters', function (done) { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); let params = {}; const pool = base.createPoolCallback(params); pool.query('drop table pool_batch_call', (err) => { diff --git a/test/integration/test-redirection.js b/test/integration/test-redirection.js index ed8a34fa..7aa8875d 100644 --- a/test/integration/test-redirection.js +++ b/test/integration/test-redirection.js @@ -8,6 +8,7 @@ const base = require('../base.js'); const Proxy = require('../tools/proxy'); const Conf = require('../conf'); const { assert } = require('chai'); +const { isMaxscale } = require('../base'); describe('redirection', () => { it('basic redirection', async function () { if (process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); @@ -17,8 +18,9 @@ describe('redirection', () => { resetAfterUse: false }); await proxy.start(); - let conn = await base.createConnection({ host: 'localhost', port: proxy.port() }); + let conn = null; try { + conn = await base.createConnection({ host: 'localhost', port: proxy.port() }); assert.equal(proxy.port(), conn.info.port); let permitRedirection = true; try { @@ -35,14 +37,14 @@ describe('redirection', () => { await conn2.end(); } } finally { - conn.end(); + if (conn) conn.end(); proxy.close(); } }); it('maxscale redirection', async function () { // need maxscale 23.08+ - if (process.env.srv !== 'maxscale') this.skip(); + if (!isMaxscale()) this.skip(); const proxy = new Proxy({ port: Conf.baseConfig.port, host: Conf.baseConfig.host, @@ -53,6 +55,7 @@ describe('redirection', () => { try { await shareConn.query(`set @@global.redirect_url="mariadb://${Conf.baseConfig.host}:${Conf.baseConfig.port}"`); } catch (e) { + proxy.close(); this.skip(); return; } diff --git a/test/integration/test-socket.js b/test/integration/test-socket.js index 7bfcdcf9..66d81b2e 100644 --- a/test/integration/test-socket.js +++ b/test/integration/test-socket.js @@ -1,17 +1,17 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); const Conf = require('../conf'); +const { isMaxscale } = require('../base'); describe('test socket', () => { it('named pipe', function (done) { if (process.platform !== 'win32') this.skip(); - if (!process.env.LOCAL_SOCKET_AVAILABLE || process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') - this.skip(); + if (!process.env.LOCAL_SOCKET_AVAILABLE || isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); if (Conf.baseConfig.host !== 'localhost' && Conf.baseConfig.host !== 'mariadb.example.com') this.skip(); const test = this; shareConn diff --git a/test/integration/test-ssl.js b/test/integration/test-ssl.js index cad9a193..5c7d1af2 100644 --- a/test/integration/test-ssl.js +++ b/test/integration/test-ssl.js @@ -8,7 +8,7 @@ const { assert } = require('chai'); const fs = require('fs'); const Conf = require('../conf'); const tls = require('tls'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); const crypto = require('crypto'); const errors = require('../../lib/misc/errors'); @@ -248,7 +248,7 @@ describe('ssl', function () { it('self signed certificate forcing with password ssl:true', async function () { if ( - process.env.srv === 'maxscale' || + isMaxscale() || process.env.srv === 'skysql-ha' || process.env.srv === 'mariadb-es' || process.env.srv === 'mariadb-es-test' @@ -272,7 +272,7 @@ describe('ssl', function () { it('self signed certificate forcing with password ssl: {rejectUnauthorized: true}', async function () { if ( - process.env.srv === 'maxscale' || + isMaxscale() || process.env.srv === 'skysql-ha' || process.env.srv === 'mariadb-es' || process.env.srv === 'mariadb-es-test' @@ -296,7 +296,7 @@ describe('ssl', function () { }); it('ensure connection use SSL ', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); if (!sslEnable) this.skip(); if (!base.utf8Collation()) this.skip(); const conn = await base.createConnection({ @@ -467,7 +467,7 @@ describe('ssl', function () { }); it('TLSv1.2 with cipher working', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); if (!sslEnable) this.skip(); //MariaDB server doesn't permit TLSv1.2 on windows //MySQL community version doesn't support TLSv1.2 @@ -568,14 +568,14 @@ describe('ssl', function () { if (conn) { await validConnection(conn); conn.end(); - if (process.env.srv !== 'maxscale' && process.env.srv !== 'skysql-ha') { + if (isMaxscale() && process.env.srv !== 'skysql-ha') { throw new Error('Must have thrown an exception !'); } } }); it('Mutual authentication providing client certificate', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); if (!sslEnable) this.skip(); if (!ca || !clientKey || !clientCert) this.skip(); if (!base.utf8Collation()) this.skip(); @@ -595,7 +595,7 @@ describe('ssl', function () { }); it('Mutual authentication providing client keystore', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); if (!sslEnable) this.skip(); if (!ca || !clientKeystore) this.skip(); if (!base.utf8Collation()) this.skip(); @@ -620,7 +620,7 @@ describe('ssl', function () { }); it('ssl change user', async function () { - if (process.env.srv === 'maxscale' || process.env.srv === 'skysql-ha') this.skip(); + if (isMaxscale() || process.env.srv === 'skysql-ha') this.skip(); if (!shareConn.info.isMariaDB()) this.skip(); if (!sslEnable) this.skip(); let currUser; diff --git a/test/integration/test-transaction.js b/test/integration/test-transaction.js index 667e5135..c9ec702f 100644 --- a/test/integration/test-transaction.js +++ b/test/integration/test-transaction.js @@ -138,7 +138,7 @@ describe('transaction', () => { assert.equal(shareConn.info.status & ServerStatus.STATUS_IN_TRANS, 1); await shareConn.commit(); assert.equal(shareConn.info.status & ServerStatus.STATUS_IN_TRANS, 0); - if (process.env.srv !== 'maxscale' && process.env.srv !== 'skysql-ha') { + if (process.env.srv !== 'skysql-ha') { const rows = await shareConn.query('SELECT count(*) as nb FROM testTransaction'); assert.equal(shareConn.info.status & ServerStatus.STATUS_IN_TRANS, 1); assert.equal(rows[0].nb, 1); diff --git a/test/integration/test-typecast.js b/test/integration/test-typecast.js index fdcff623..0bb88ec7 100644 --- a/test/integration/test-typecast.js +++ b/test/integration/test-typecast.js @@ -1,13 +1,21 @@ // SPDX-License-Identifier: LGPL-2.1-or-later -// Copyright (c) 2015-2023 MariaDB Corporation Ab +// Copyright (c) 2015-2024 MariaDB Corporation Ab 'use strict'; const base = require('../base.js'); const { assert } = require('chai'); -const { isXpand } = require('../base'); +const { isXpand, isMaxscale } = require('../base'); +const Conf = require('../conf'); +const Capabilities = require('../../lib/const/capabilities'); describe('TypeCast', () => { + let serverPermitExtendedInfos; + before(function () { + serverPermitExtendedInfos = + (shareConn.info.serverCapabilities & Capabilities.MARIADB_CLIENT_EXTENDED_TYPE_INFO) > 0; + }); + const changeCaseCast = (column, next) => { if (column.type == 'VAR_STRING') { const val = column.string(); @@ -239,13 +247,7 @@ describe('TypeCast', () => { } }, { - b1: - shareConn.info.isMariaDB() && - shareConn.info.hasMinVersion(10, 5, 2) && - process.env.srv !== 'maxscale' && - process.env.srv !== 'skysql-ha' - ? { type: 'Point' } - : null + b1: serverPermitExtendedInfos ? { type: 'Point' } : null } ]; let rows = await conn.query('SELECT * from stupidCast');