From 569e5ed1fc806ffd988ec73715ae1aa4e2ef1b2d Mon Sep 17 00:00:00 2001 From: jawelton74 <103591340+jawelton74@users.noreply.github.com> Date: Wed, 1 Oct 2025 08:54:43 -0700 Subject: [PATCH] Support RBAC in E2E tests for Mongo & Cassandra (#2220) * Add E2E test changes to support RBAC for Mongo and Cassandra. * Uncomment Mongo changes. * Be more selective with which tokens are passed to DE for each test. --- .github/workflows/ci.yml | 12 +++++ test/fx.ts | 79 ++++++++++++++++++++++++------- test/testExplorer/TestExplorer.ts | 19 ++++++++ 3 files changed, 92 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80640f594..284405b54 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -198,6 +198,18 @@ jobs: GREMLIN_TESTACCOUNT_TOKEN=$(az account get-access-token --scope "https://github-e2etests-gremlin.documents.azure.com/.default" -o tsv --query accessToken) echo "::add-mask::$GREMLIN_TESTACCOUNT_TOKEN" echo GREMLIN_TESTACCOUNT_TOKEN=$GREMLIN_TESTACCOUNT_TOKEN >> $GITHUB_ENV + CASSANDRA_TESTACCOUNT_TOKEN=$(az account get-access-token --scope "https://github-e2etests-cassandra.documents.azure.com/.default" -o tsv --query accessToken) + echo "::add-mask::$CASSANDRA_TESTACCOUNT_TOKEN" + echo CASSANDRA_TESTACCOUNT_TOKEN=$CASSANDRA_TESTACCOUNT_TOKEN >> $GITHUB_ENV + MONGO_TESTACCOUNT_TOKEN=$(az account get-access-token --scope "https://github-e2etests-mongo.documents.azure.com/.default" -o tsv --query accessToken) + echo "::add-mask::$MONGO_TESTACCOUNT_TOKEN" + echo MONGO_TESTACCOUNT_TOKEN=$MONGO_TESTACCOUNT_TOKEN >> $GITHUB_ENV + MONGO32_TESTACCOUNT_TOKEN=$(az account get-access-token --scope "https://github-e2etests-mongo32.documents.azure.com/.default" -o tsv --query accessToken) + echo "::add-mask::$MONGO32_TESTACCOUNT_TOKEN" + echo MONGO32_TESTACCOUNT_TOKEN=$MONGO32_TESTACCOUNT_TOKEN >> $GITHUB_ENV + MONGO_READONLY_TESTACCOUNT_TOKEN=$(az account get-access-token --scope "https://github-e2etests-mongo-readonly.documents.azure.com/.default" -o tsv --query accessToken) + echo "::add-mask::$MONGO_READONLY_TESTACCOUNT_TOKEN" + echo MONGO_READONLY_TESTACCOUNT_TOKEN=$MONGO_READONLY_TESTACCOUNT_TOKEN >> $GITHUB_ENV - name: Run test shard ${{ matrix['shardIndex'] }} of ${{ matrix['shardTotal']}} run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --workers=3 - name: Upload blob report to GitHub Actions Artifacts diff --git a/test/fx.ts b/test/fx.ts index 536a42fbb..e7458695c 100644 --- a/test/fx.ts +++ b/test/fx.ts @@ -87,27 +87,70 @@ export async function getTestExplorerUrl(accountType: TestAccount, iframeSrc?: s params.set("feature.enableCopilot", "false"); const nosqlRbacToken = process.env.NOSQL_TESTACCOUNT_TOKEN; - if (nosqlRbacToken) { - params.set("nosqlRbacToken", nosqlRbacToken); - params.set("enableaaddataplane", "true"); - } - const nosqlReadOnlyRbacToken = process.env.NOSQL_READONLY_TESTACCOUNT_TOKEN; - if (nosqlReadOnlyRbacToken) { - params.set("nosqlReadOnlyRbacToken", nosqlReadOnlyRbacToken); - params.set("enableaaddataplane", "true"); - } - const tableRbacToken = process.env.TABLE_TESTACCOUNT_TOKEN; - if (tableRbacToken) { - params.set("tableRbacToken", tableRbacToken); - params.set("enableaaddataplane", "true"); - } - const gremlinRbacToken = process.env.GREMLIN_TESTACCOUNT_TOKEN; - if (gremlinRbacToken) { - params.set("gremlinRbacToken", gremlinRbacToken); - params.set("enableaaddataplane", "true"); + const cassandraRbacToken = process.env.CASSANDRA_TESTACCOUNT_TOKEN; + const mongoRbacToken = process.env.MONGO_TESTACCOUNT_TOKEN; + const mongo32RbacToken = process.env.MONGO32_TESTACCOUNT_TOKEN; + const mongoReadOnlyRbacToken = process.env.MONGO_READONLY_TESTACCOUNT_TOKEN; + + switch (accountType) { + case TestAccount.SQL: + if (nosqlRbacToken) { + params.set("nosqlRbacToken", nosqlRbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.SQLReadOnly: + if (nosqlReadOnlyRbacToken) { + params.set("nosqlReadOnlyRbacToken", nosqlReadOnlyRbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.Tables: + if (tableRbacToken) { + params.set("tableRbacToken", tableRbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.Gremlin: + if (gremlinRbacToken) { + params.set("gremlinRbacToken", gremlinRbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.Cassandra: + if (cassandraRbacToken) { + params.set("cassandraRbacToken", cassandraRbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.Mongo: + if (mongoRbacToken) { + params.set("mongoRbacToken", mongoRbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.Mongo32: + if (mongo32RbacToken) { + params.set("mongo32RbacToken", mongo32RbacToken); + params.set("enableaaddataplane", "true"); + } + break; + + case TestAccount.MongoReadonly: + if (mongoReadOnlyRbacToken) { + params.set("mongoReadOnlyRbacToken", mongoReadOnlyRbacToken); + params.set("enableaaddataplane", "true"); + } + break; } if (iframeSrc) { diff --git a/test/testExplorer/TestExplorer.ts b/test/testExplorer/TestExplorer.ts index 1fe5d818a..7e6dc9c24 100644 --- a/test/testExplorer/TestExplorer.ts +++ b/test/testExplorer/TestExplorer.ts @@ -18,6 +18,13 @@ const nosqlReadOnlyRbacToken = const tableRbacToken = urlSearchParams.get("tableRbacToken") || process.env.TABLE_TESTACCOUNT_TOKEN || ""; const gremlinRbacToken = urlSearchParams.get("gremlinRbacToken") || process.env.GREMLIN_TESTACCOUNT_TOKEN || ""; +const cassandraRbacToken = urlSearchParams.get("cassandraRbacToken") || process.env.CASSANDRA_TESTACCOUNT_TOKEN || ""; + +const mongoRbacToken = urlSearchParams.get("mongoRbacToken") || process.env.MONGO_TESTACCOUNT_TOKEN || ""; +const mongo32RbacToken = urlSearchParams.get("mongo32RbacToken") || process.env.MONGO32_TESTACCOUNT_TOKEN || ""; +const mongoReadOnlyRbacToken = + urlSearchParams.get("mongoReadOnlyRbacToken") || process.env.MONGO_READONLY_TESTACCOUNT_TOKEN || ""; + const initTestExplorer = async (): Promise => { updateUserContext({ authorizationToken: `bearer ${authToken}`, @@ -41,6 +48,18 @@ const initTestExplorer = async (): Promise => { case "tables": rbacToken = tableRbacToken; break; + case "cassandra": + rbacToken = cassandraRbacToken; + break; + case "mongo": + rbacToken = mongoRbacToken; + break; + case "mongo32": + rbacToken = mongo32RbacToken; + break; + case "mongo-readonly": + rbacToken = mongoReadOnlyRbacToken; + break; } if (rbacToken.length > 0) {