From 01fabc69ca12f2a8ad2e2e856a419023c6f4ddd3 Mon Sep 17 00:00:00 2001 From: rusher Date: Wed, 10 Jan 2024 11:39:45 +0100 Subject: [PATCH] [misc] adding maxscale redirection test --- test/integration/test-redirection.js | 63 ++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/test/integration/test-redirection.js b/test/integration/test-redirection.js index eedf620f..ed8a34fa 100644 --- a/test/integration/test-redirection.js +++ b/test/integration/test-redirection.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'; @@ -17,18 +17,22 @@ describe('redirection', () => { resetAfterUse: false }); await proxy.start(); - let conn = await base.createConnection({ port: proxy.port() }); + let conn = await base.createConnection({ host: 'localhost', port: proxy.port() }); try { assert.equal(proxy.port(), conn.info.port); let permitRedirection = true; try { - await conn.query('set @@session.redirect_url="mariadb://localhost:' + Conf.baseConfig.port + '"'); + await conn.beginTransaction(); + await conn.query(`set @@session.redirect_url="mariadb://${Conf.baseConfig.host}:${Conf.baseConfig.port}"`); } catch (e) { // if server doesn't support redirection permitRedirection = false; } if (permitRedirection) { assert.equal(Conf.baseConfig.port, conn.info.port); + let conn2 = await base.createConnection({ host: 'localhost', port: proxy.port() }); + assert.equal(proxy.port(), conn2.info.port); + await conn2.end(); } } finally { conn.end(); @@ -36,6 +40,42 @@ describe('redirection', () => { } }); + it('maxscale redirection', async function () { + // need maxscale 23.08+ + if (process.env.srv !== 'maxscale') this.skip(); + const proxy = new Proxy({ + port: Conf.baseConfig.port, + host: Conf.baseConfig.host, + resetAfterUse: false + }); + await proxy.start(); + + try { + await shareConn.query(`set @@global.redirect_url="mariadb://${Conf.baseConfig.host}:${Conf.baseConfig.port}"`); + } catch (e) { + this.skip(); + return; + } + let conn = await base.createConnection({ host: 'localhost', port: proxy.port() }); + try { + assert.equal(Conf.baseConfig.host, conn.info.host); + assert.equal(Conf.baseConfig.port, conn.info.port); + console.log(await conn.query('Select 1')); + conn.end(); + console.log('*****************************************************************************'); + let conn2 = await base.createConnection({ host: 'localhost', port: proxy.port() }); + assert.equal(Conf.baseConfig.port, conn2.info.port); + console.log(await conn2.query('Select 2')); + console.log('*****************************************************************************'); + conn2.end(); + } finally { + proxy.close(); + try { + shareConn.query('set @@global.redirect_url=""'); + } catch (e) {} + } + }); + it('redirection during pipelining', async function () { if (process.env.srv === 'skysql' || process.env.srv === 'skysql-ha') this.skip(); const proxy = new Proxy({ @@ -44,14 +84,17 @@ describe('redirection', () => { resetAfterUse: false }); await proxy.start(); - let conn = await base.createConnection({ port: proxy.port() }); + let conn = await base.createConnection({ host: 'localhost', port: proxy.port() }); try { assert.equal(proxy.port(), conn.info.port); let permitRedirection = true; conn.query('SELECT 1'); - conn.query('set @@session.redirect_url="mariadb://localhost:' + Conf.baseConfig.port + '"').catch((e) => { - permitRedirection = false; - }); + await conn.beginTransaction(); + conn + .query(`set @@session.redirect_url="mariadb://${Conf.baseConfig.host}:${Conf.baseConfig.port}"`) + .catch((e) => { + permitRedirection = false; + }); conn.query('SELECT 2'); assert.equal(proxy.port(), conn.info.port); await conn.query('SELECT 3'); @@ -72,18 +115,20 @@ describe('redirection', () => { resetAfterUse: false }); await proxy.start(); - let conn = await base.createConnection({ port: proxy.port() }); + let conn = await base.createConnection({ host: 'localhost', port: proxy.port() }); try { assert.equal(proxy.port(), conn.info.port); let permitRedirection = true; try { await conn.beginTransaction(); - await conn.query('set @@session.redirect_url="mariadb://localhost:' + Conf.baseConfig.port + '"'); + await conn.query(`set @@session.redirect_url="mariadb://${Conf.baseConfig.host}:${Conf.baseConfig.port}"`); } catch (e) { // if server doesn't support redirection permitRedirection = false; } assert.equal(proxy.port(), conn.info.port); + const rows = await conn.query("SELECT '4'"); + assert.deepEqual(rows, [{ 4: '4' }]); if (permitRedirection) { await conn.commit(); assert.equal(Conf.baseConfig.port, conn.info.port);