From a3c84a4cfffab11396c8df658e5693e2e59563e4 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Thu, 5 Dec 2024 14:43:52 +0200 Subject: [PATCH 1/3] chore(firebolt-driver): code polishment and fix lint warnings --- .../test/FireboltQuery.test.ts | 66 +++++++++---------- .../test/autostart.test.ts | 4 +- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/packages/cubejs-firebolt-driver/test/FireboltQuery.test.ts b/packages/cubejs-firebolt-driver/test/FireboltQuery.test.ts index 1aa4ae0c58ce0..8639841a482dd 100644 --- a/packages/cubejs-firebolt-driver/test/FireboltQuery.test.ts +++ b/packages/cubejs-firebolt-driver/test/FireboltQuery.test.ts @@ -70,13 +70,13 @@ cube(\`sales\`, { measures: ['sales.count'], filters: [ { - member: "sales.isShiped", - operator: "equals", - values: ["true"] + member: 'sales.isShiped', + operator: 'equals', + values: ['true'] } ] } - ) + ); const queryAndParams = query.buildSqlAndParams(); @@ -84,36 +84,34 @@ cube(\`sales\`, { '("sales".is_shiped = CAST(? AS BOOLEAN))' ); - expect(queryAndParams[1]).toEqual(["true"]); - })) - it("should cast timestamp", () => - compiler.compile().then(() => { - const query = new FireboltQuery( - { joinGraph, cubeEvaluator, compiler }, - { - measures: ["sales.count"], - timeDimensions: [ - { - dimension: "sales.salesDatetime", - granularity: "day", - dateRange: ["2017-01-01", "2017-01-02"], - }, - ], - timezone: "America/Los_Angeles", - order: [ - { - id: "sales.salesDatetime", - }, - ], - } - ); - - const queryAndParams = query.buildSqlAndParams(); + expect(queryAndParams[1]).toEqual(['true']); + })); - expect(queryAndParams[0]).toContain( - '("sales".sales_datetime >= ?::timestamptz AND "sales".sales_datetime <= ?::timestamptz)' - ); - })); + it('should cast timestamp', () => compiler.compile().then(() => { + const query = new FireboltQuery( + { joinGraph, cubeEvaluator, compiler }, + { + measures: ['sales.count'], + timeDimensions: [ + { + dimension: 'sales.salesDatetime', + granularity: 'day', + dateRange: ['2017-01-01', '2017-01-02'], + }, + ], + timezone: 'America/Los_Angeles', + order: [ + { + id: 'sales.salesDatetime', + }, + ], + } + ); + const queryAndParams = query.buildSqlAndParams(); -}) + expect(queryAndParams[0]).toContain( + '("sales".sales_datetime >= ?::timestamptz AND "sales".sales_datetime <= ?::timestamptz)' + ); + })); +}); diff --git a/packages/cubejs-firebolt-driver/test/autostart.test.ts b/packages/cubejs-firebolt-driver/test/autostart.test.ts index 3fbd52e534ef2..7da23b361166d 100644 --- a/packages/cubejs-firebolt-driver/test/autostart.test.ts +++ b/packages/cubejs-firebolt-driver/test/autostart.test.ts @@ -1,9 +1,9 @@ import {assertDataSource, getEnv} from '@cubejs-backend/shared'; import { DriverTests } from '@cubejs-backend/testing-shared'; -import { FireboltDriver } from '../src'; import { Firebolt } from 'firebolt-sdk'; import { version } from 'firebolt-sdk/package.json'; +import { FireboltDriver } from '../src'; describe('FireboltDriver autostart', () => { let tests: DriverTests; @@ -43,7 +43,7 @@ describe('FireboltDriver autostart', () => { const engineName = getEnv('fireboltEngineName', { dataSource }); const firebolt = Firebolt({ apiEndpoint: getEnv('fireboltApiEndpoint', { dataSource }) || 'api.app.firebolt.io', - }) + }); await firebolt.connect({ auth, database: getEnv('dbName', { dataSource }), From 04d6c4ea9ebd802eaf96ae430e47d2d855fc7eb7 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Thu, 5 Dec 2024 15:58:26 +0200 Subject: [PATCH 2/3] fix running tests --- packages/cubejs-firebolt-driver/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json index a0b5398975980..50efa59ab17b7 100644 --- a/packages/cubejs-firebolt-driver/package.json +++ b/packages/cubejs-firebolt-driver/package.json @@ -23,7 +23,7 @@ "watch": "tsc -w", "test": "yarn integration", "integration": "npm run integration:firebolt", - "integration:firebolt": "jest --verbose dist/test", + "integration:firebolt": "jest --verbose dist/test --runInBand", "lint": "eslint src/* --ext .ts", "lint:fix": "eslint --fix src/* --ext .ts" }, From 83334fe56d184b59366fc42b64431119c3bf5cdc Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Thu, 5 Dec 2024 18:30:47 +0200 Subject: [PATCH 3/3] chore(firebolt-driver): setup CI tests --- .github/actions/integration/firebolt.sh | 10 ++++++++++ .github/workflows/push.yml | 9 ++++++++- packages/cubejs-firebolt-driver/package.json | 5 ++++- .../{Firebolt.test.ts => FireboltDriver.test.ts} | 0 .../cubejs-firebolt-driver/test/autostart.test.ts | 2 +- packages/cubejs-firebolt-driver/test/test-env.js | 14 ++++++++++++++ 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100755 .github/actions/integration/firebolt.sh rename packages/cubejs-firebolt-driver/test/{Firebolt.test.ts => FireboltDriver.test.ts} (100%) create mode 100644 packages/cubejs-firebolt-driver/test/test-env.js diff --git a/.github/actions/integration/firebolt.sh b/.github/actions/integration/firebolt.sh new file mode 100755 index 0000000000000..4be3b7f99ccf8 --- /dev/null +++ b/.github/actions/integration/firebolt.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -eo pipefail + +# Debug log for test containers +export DEBUG=testcontainers + +echo "::group::Firebolt [cloud]" +yarn lerna run --concurrency 1 --stream --no-prefix integration:firebolt + +echo "::endgroup::" diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 778f2b91cff35..f10a356ebc8ee 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -319,7 +319,7 @@ jobs: node-version: [20.x] db: [ 'clickhouse', 'druid', 'elasticsearch', 'mssql', 'mysql', 'postgres', 'prestodb', - 'mysql-aurora-serverless', 'crate', 'mongobi' + 'mysql-aurora-serverless', 'crate', 'mongobi', 'firebolt' ] fail-fast: false @@ -370,6 +370,13 @@ jobs: retry_wait_seconds: 15 timeout_minutes: 30 command: ./.github/actions/integration/${{ matrix.db }}.sh + env: + # Firebolt Integration + DRIVERS_TESTS_FIREBOLT_CUBEJS_FIREBOLT_ENGINE_NAME: ${{ secrets.DRIVERS_TESTS_FIREBOLT_CUBEJS_FIREBOLT_ENGINE_NAME }} + DRIVERS_TESTS_FIREBOLT_CUBEJS_DB_NAME: ${{ secrets.DRIVERS_TESTS_FIREBOLT_CUBEJS_DB_NAME }} + DRIVERS_TESTS_FIREBOLT_CUBEJS_FIREBOLT_ACCOUNT: ${{ secrets.DRIVERS_TESTS_FIREBOLT_CUBEJS_FIREBOLT_ACCOUNT }} + DRIVERS_TESTS_FIREBOLT_CUBEJS_DB_USER: ${{ secrets.DRIVERS_TESTS_FIREBOLT_CUBEJS_DB_USER }} + DRIVERS_TESTS_FIREBOLT_CUBEJS_DB_PASS: ${{ secrets.DRIVERS_TESTS_FIREBOLT_CUBEJS_DB_PASS }} integration-smoke: needs: [ latest-tag-sha, build-cubestore ] diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json index 50efa59ab17b7..5c38d4fa2ea11 100644 --- a/packages/cubejs-firebolt-driver/package.json +++ b/packages/cubejs-firebolt-driver/package.json @@ -43,7 +43,10 @@ "access": "public" }, "jest": { - "testEnvironment": "node" + "testEnvironment": "node", + "setupFiles": [ + "./test/test-env.js" + ] }, "eslintConfig": { "extends": "../cubejs-linter" diff --git a/packages/cubejs-firebolt-driver/test/Firebolt.test.ts b/packages/cubejs-firebolt-driver/test/FireboltDriver.test.ts similarity index 100% rename from packages/cubejs-firebolt-driver/test/Firebolt.test.ts rename to packages/cubejs-firebolt-driver/test/FireboltDriver.test.ts diff --git a/packages/cubejs-firebolt-driver/test/autostart.test.ts b/packages/cubejs-firebolt-driver/test/autostart.test.ts index 7da23b361166d..a746a589fd77c 100644 --- a/packages/cubejs-firebolt-driver/test/autostart.test.ts +++ b/packages/cubejs-firebolt-driver/test/autostart.test.ts @@ -1,4 +1,4 @@ -import {assertDataSource, getEnv} from '@cubejs-backend/shared'; +import { assertDataSource, getEnv } from '@cubejs-backend/shared'; import { DriverTests } from '@cubejs-backend/testing-shared'; import { Firebolt } from 'firebolt-sdk'; diff --git a/packages/cubejs-firebolt-driver/test/test-env.js b/packages/cubejs-firebolt-driver/test/test-env.js new file mode 100644 index 0000000000000..5c2fdd16f8b58 --- /dev/null +++ b/packages/cubejs-firebolt-driver/test/test-env.js @@ -0,0 +1,14 @@ +const REQUIRED_ENV_VARS = [ + 'CUBEJS_DB_USER', + 'CUBEJS_DB_PASS', + 'CUBEJS_DB_NAME', + 'CUBEJS_FIREBOLT_ENGINE_NAME', + 'CUBEJS_FIREBOLT_ACCOUNT', +]; + +REQUIRED_ENV_VARS.forEach((key) => { + // Trying to populate from DRIVERS_TESTS_FIREBOLT_* vars + if (process.env[`DRIVERS_TESTS_FIREBOLT_${key}`] !== undefined) { + process.env[key] = process.env[`DRIVERS_TESTS_FIREBOLT_${key}`]; + } +});