diff --git a/test/integration/testHTAP.js b/test/integration/testHTAP.js index fb412747a..febe9b7a1 100644 --- a/test/integration/testHTAP.js +++ b/test/integration/testHTAP.js @@ -7,24 +7,37 @@ const async = require('async'); const connOption = require('./connectionOptions').valid; const testUtil = require('./testUtil'); +function getRandomDBNames() { + const dbName = 'qcc_test_db'; + const arr = []; + const randomNumber = Math.floor(Math.random() * 10000); + for (let i = 0; i < 3; i++){ + arr.push(dbName + (randomNumber + i)); + } + return arr; +} + // Only the AWS servers support the hybrid table in the GitHub action. if (process.env.CLOUD_PROVIDER === 'AWS') { describe('Query Context Cache test', function () { + this.retries(3); let connection; - - before(async () => { + const dbNames = getRandomDBNames(); + + beforeEach(async () => { connection = testUtil.createConnection(connOption); await testUtil.connectAsync(connection); }); after(async () => { + await testUtil.dropDBsIgnoringErrorsAsync(connection, dbNames); await testUtil.destroyConnectionAsync(connection); }); const querySet = [ { sqlTexts: [ - 'create or replace database db1', + `create or replace database ${dbNames[0]}`, 'create or replace hybrid table t1 (a int primary key, b int)', 'insert into t1 values (1, 2), (2, 3), (3, 4)' ], @@ -32,7 +45,7 @@ if (process.env.CLOUD_PROVIDER === 'AWS') { }, { sqlTexts: [ - 'create or replace database db2', + `create or replace database ${dbNames[1]}`, 'create or replace hybrid table t2 (a int primary key, b int)', 'insert into t2 values (1, 2), (2, 3), (3, 4)' ], @@ -40,7 +53,7 @@ if (process.env.CLOUD_PROVIDER === 'AWS') { }, { sqlTexts: [ - 'create or replace database db3', + `create or replace database ${dbNames[2]}`, 'create or replace hybrid table t3 (a int primary key, b int)', 'insert into t3 values (1, 2), (2, 3), (3, 4)' ], @@ -48,9 +61,9 @@ if (process.env.CLOUD_PROVIDER === 'AWS') { }, { sqlTexts: [ - 'select * from db1.public.t1 x, db2.public.t2 y, db3.public.t3 z where x.a = y.a and y.a = z.a;', - 'select * from db1.public.t1 x, db2.public.t2 y where x.a = y.a;', - 'select * from db2.public.t2 y, db3.public.t3 z where y.a = z.a;' + `select * from ${dbNames[0]}.public.t1 x, ${dbNames[1]}.public.t2 y, ${dbNames[2]}.public.t3 z where x.a = y.a and y.a = z.a;`, + `select * from ${dbNames[0]}.public.t1 x, ${dbNames[1]}.public.t2 y where x.a = y.a;`, + `select * from ${dbNames[1]}.public.t2 y, ${dbNames[2]}.public.t3 z where y.a = z.a;` ], QccSize: 4, }, diff --git a/test/integration/testUtil.js b/test/integration/testUtil.js index aa05e6bf6..ce9812077 100644 --- a/test/integration/testUtil.js +++ b/test/integration/testUtil.js @@ -101,6 +101,22 @@ module.exports.dropTablesIgnoringErrorsAsync = async (connection, tableNames) => } }; +/** + * Drop databases one by one if exist - any connection error is ignored + * @param connection Connection + * @param dbNames string[] + * @return {Promise} + */ +module.exports.dropDBsIgnoringErrorsAsync = async (connection, dbNames) => { + for (const dbName of dbNames) { + try { + await executeCmdAsync(connection, `DROP DATABASE IF EXISTS ${dbName}`); + } catch (e) { + console.warn(`Cannot drop database ${dbName}: ${JSON.stringify(e)}`); + } + } +}; + module.exports.checkError = function (err) { assert.ok(!err, JSON.stringify(err)); };