Skip to content

Commit 2530d1e

Browse files
authored
test(testing-drivers): isolate pre-aggregations schema per run to fix shared-cloud races (cube-js#11151)
1 parent 0f0300d commit 2530d1e

5 files changed

Lines changed: 15 additions & 5 deletions

File tree

packages/cubejs-testing-drivers/fixtures/athena.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"CUBEJS_CUBESTORE_HOST": "store",
77
"CUBEJS_DB_TYPE": "athena",
88
"CUBEJS_DB_EXPORT_BUCKET": "s3://athena-drivers-tests-preaggs/bucket",
9-
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "drivers_tests_preaggs",
9+
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "${DRIVERS_TESTS_CUBEJS_PRE_AGGREGATIONS_SCHEMA:-drivers_tests_preaggs}",
1010
"CUBEJS_AWS_KEY": "${DRIVERS_TESTS_ATHENA_CUBEJS_AWS_KEY}",
1111
"CUBEJS_AWS_SECRET": "${DRIVERS_TESTS_ATHENA_CUBEJS_AWS_SECRET}",
1212
"CUBEJS_AWS_REGION": "us-east-1",

packages/cubejs-testing-drivers/fixtures/bigquery.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"CUBEJS_CUBESTORE_HOST": "store",
88
"CUBEJS_DB_TYPE": "bigquery",
99
"CUBEJS_DB_NAME": "test",
10-
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "dev_pre_aggregations",
10+
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "${DRIVERS_TESTS_CUBEJS_PRE_AGGREGATIONS_SCHEMA:-dev_pre_aggregations}",
1111
"CUBEJS_DB_BQ_PROJECT_ID": "cube-open-source",
1212
"CUBEJS_DB_BQ_CREDENTIALS": "${DRIVERS_TESTS_CUBEJS_DB_BQ_CREDENTIALS}",
1313

packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
"CUBEJS_DB_DATABRICKS_TOKEN": "${DRIVERS_TESTS_CUBEJS_DB_DATABRICKS_TOKEN}",
7474
"CUBEJS_DB_DATABRICKS_URL": "${DRIVERS_TESTS_CUBEJS_DB_DATABRICKS_URL}",
7575
"CUBEJS_DB_DATABRICKS_ACCEPT_POLICY": "true",
76-
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "drivers_tests_preaggs",
76+
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "${DRIVERS_TESTS_CUBEJS_PRE_AGGREGATIONS_SCHEMA:-drivers_tests_preaggs}",
7777
"CUBEJS_PG_SQL_PORT": "5656",
7878
"CUBEJS_SQL_USER": "admin",
7979
"CUBEJS_SQL_PASSWORD": "admin_password",

packages/cubejs-testing-drivers/fixtures/redshift.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"CUBEJS_DB_HOST": "${DRIVERS_TESTS_CUBEJS_DB_REDSHIFT_HOST}",
2323
"CUBEJS_DB_PORT": "5439",
2424
"CUBEJS_DB_NAME": "dev",
25+
"CUBEJS_PRE_AGGREGATIONS_SCHEMA": "${DRIVERS_TESTS_CUBEJS_PRE_AGGREGATIONS_SCHEMA:-dev_pre_aggregations}",
2526
"CUBEJS_DB_USER": "${DRIVERS_TESTS_CUBEJS_DB_REDSHIFT_USER}",
2627
"CUBEJS_DB_PASS": "${DRIVERS_TESTS_CUBEJS_DB_REDSHIFT_PASS}",
2728
"CUBEJS_DB_MAX_POOL": "2",

packages/cubejs-testing-drivers/src/helpers/runEnvironment.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,19 @@ export async function runEnvironment(
127127
const { length } = val;
128128

129129
if (val.indexOf('${') === 0 && val.indexOf('}') === length - 1) {
130-
const name = val.slice(2, length - 1).trim();
130+
// Supports docker-compose style interpolation `${VAR}` and `${VAR:-default}`.
131+
// The `:-default` fallback lets shared-cloud fixtures point a value (e.g. the
132+
// pre-aggregations schema) at a per-run env var in CI while keeping the original
133+
// literal as the default for local/other runs where the var is unset.
134+
const expr = val.slice(2, length - 1).trim();
135+
const sepIdx = expr.indexOf(':-');
136+
const name = (sepIdx === -1 ? expr : expr.slice(0, sepIdx)).trim();
137+
const fallback = sepIdx === -1 ? undefined : expr.slice(sepIdx + 2);
131138
const value = process.env[name];
132139
if (value) {
133-
process.env[key] = process.env[name];
140+
process.env[key] = value;
141+
} else if (fallback !== undefined) {
142+
process.env[key] = fallback;
134143
} else {
135144
throw new Error(`Env variable ${name} must be defined, because it's used as ${key}`);
136145
}

0 commit comments

Comments
 (0)