test(e2e): Add checks for LDAP account attributes (#2343)

* test(e2e): Add check for LDAP account attributes

* test(e2e): Refactor to use expect assertions
This commit is contained in:
Michael Li authored and GitHub committed 2024-06-17 10:42:08 -04:00
1 parent 1a7b3f578c
commit 365545d61c
4 files changed
+125 -70

No files matched your search

@@ -82,6 +82,35 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => {
await page.getByLabel('Group DN').fill(process.env.E2E_LDAP_DOMAIN_DN);
await page.getByRole('switch', { name: 'Enable Groups' }).click();
await page
.getByRole('group', { name: 'Account Attribute Maps' })
.getByLabel('From Attribute')
.last()
.fill('cn');
await page
.getByRole('group', { name: 'Account Attribute Maps' })
.getByLabel('To Attribute')
.last()
.selectOption('fullName');
await page
.getByRole('group', { name: 'Account Attribute Maps' })
.getByRole('button', { name: 'Add' })
.click();
await page
.getByRole('group', { name: 'Account Attribute Maps' })
.getByLabel('From Attribute')
.last()
.fill('mail');
await page
.getByRole('group', { name: 'Account Attribute Maps' })
.getByLabel('To Attribute')
.last()
.selectOption('email');
await page
.getByRole('group', { name: 'Account Attribute Maps' })
.getByRole('button', { name: 'Add' })
.click();
await page.getByRole('button', { name: 'Save' }).click();
await expect(
page.getByRole('alert').getByText('Success', { exact: true }),
@@ -143,7 +172,7 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => {
await addPrincipalToRole(page, ldapManagedGroupName);
// Create a user and attach LDAP account to it
await createUser(page);
const userName = await createUser(page);
await addAccountToUser(page, process.env.E2E_LDAP_USER_NAME);
// Create a second auth method so that there's multiple auth methods on the
@@ -173,6 +202,91 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => {
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText('Projects'),
).toBeVisible();
// Log out
await page.getByText(process.env.E2E_LDAP_USER_NAME).click();
await page.getByRole('button', { name: 'Sign Out' }).click();
await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible();
// Log back in as an admin
await page
.getByLabel('Login Name')
.fill(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME);
await page
.getByLabel('Password', { exact: true })
.fill(process.env.E2E_PASSWORD_ADMIN_PASSWORD);
await page.getByRole('button', { name: 'Sign In' }).click();
await expect(
page.getByRole('navigation', { name: 'General' }),
).toBeVisible();
await expect(
page.getByText(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME),
).toBeEnabled();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText('Orgs'),
).toBeVisible();
// View the LDAP account and verify account attributes
await page.getByRole('link', { name: orgName }).click();
await page
.getByRole('navigation', { name: 'IAM' })
.getByRole('link', { name: 'Auth Methods' })
.click();
await page.getByRole('link', { name: ldapAuthMethodName }).click();
await page.getByRole('link', { name: 'Accounts' }).click();
const headersCount = await page
.getByRole('table')
.getByRole('columnheader')
.count();
let fullNameIndex;
let emailIndex;
for (let i = 0; i < headersCount; i++) {
const header = await page
.getByRole('table')
.getByRole('columnheader')
.nth(i)
.innerText();
if (header == 'Full Name') {
fullNameIndex = i;
} else if (header == 'Email') {
emailIndex = i;
}
}
expect(
await page
.getByRole('cell', { name: ldapAccountName })
.locator('..')
.getByRole('cell')
.nth(fullNameIndex)
.innerText(),
).toBe(process.env.E2E_LDAP_USER_NAME);
expect(
await page
.getByRole('cell', { name: ldapAccountName })
.locator('..')
.getByRole('cell')
.nth(emailIndex)
.innerText(),
).toBe(process.env.E2E_LDAP_USER_NAME + '@mail.com');
// View the User account and verify attributes
await page
.getByRole('navigation', { name: 'IAM' })
.getByRole('link', { name: 'Users' })
.click();
await page.getByRole('link', { name: userName }).click();
await page.getByRole('link', { name: 'Accounts' }).click();
expect(
await page
.getByRole('table')
.getByRole('row')
.nth(1) // Account row
.getByRole('cell')
.nth(0) // Name field
.innerText(),
).toContain(process.env.E2E_LDAP_USER_NAME + '@mail.com');
} finally {
await authenticateBoundaryCli(
process.env.BOUNDARY_ADDR,
@@ -76,14 +76,7 @@ test('Static Credential Store (User & Key Pair) @ce @aws @docker', async ({
const retrievedUser = session.item.credentials[0].credential.username;
const retrievedKey = session.item.credentials[0].credential.private_key;
if (process.env.E2E_SSH_USER != retrievedUser) {
throw new Error(
'Stored User does not match. EXPECTED: ' +
process.env.E2E_SSH_USER +
', ACTUAL: ' +
retrievedUser,
);
}
expect(retrievedUser).toBe(process.env.E2E_SSH_USER);
const keyData = await readFile(process.env.E2E_SSH_KEY_PATH, {
encoding: 'utf-8',
@@ -128,22 +121,8 @@ test('Static Credential Store (Username & Password) @ce @aws @docker', async ({
const retrievedUser = session.item.credentials[0].credential.username;
const retrievedPassword = session.item.credentials[0].credential.password;
if (process.env.E2E_SSH_USER != retrievedUser) {
throw new Error(
'Stored User does not match. EXPECTED: ' +
process.env.E2E_SSH_USER +
', ACTUAL: ' +
retrievedUser,
);
}
if (testPassword != retrievedPassword) {
throw new Error(
'Stored Password does not match. EXPECTED: ' +
testPassword +
', ACTUAL: ' +
retrievedPassword,
);
}
expect(retrievedUser).toBe(process.env.E2E_SSH_USER);
expect(retrievedPassword).toBe(testPassword);
} finally {
await authenticateBoundaryCli(
process.env.BOUNDARY_ADDR,
@@ -200,30 +179,9 @@ test('Static Credential Store (JSON) @ce @aws @docker', async ({ page }) => {
const retrievedPassword = session.item.credentials[0].credential.password;
const retrievedId = session.item.credentials[0].credential.id;
if (testName != retrievedUser) {
throw new Error(
'Stored User does not match. EXPECTED: ' +
process.env.E2E_SSH_USER +
', ACTUAL: ' +
retrievedUser,
);
}
if (testPassword != retrievedPassword) {
throw new Error(
'Stored Password does not match. EXPECTED: ' +
testPassword +
', ACTUAL: ' +
retrievedPassword,
);
}
if (testId != retrievedId) {
throw new Error(
'Stored ID does not match. EXPECTED: ' +
testId +
', ACTUAL: ' +
retrievedId,
);
}
expect(retrievedUser).toBe(testName);
expect(retrievedPassword).toBe(testPassword);
expect(retrievedId).toBe(testId);
} finally {
await authenticateBoundaryCli(
process.env.BOUNDARY_ADDR,
@@ -148,14 +148,9 @@ test('Vault Credential Store (User & Key Pair) @ce @aws @docker', async ({
session.item.credentials[0].secret.decoded.data.username;
const retrievedKey =
session.item.credentials[0].secret.decoded.data.private_key;
if (process.env.E2E_SSH_USER != retrievedUser) {
throw new Error(
'Stored User does not match. EXPECTED: ' +
process.env.E2E_SSH_USER +
', ACTUAL: ' +
retrievedUser,
);
}
expect(retrievedUser).toBe(process.env.E2E_SSH_USER);
const keyData = await readFile(process.env.E2E_SSH_KEY_PATH, {
encoding: 'utf-8',
});
@@ -109,7 +109,6 @@ test.describe('AWS', async () => {
// Check number of hosts in host set
let i = 0;
let rowCount = 0;
let hostsAreVisible = false;
let expectedHosts = JSON.parse(process.env.E2E_AWS_HOST_SET_IPS);
do {
i = i + 1;
@@ -120,10 +119,6 @@ test.describe('AWS', async () => {
.nth(1)
.getByRole('row')
.count();
if (rowCount == expectedHosts.length) {
hostsAreVisible = true;
break;
}
await page.reload();
await page
.getByRole('navigation', { name: 'breadcrumbs' })
@@ -131,14 +126,7 @@ test.describe('AWS', async () => {
.waitFor();
} while (i < 5);
if (!hostsAreVisible) {
throw new Error(
'Hosts are not visible. EXPECTED: ' +
expectedHosts.length +
', ACTUAL: ' +
rowCount,
);
}
expect(rowCount).toBe(expectedHosts.length);
// Navigate to each host in the host set
for (let i = 0; i < expectedHosts.length; i++) {