From 879c1968871f7bbf6a14dd7b2d4d0b38f262beee Mon Sep 17 00:00:00 2001 From: Michael Li Date: Mon, 18 Mar 2024 15:53:39 -0400 Subject: [PATCH] refact(e2e): Move env outside of helper methods (#2186) * refact(e2e): Move env outside of UI helper methods * refact(e2e): Move env outside of CLI helpers --- ui/admin/tests/e2e/helpers/boundary-cli.js | 46 ++++++---- ui/admin/tests/e2e/helpers/boundary-ui.js | 84 +++++++++++-------- .../tests/e2e/tests/auth-method-ldap.spec.js | 7 +- .../e2e/tests/auth-method-password.spec.js | 7 +- .../e2e/tests/credential-store-static.spec.js | 31 +++++-- .../e2e/tests/credential-store-vault.spec.js | 17 +++- .../e2e/tests/delete-resources-ent.spec.js | 8 +- .../tests/e2e/tests/delete-resources.spec.js | 8 +- ui/admin/tests/e2e/tests/group-role.spec.js | 7 +- .../e2e/tests/session-recording-ent.spec.js | 23 ++++- ...sh-certificate-injection-vault-ent.spec.js | 21 ++++- ...ssh-credential-injection-vault-ent.spec.js | 19 ++++- ui/admin/tests/e2e/tests/target-ent.spec.js | 38 +++++++-- ui/admin/tests/e2e/tests/target.spec.js | 49 +++++++++-- 14 files changed, 273 insertions(+), 92 deletions(-) diff --git a/ui/admin/tests/e2e/helpers/boundary-cli.js b/ui/admin/tests/e2e/helpers/boundary-cli.js index 7a312068b..ef66926f6 100644 --- a/ui/admin/tests/e2e/helpers/boundary-cli.js +++ b/ui/admin/tests/e2e/helpers/boundary-cli.js @@ -20,18 +20,25 @@ exports.checkBoundaryCli = async () => { /** * Uses the boundary CLI to authenticate to the specified Boundary instance + * @param {string} addr Address of the Boundary instance to be authenticated to + * @param {string} authMethodId ID of the auth method to be used for authentication + * @param {string} loginName Login name to be used for authentication + * @param {string} password Password to be used for authentication */ -exports.authenticateBoundaryCli = async () => { +exports.authenticateBoundaryCli = async ( + addr, + authMethodId, + loginName, + password, +) => { try { execSync( 'boundary authenticate password' + - ' -addr=' + - process.env.BOUNDARY_ADDR + - ' -auth-method-id=' + - process.env.E2E_PASSWORD_AUTH_METHOD_ID + - ' -login-name=' + - process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME + - ' -password=env://E2E_PASSWORD_ADMIN_PASSWORD', + ` -addr=${addr}` + + ` -auth-method-id=${authMethodId}` + + ` -login-name=${loginName}` + + ' -password=env://BPASS', + { env: { ...process.env, BPASS: password } }, ); } catch (e) { console.log(`${e.stderr}`); @@ -41,20 +48,19 @@ exports.authenticateBoundaryCli = async () => { /** * Uses the boundary CLI to connect to the specified target * @param {string} targetId ID of the target to be connected to + * @param {string} sshUser User to be used for the ssh connection + * @param {string} sshKeyPath Path to the ssh key to be used for the ssh connection * @returns ChildProcess representing the result of the command execution */ -exports.connectToTarget = async (targetId) => { +exports.connectToTarget = async (targetId, sshUser, sshKeyPath) => { let connect; try { connect = exec( 'boundary connect' + - ' -target-id=' + - targetId + + ` -target-id=${targetId}` + ' -exec /usr/bin/ssh --' + - ' -l ' + - process.env.E2E_SSH_USER + - ' -i ' + - process.env.E2E_SSH_KEY_PATH + + ` -l ${sshUser}` + + ` -i ${sshKeyPath}` + ' -o UserKnownHostsFile=/dev/null' + ' -o StrictHostKeyChecking=no' + ' -o IdentitiesOnly=yes' + // forces the use of the provided key @@ -241,7 +247,6 @@ exports.makeAuthMethodPrimaryCli = async (scopeId, authMethodId) => { exports.createNewPasswordAccountCli = async (authMethodId) => { let passwordAccount; const login = 'test-login'; - process.env.ACCOUNT_PASSWORD = 'test-password'; try { passwordAccount = JSON.parse( execSync( @@ -250,6 +255,7 @@ exports.createNewPasswordAccountCli = async (authMethodId) => { -login-name ${login} \ -password env://ACCOUNT_PASSWORD \ -format json`, + { env: { ...process.env, ACCOUNT_PASSWORD: 'test-password' } }, ), ).item; } catch (e) { @@ -451,12 +457,14 @@ exports.createNewStaticCredentialStoreCli = async (projectId) => { /** * Uses the boundary CLI to create a new vault credential store. * @param {string} projectId ID of the project under which the credential store will be created. + * @param {string} vaultAddr Address of the vault that the credential store will be created for. * @param {string} secretPolicyName Name of the secret policy that's used to create vault token. * @param {string} boundaryPolicyName Name of the boundary policy that's used to create vault token. * @returns {Promise} new credential store's ID */ exports.createNewVaultCredentialStoreCli = async ( projectId, + vaultAddr, secretPolicyName, boundaryPolicyName, ) => { @@ -487,7 +495,7 @@ exports.createNewVaultCredentialStoreCli = async ( `boundary credential-stores create vault \ -scope-id ${projectId} \ -name ${credentialStoreName} \ - -vault-address ${process.env.E2E_VAULT_ADDR} \ + -vault-address ${vaultAddr} \ -vault-token ${clientToken} \ -format json`, ), @@ -506,7 +514,6 @@ exports.createNewVaultCredentialStoreCli = async ( exports.createNewUsernamePasswordCredentialCli = async (credentialStoreId) => { let usernamePasswordCredential; const login = 'test-login'; - process.env.CREDENTIALS_PASSWORD = 'credentials-password'; try { usernamePasswordCredential = JSON.parse( execSync( @@ -516,6 +523,9 @@ exports.createNewUsernamePasswordCredentialCli = async (credentialStoreId) => { -username ${login} \ -password env://CREDENTIALS_PASSWORD \ -format json`, + { + env: { ...process.env, CREDENTIALS_PASSWORD: 'credentials-password' }, + }, ), ).item; } catch (e) { diff --git a/ui/admin/tests/e2e/helpers/boundary-ui.js b/ui/admin/tests/e2e/helpers/boundary-ui.js index d074e5e42..2879cd530 100644 --- a/ui/admin/tests/e2e/helpers/boundary-ui.js +++ b/ui/admin/tests/e2e/helpers/boundary-ui.js @@ -118,15 +118,16 @@ exports.createNewHostSet = async (page) => { /** * Uses the UI to create a new host in a host set. Assumes you have just created a new host set. * @param {Page} page Playwright page object + * @param {string} address Address of the host * @returns Name of the host */ -exports.createNewHostInHostSet = async (page) => { +exports.createNewHostInHostSet = async (page, address) => { const hostName = 'Host ' + nanoid(); await page.getByText('Manage').click(); await page.getByRole('link', { name: 'Create and Add Host' }).click(); await page.getByLabel('Name').fill(hostName); await page.getByLabel('Description').fill('This is an automated test'); - await page.getByLabel('Address').fill(process.env.E2E_TARGET_ADDRESS); + await page.getByLabel('Address').fill(address); await page.getByRole('button', { name: 'Save' }).click(); await expect( page.getByRole('alert').getByText('Success', { exact: true }), @@ -169,10 +170,11 @@ exports.createStaticCredentialStore = async (page) => { /** * Uses the UI to create a vault credential store. Assumes you have selected the desired project. * @param {Page} page Playwright page object + * @param {string} vaultAddr address of the vault server * @param {string} clientToken vault token to connect to boundary * @returns Name of the credential store */ -exports.createVaultCredentialStore = async (page, clientToken) => { +exports.createVaultCredentialStore = async (page, vaultAddr, clientToken) => { const credentialStoreName = 'Credential Store ' + nanoid(); await page .getByRole('navigation', { name: 'Resources' }) @@ -182,9 +184,7 @@ exports.createVaultCredentialStore = async (page, clientToken) => { await page.getByLabel('Name', { exact: true }).fill(credentialStoreName); await page.getByLabel('Description').fill('This is an automated test'); await page.getByRole('group', { name: 'Type' }).getByLabel('Vault').click(); - await page - .getByLabel('Address', { exact: true }) - .fill(process.env.E2E_VAULT_ADDR); + await page.getByLabel('Address', { exact: true }).fill(vaultAddr); await page.getByLabel('Token', { exact: true }).fill(clientToken); await page.getByRole('button', { name: 'Save' }).click(); await expect( @@ -203,9 +203,11 @@ exports.createVaultCredentialStore = async (page, clientToken) => { /** * Uses the UI to create a static key pair credential . Assumes you have selected the desired project. * @param {Page} page Playwright page object + * @param {string} username username for the credential + * @param {string} keyPath path to the private key * @returns Name of the credential */ -exports.createStaticCredentialKeyPair = async (page) => { +exports.createStaticCredentialKeyPair = async (page, username, keyPath) => { const credentialName = 'Credential ' + nanoid(); await page.getByRole('link', { name: 'Credentials', exact: true }).click(); await page.getByRole('link', { name: 'New', exact: true }).click(); @@ -215,10 +217,8 @@ exports.createStaticCredentialKeyPair = async (page) => { .getByRole('group', { name: 'Type' }) .getByLabel('Username & Key Pair') .click(); - await page - .getByLabel('Username', { exact: true }) - .fill(process.env.E2E_SSH_USER); - const keyData = await readFile(process.env.E2E_SSH_KEY_PATH, { + await page.getByLabel('Username', { exact: true }).fill(username); + const keyData = await readFile(keyPath, { encoding: 'utf-8', }); await page.getByLabel('SSH Private Key', { exact: true }).fill(keyData); @@ -281,11 +281,13 @@ exports.createVaultGenericCredentialLibrary = async ( * the desired credential store. * @param {Page} page Playwright page object * @param {string} vaultPath path to secret in vault + * @param {string} username username for the credential * @returns Name of the credential library */ exports.createVaultSshCertificateCredentialLibrary = async ( page, vaultPath, + username, ) => { const credentialLibraryName = 'Credential Library ' + nanoid(); @@ -306,7 +308,7 @@ exports.createVaultSshCertificateCredentialLibrary = async ( .getByLabel('Description (Optional)') .fill('This is an automated test'); await page.getByLabel('Vault Path').fill(vaultPath); - await page.getByLabel('Username').fill(process.env.E2E_SSH_USER); + await page.getByLabel('Username').fill(username); await page.getByLabel('Key Type').selectOption('ecdsa'); await page.getByLabel('Key Bits').fill('521'); @@ -331,9 +333,10 @@ exports.createVaultSshCertificateCredentialLibrary = async ( /** * Uses the UI to create a new target. Assumes you have selected the desired project. * @param {Page} page Playwright page object + * @param {string} port Port of the target * @returns Name of the target */ -exports.createNewTarget = async (page) => { +exports.createNewTarget = async (page, port) => { const targetName = 'Target ' + nanoid(); await page .getByRole('navigation', { name: 'Resources' }) @@ -342,7 +345,7 @@ exports.createNewTarget = async (page) => { await page.getByRole('link', { name: 'New', exact: true }).click(); await page.getByLabel('Name').fill(targetName); await page.getByLabel('Description').fill('This is an automated test'); - await page.getByLabel('Default Port').fill(process.env.E2E_TARGET_PORT); + await page.getByLabel('Default Port').fill(port); await page.getByRole('button', { name: 'Save' }).click(); await expect( page.getByRole('alert').getByText('Success', { exact: true }), @@ -358,9 +361,11 @@ exports.createNewTarget = async (page) => { /** * Uses the UI to create a new target with address. Assumes you have selected the desired project. * @param {Page} page Playwright page object + * @param {string} address Address of the target + * @param {string} port Port of the target * @returns Name of the target */ -exports.createNewTargetWithAddress = async (page) => { +exports.createNewTargetWithAddress = async (page, address, port) => { const targetName = 'Target ' + nanoid(); await page .getByRole('navigation', { name: 'Resources' }) @@ -369,8 +374,8 @@ exports.createNewTargetWithAddress = async (page) => { await page.getByRole('link', { name: 'New', exact: true }).click(); await page.getByLabel('Name').fill(targetName); await page.getByLabel('Description').fill('This is an automated test'); - await page.getByLabel('Target Address').fill(process.env.E2E_TARGET_ADDRESS); - await page.getByLabel('Default Port').fill(process.env.E2E_TARGET_PORT); + await page.getByLabel('Target Address').fill(address); + await page.getByLabel('Default Port').fill(port); await page.getByRole('button', { name: 'Save' }).click(); await expect( page.getByRole('alert').getByText('Success', { exact: true }), @@ -387,9 +392,11 @@ exports.createNewTargetWithAddress = async (page) => { * Uses the UI to create a new TCP target with address in boundary-enterprise * Assumes you have selected the desired project. * @param {Page} page Playwright page object + * @param {string} address Address of the target + * @param {string} port Port of the target * @returns Name of the target */ -exports.createTcpTargetWithAddressEnt = async (page) => { +exports.createTcpTargetWithAddressEnt = async (page, address, port) => { const targetName = 'Target ' + nanoid(); await page .getByRole('navigation', { name: 'Resources' }) @@ -399,8 +406,8 @@ exports.createTcpTargetWithAddressEnt = async (page) => { await page.getByLabel('Name').fill(targetName); await page.getByLabel('Description').fill('This is an automated test'); await page.getByRole('group', { name: 'Type' }).getByLabel('TCP').click(); - await page.getByLabel('Target Address').fill(process.env.E2E_TARGET_ADDRESS); - await page.getByLabel('Default Port').fill(process.env.E2E_TARGET_PORT); + await page.getByLabel('Target Address').fill(address); + await page.getByLabel('Default Port').fill(port); await page.getByRole('button', { name: 'Save' }).click(); await expect( page.getByRole('alert').getByText('Success', { exact: true }), @@ -417,9 +424,11 @@ exports.createTcpTargetWithAddressEnt = async (page) => { * Uses the UI to create a new SSH target with address in boundary-enterprise * Assumes you have selected the desired project. * @param {Page} page Playwright page object + * @param {string} address Address of the target + * @param {string} port Port of the target * @returns Name of the target */ -exports.createSshTargetWithAddressEnt = async (page) => { +exports.createSshTargetWithAddressEnt = async (page, address, port) => { const targetName = 'Target ' + nanoid(); await page .getByRole('navigation', { name: 'Resources' }) @@ -429,8 +438,8 @@ exports.createSshTargetWithAddressEnt = async (page) => { await page.getByLabel('Name').fill(targetName); await page.getByLabel('Description').fill('This is an automated test'); await page.getByRole('group', { name: 'Type' }).getByLabel('SSH').click(); - await page.getByLabel('Target Address').fill(process.env.E2E_TARGET_ADDRESS); - await page.getByLabel('Default Port').fill(process.env.E2E_TARGET_PORT); + await page.getByLabel('Target Address').fill(address); + await page.getByLabel('Default Port').fill(port); await page.getByRole('button', { name: 'Save' }).click(); await expect( page.getByRole('alert').getByText('Success', { exact: true }), @@ -907,25 +916,32 @@ exports.addGrantsToGroup = async (page, grants) => { /** * Uses the UI to create a new Storage Bucket. Assumes you have selected the desired scope. * @param {Page} page Playwright page object + * @param {string} bucketName Name of the Storage Bucket + * @param {string} region Region of the Storage Bucket + * @param {string} accessKeyId Access Key ID for the Storage Bucket + * @param {string} secretAccessKey Secret Access Key for the Storage Bucket + * @param {string} workerFilter Worker filter for the Storage Bucket * @returns Name of the Storage Bucket */ -exports.createStorageBucket = async (page) => { +exports.createStorageBucket = async ( + page, + bucketName, + region, + accessKeyId, + secretAccessKey, + workerFilter, +) => { const storageBucketName = 'Bucket ' + nanoid(); await page .getByRole('link', { name: 'Storage Buckets', exact: true }) .click(); await page.getByRole('link', { name: 'New Storage Bucket' }).click(); await page.getByLabel(new RegExp('Name*')).fill(storageBucketName); - await page.getByLabel('Bucket name').fill(process.env.E2E_AWS_BUCKET_NAME); - await page.getByLabel('Region').fill(process.env.E2E_AWS_REGION); - await page - .getByLabel('Access key ID') - .fill(process.env.E2E_AWS_ACCESS_KEY_ID); - await page - .getByLabel('Secret access key') - .fill(process.env.E2E_AWS_SECRET_ACCESS_KEY); - const workerTag = `"${process.env.E2E_WORKER_TAG_EGRESS}" in "/tags/type"`; - await page.getByLabel('Worker filter').fill(workerTag); + await page.getByLabel('Bucket name').fill(bucketName); + await page.getByLabel('Region').fill(region); + await page.getByLabel('Access key ID').fill(accessKeyId); + await page.getByLabel('Secret access key').fill(secretAccessKey); + await page.getByLabel('Worker filter').fill(workerFilter); await page.getByLabel('Disable credential rotation').click(); await page.getByRole('button', { name: 'Save' }).click(); await expect( diff --git a/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js b/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js index 82b2db736..8f219bdd6 100644 --- a/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js +++ b/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js @@ -43,7 +43,12 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => { try { // Create an org const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; diff --git a/ui/admin/tests/e2e/tests/auth-method-password.spec.js b/ui/admin/tests/e2e/tests/auth-method-password.spec.js index ffbdc5aea..f49593791 100644 --- a/ui/admin/tests/e2e/tests/auth-method-password.spec.js +++ b/ui/admin/tests/e2e/tests/auth-method-password.spec.js @@ -35,7 +35,12 @@ test('Verify new auth-method can be created and assigned to users @ce @ent @aws let org; try { const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; await createNewPasswordAuthMethod(page, 'UI Test Auth Method'); diff --git a/ui/admin/tests/e2e/tests/credential-store-static.spec.js b/ui/admin/tests/e2e/tests/credential-store-static.spec.js index 352ea5e66..9149b3515 100644 --- a/ui/admin/tests/e2e/tests/credential-store-static.spec.js +++ b/ui/admin/tests/e2e/tests/credential-store-static.spec.js @@ -50,8 +50,8 @@ test.beforeEach(async ({ page }) => { projectName = await createNewProject(page); await createNewHostCatalog(page); const hostSetName = await createNewHostSet(page); - await createNewHostInHostSet(page); - targetName = await createNewTarget(page); + await createNewHostInHostSet(page, process.env.E2E_TARGET_ADDRESS); + targetName = await createNewTarget(page, process.env.E2E_TARGET_PORT); await addHostSourceToTarget(page, hostSetName); await createStaticCredentialStore(page); }); @@ -59,10 +59,19 @@ test.beforeEach(async ({ page }) => { test('Static Credential Store (User & Key Pair) @ce @aws @docker', async ({ page, }) => { - const credentialName = await createStaticCredentialKeyPair(page); + const credentialName = await createStaticCredentialKeyPair( + page, + process.env.E2E_SSH_USER, + process.env.E2E_SSH_KEY_PATH, + ); await addBrokeredCredentialsToTarget(page, targetName, credentialName); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const session = await getSessionCli(orgName, projectName, targetName); const retrievedUser = session.item.credentials[0].credential.username; const retrievedKey = session.item.credentials[0].credential.private_key; @@ -114,7 +123,12 @@ test('Static Credential Store (Username & Password) @ce @aws @docker', async ({ await addBrokeredCredentialsToTarget(page, targetName, credentialName); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const session = await getSessionCli(orgName, projectName, targetName); const retrievedUser = session.item.credentials[0].credential.username; const retrievedPassword = session.item.credentials[0].credential.password; @@ -166,7 +180,12 @@ test('Static Credential Store (JSON) @ce @aws @docker', async ({ page }) => { await addBrokeredCredentialsToTarget(page, targetName, credentialName); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const session = await getSessionCli(orgName, projectName, targetName); const retrievedUser = session.item.credentials[0].credential.username; const retrievedPassword = session.item.credentials[0].credential.password; diff --git a/ui/admin/tests/e2e/tests/credential-store-vault.spec.js b/ui/admin/tests/e2e/tests/credential-store-vault.spec.js index d108538e2..50dd26f2c 100644 --- a/ui/admin/tests/e2e/tests/credential-store-vault.spec.js +++ b/ui/admin/tests/e2e/tests/credential-store-vault.spec.js @@ -88,7 +88,12 @@ test('Vault Credential Store (User & Key Pair) @ce @aws @docker', async ({ const clientToken = vaultToken.auth.client_token; const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; @@ -100,15 +105,19 @@ test('Vault Credential Store (User & Key Pair) @ce @aws @docker', async ({ await createNewHostCatalog(page); const hostSetName = await createNewHostSet(page); - await createNewHostInHostSet(page); - const targetName = await createNewTarget(page); + await createNewHostInHostSet(page, process.env.E2E_TARGET_ADDRESS); + const targetName = await createNewTarget(page, process.env.E2E_TARGET_PORT); await addHostSourceToTarget(page, hostSetName); const targets = JSON.parse( execSync(`boundary targets list -format json -scope-id ${project.id}`), ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; - await createVaultCredentialStore(page, clientToken); + await createVaultCredentialStore( + page, + process.env.E2E_VAULT_ADDR, + clientToken, + ); const credentialLibraryName = 'Credential Library ' + nanoid(); await page.getByRole('link', { name: 'Credential Libraries' }).click(); diff --git a/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js b/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js index 327030f1a..9140f5e00 100644 --- a/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js +++ b/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js @@ -61,7 +61,12 @@ test.beforeAll(async () => { test.beforeEach(async () => { execSync(`vault policy delete ${secretPolicyName}`); execSync(`vault policy delete ${boundaryPolicyName}`); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); }); test('Verify resources can be deleted (enterprise) @ent @aws', async ({ @@ -91,6 +96,7 @@ test('Verify resources can be deleted (enterprise) @ent @aws', async ({ await createNewStaticCredentialStoreCli(projectId); let vaultCredentialStoreId = await createNewVaultCredentialStoreCli( projectId, + process.env.E2E_VAULT_ADDR, secretPolicyName, boundaryPolicyName, ); diff --git a/ui/admin/tests/e2e/tests/delete-resources.spec.js b/ui/admin/tests/e2e/tests/delete-resources.spec.js index 5580ed9c9..df1c9dd45 100644 --- a/ui/admin/tests/e2e/tests/delete-resources.spec.js +++ b/ui/admin/tests/e2e/tests/delete-resources.spec.js @@ -60,7 +60,12 @@ test.beforeAll(async () => { test.beforeEach(async () => { execSync(`vault policy delete ${secretPolicyName}`); execSync(`vault policy delete ${boundaryPolicyName}`); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); }); test('Verify resources can be deleted @ce @aws', async ({ page }) => { @@ -87,6 +92,7 @@ test('Verify resources can be deleted @ce @aws', async ({ page }) => { await createNewStaticCredentialStoreCli(projectId); let vaultCredentialStoreId = await createNewVaultCredentialStoreCli( projectId, + process.env.E2E_VAULT_ADDR, secretPolicyName, boundaryPolicyName, ); diff --git a/ui/admin/tests/e2e/tests/group-role.spec.js b/ui/admin/tests/e2e/tests/group-role.spec.js index ad345a4cd..c9639078c 100644 --- a/ui/admin/tests/e2e/tests/group-role.spec.js +++ b/ui/admin/tests/e2e/tests/group-role.spec.js @@ -34,7 +34,12 @@ test('Verify a new role can be created and associated with a group @ce @ent @aws let org; try { const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; const groupName = 'test-group'; diff --git a/ui/admin/tests/e2e/tests/session-recording-ent.spec.js b/ui/admin/tests/e2e/tests/session-recording-ent.spec.js index cdd02c8c5..abdb69f56 100644 --- a/ui/admin/tests/e2e/tests/session-recording-ent.spec.js +++ b/ui/admin/tests/e2e/tests/session-recording-ent.spec.js @@ -55,10 +55,14 @@ test('Verify session recording can be deleted @ent @aws', async ({ page }) => { let storageBucket; let connect; try { - await authenticateBoundaryCli(); // Create org const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); const org = orgs.items.filter((obj) => obj.name == orgName)[0]; orgId = org.id; @@ -73,7 +77,14 @@ test('Verify session recording can be deleted @ent @aws', async ({ page }) => { // Create Storage Bucket await page.getByRole('link', { name: 'Orgs', exact: true }).click(); - const storageBucketName = await createStorageBucket(page); + const storageBucketName = await createStorageBucket( + page, + process.env.E2E_AWS_BUCKET_NAME, + process.env.E2E_AWS_REGION, + process.env.E2E_AWS_ACCESS_KEY_ID, + process.env.E2E_AWS_SECRET_ACCESS_KEY, + `"${process.env.E2E_WORKER_TAG_EGRESS}" in "/tags/type"`, + ); const storageBuckets = JSON.parse( execSync('boundary storage-buckets list -format json'), ); @@ -96,7 +107,11 @@ test('Verify session recording can be deleted @ent @aws', async ({ page }) => { ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; await createStaticCredentialStore(page); - const credentialName = await createStaticCredentialKeyPair(page); + const credentialName = await createStaticCredentialKeyPair( + page, + process.env.E2E_SSH_USER, + process.env.E2E_SSH_KEY_PATH, + ); await addInjectedCredentialsToTarget(page, targetName, credentialName); // Enable session recording for Target diff --git a/ui/admin/tests/e2e/tests/ssh-certificate-injection-vault-ent.spec.js b/ui/admin/tests/e2e/tests/ssh-certificate-injection-vault-ent.spec.js index f40f42f1a..61f6212d8 100644 --- a/ui/admin/tests/e2e/tests/ssh-certificate-injection-vault-ent.spec.js +++ b/ui/admin/tests/e2e/tests/ssh-certificate-injection-vault-ent.spec.js @@ -39,6 +39,7 @@ test.beforeAll(async () => { 'VAULT_TOKEN', 'E2E_VAULT_ADDR', // Address used by Boundary Server (could be different from VAULT_ADDR depending on network config (i.e. docker network)) 'E2E_TARGET_ADDRESS', + 'E2E_TARGET_PORT', 'E2E_SSH_USER', 'E2E_SSH_CA_KEY', 'E2E_SSH_CA_KEY_PUBLIC', @@ -96,7 +97,12 @@ test('SSH Certificate Injection @ent @docker', async ({ page }) => { // Create org const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; @@ -108,18 +114,27 @@ test('SSH Certificate Injection @ent @docker', async ({ page }) => { const project = projects.items.filter((obj) => obj.name == projectName)[0]; // Create target - const targetName = await createSshTargetWithAddressEnt(page); + const targetName = await createSshTargetWithAddressEnt( + page, + process.env.E2E_TARGET_ADDRESS, + process.env.E2E_TARGET_PORT, + ); const targets = JSON.parse( execSync('boundary targets list -format json -scope-id ' + project.id), ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; // Create credentials - await createVaultCredentialStore(page, clientToken); + await createVaultCredentialStore( + page, + process.env.E2E_VAULT_ADDR, + clientToken, + ); const credentialLibraryName = await createVaultSshCertificateCredentialLibrary( page, `${secretsPath}/issue/${secretName}`, + process.env.E2E_SSH_USER, ); await addInjectedCredentialsToTarget( page, diff --git a/ui/admin/tests/e2e/tests/ssh-credential-injection-vault-ent.spec.js b/ui/admin/tests/e2e/tests/ssh-credential-injection-vault-ent.spec.js index 85bf992ec..b0cc0984f 100644 --- a/ui/admin/tests/e2e/tests/ssh-credential-injection-vault-ent.spec.js +++ b/ui/admin/tests/e2e/tests/ssh-credential-injection-vault-ent.spec.js @@ -89,7 +89,12 @@ test('SSH Credential Injection (Vault User & Key Pair) @ent @docker', async ({ // Create org const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; @@ -101,14 +106,22 @@ test('SSH Credential Injection (Vault User & Key Pair) @ent @docker', async ({ const project = projects.items.filter((obj) => obj.name == projectName)[0]; // Create target - const targetName = await createSshTargetWithAddressEnt(page); + const targetName = await createSshTargetWithAddressEnt( + page, + process.env.E2E_TARGET_ADDRESS, + process.env.E2E_TARGET_PORT, + ); const targets = JSON.parse( execSync('boundary targets list -format json -scope-id ' + project.id), ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; // Create credentials - await createVaultCredentialStore(page, clientToken); + await createVaultCredentialStore( + page, + process.env.E2E_VAULT_ADDR, + clientToken, + ); const credentialLibraryName = await createVaultGenericCredentialLibrary( page, `${secretsPath}/data/${secretName}`, diff --git a/ui/admin/tests/e2e/tests/target-ent.spec.js b/ui/admin/tests/e2e/tests/target-ent.spec.js index 8ecfb885b..fb486c4ee 100644 --- a/ui/admin/tests/e2e/tests/target-ent.spec.js +++ b/ui/admin/tests/e2e/tests/target-ent.spec.js @@ -47,7 +47,12 @@ test('Verify session created for TCP target @ent @aws @docker', async ({ let connect; try { const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; @@ -57,13 +62,21 @@ test('Verify session created for TCP target @ent @aws @docker', async ({ ); const project = projects.items.filter((obj) => obj.name == projectName)[0]; - const targetName = await createTcpTargetWithAddressEnt(page); + const targetName = await createTcpTargetWithAddressEnt( + page, + process.env.E2E_TARGET_ADDRESS, + process.env.E2E_TARGET_PORT, + ); const targets = JSON.parse( execSync('boundary targets list -format json -scope-id ' + project.id), ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; - connect = await connectToTarget(target.id); + connect = await connectToTarget( + target.id, + process.env.E2E_SSH_USER, + process.env.E2E_SSH_KEY_PATH, + ); await waitForSessionToBeVisible(page, targetName); await page .getByRole('cell', { name: targetName }) @@ -89,7 +102,12 @@ test('Verify session created for SSH target @ent @aws @docker', async ({ let connect; try { const orgName = await createNewOrg(page); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; @@ -99,14 +117,22 @@ test('Verify session created for SSH target @ent @aws @docker', async ({ ); const project = projects.items.filter((obj) => obj.name == projectName)[0]; - const targetName = await createSshTargetWithAddressEnt(page); + const targetName = await createSshTargetWithAddressEnt( + page, + process.env.E2E_TARGET_ADDRESS, + process.env.E2E_TARGET_PORT, + ); const targets = JSON.parse( execSync('boundary targets list -format json -scope-id ' + project.id), ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; await createStaticCredentialStore(page); - const credentialName = await createStaticCredentialKeyPair(page); + const credentialName = await createStaticCredentialKeyPair( + page, + process.env.E2E_SSH_USER, + process.env.E2E_SSH_KEY_PATH, + ); await addInjectedCredentialsToTarget(page, targetName, credentialName); connect = await connectSshToTarget(target.id); diff --git a/ui/admin/tests/e2e/tests/target.spec.js b/ui/admin/tests/e2e/tests/target.spec.js index 79663583b..787ee6eb0 100644 --- a/ui/admin/tests/e2e/tests/target.spec.js +++ b/ui/admin/tests/e2e/tests/target.spec.js @@ -49,11 +49,16 @@ test('Verify session created to target with host, then cancel the session @ce @a const projectName = await createNewProject(page); await createNewHostCatalog(page); const hostSetName = await createNewHostSet(page); - await createNewHostInHostSet(page); - const targetName = await createNewTarget(page); + await createNewHostInHostSet(page, process.env.E2E_TARGET_ADDRESS); + const targetName = await createNewTarget(page, process.env.E2E_TARGET_PORT); await addHostSourceToTarget(page, hostSetName); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; const projects = JSON.parse( @@ -65,7 +70,11 @@ test('Verify session created to target with host, then cancel the session @ce @a ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; - connect = await connectToTarget(target.id); + connect = await connectToTarget( + target.id, + process.env.E2E_SSH_USER, + process.env.E2E_SSH_KEY_PATH, + ); await waitForSessionToBeVisible(page, targetName); await page .getByRole('cell', { name: targetName }) @@ -90,9 +99,18 @@ test('Verify session created to target with address, then cancel the session @ce try { const orgName = await createNewOrg(page); const projectName = await createNewProject(page); - const targetName = await createNewTargetWithAddress(page); + const targetName = await createNewTargetWithAddress( + page, + process.env.E2E_TARGET_ADDRESS, + process.env.E2E_TARGET_PORT, + ); - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); org = orgs.items.filter((obj) => obj.name == orgName)[0]; const projects = JSON.parse( @@ -104,7 +122,11 @@ test('Verify session created to target with address, then cancel the session @ce ); const target = targets.items.filter((obj) => obj.name == targetName)[0]; - connect = await connectToTarget(target.id); + connect = await connectToTarget( + target.id, + process.env.E2E_SSH_USER, + process.env.E2E_SSH_KEY_PATH, + ); await waitForSessionToBeVisible(page, targetName); await page .getByRole('cell', { name: targetName }) @@ -126,7 +148,11 @@ test('Verify TCP target is updated @ce @aws @docker', async ({ page }) => { try { orgName = await createNewOrg(page); await createNewProject(page); - await createNewTargetWithAddress(page); + await createNewTargetWithAddress( + page, + process.env.E2E_TARGET_ADDRESS, + process.env.E2E_TARGET_PORT, + ); // Update target await page.getByRole('button', { name: 'Edit Form' }).click(); @@ -147,7 +173,12 @@ test('Verify TCP target is updated @ce @aws @docker', async ({ page }) => { page.getByRole('alert').getByText('Success', { exact: true }), ).toBeVisible(); } finally { - await authenticateBoundaryCli(); + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); const org = orgs.items.filter((obj) => obj.name === orgName)[0]; await deleteOrgCli(org.id);