test(e2e): Use new tags syntax (#2686)

* test(e2e): Use new tag syntax

* chore: Update yarn lock
This commit is contained in:
Michael Li authored and GitHub committed 2025-02-12 17:24:51 -05:00
1 parent 8fedb23399
commit f3232f34c2
27 files changed
+371 -765

No files matched your search

+21 -9
View File
@@ -20,7 +20,10 @@ test.beforeAll(async () => {
});
test.describe('Aliases (Enterprise)', () => {
test('Set up alias from target details page @ent @aws @docker', async ({
test(
'Set up alias from target details page',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -97,9 +100,9 @@ test.describe('Aliases (Enterprise)', () => {
// Note: On the Target details page, there is a section with the header
// "Aliases". The extra check here is to ensure that we are on the Alias
// details page and not the Target details page.
await expect(page.getByRole('heading', { name: 'Alias' })).not.toHaveText(
'Aliases',
);
await expect(
page.getByRole('heading', { name: 'Alias' }),
).not.toHaveText('Aliases');
await page.getByRole('button', { name: 'Manage' }).click();
await page.getByText('Clear', { exact: true }).click();
await page.getByText('OK', { exact: true }).click();
@@ -127,9 +130,13 @@ test.describe('Aliases (Enterprise)', () => {
await boundaryCli.deleteAlias(alias);
}
}
});
},
);
test('Set up alias from new target page @ent @aws @docker', async ({
test(
'Set up alias from new target page',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -200,9 +207,13 @@ test.describe('Aliases (Enterprise)', () => {
}
}
}
});
},
);
test('Set up alias from aliases page @ent @aws @docker', async ({
test(
'Set up alias from aliases page',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -287,5 +298,6 @@ test.describe('Aliases (Enterprise)', () => {
await boundaryCli.deleteAlias(alias);
}
}
});
},
);
});
+21 -9
View File
@@ -19,7 +19,10 @@ test.beforeAll(async () => {
});
test.describe('Aliases', () => {
test('Set up alias from target details page @ce @aws @docker', async ({
test(
'Set up alias from target details page',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -80,9 +83,9 @@ test.describe('Aliases', () => {
// Note: On the Target details page, there is a section with the header
// "Aliases". The extra check here is to ensure that we are on the Alias
// details page and not the Target details page.
await expect(page.getByRole('heading', { name: 'Alias' })).not.toHaveText(
'Aliases',
);
await expect(
page.getByRole('heading', { name: 'Alias' }),
).not.toHaveText('Aliases');
await page.getByRole('button', { name: 'Manage' }).click();
await page.getByText('Clear', { exact: true }).click();
await page.getByText('OK', { exact: true }).click();
@@ -110,9 +113,13 @@ test.describe('Aliases', () => {
await boundaryCli.deleteAlias(alias);
}
}
});
},
);
test('Set up alias from new target page @ce @aws @docker', async ({
test(
'Set up alias from new target page',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -171,9 +178,13 @@ test.describe('Aliases', () => {
}
}
}
});
},
);
test('Set up alias from aliases page @ce @aws @docker', async ({
test(
'Set up alias from aliases page',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -245,5 +256,6 @@ test.describe('Aliases', () => {
await boundaryCli.deleteAlias(alias);
}
}
});
},
);
});
@@ -21,7 +21,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Set up LDAP auth method @ce @ent @docker', async ({
test(
'Set up LDAP auth method',
{ tag: ['@ce', '@ent', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -305,4 +308,5 @@ test('Set up LDAP auth method @ce @ent @docker', async ({
}
}
}
});
},
);
@@ -26,7 +26,10 @@ test.beforeEach(async () => {
execSync(`vault auth disable userpass`);
});
test('Set up OIDC auth method @ce @ent @docker @aws', async ({
test(
'Set up OIDC auth method',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({
page,
context,
baseURL,
@@ -97,7 +100,9 @@ test('Set up OIDC auth method @ce @ent @docker @aws', async ({
const oidcManagedGroupName = 'OIDC Managed Group';
await page.getByLabel('Name (Optional)').fill(oidcManagedGroupName);
await page.getByLabel('Description').fill('This is an automated test');
await page.getByLabel('Filter').fill(`"engineering" in "/userinfo/groups"`);
await page
.getByLabel('Filter')
.fill(`"engineering" in "/userinfo/groups"`);
await page.getByRole('button', { name: 'Save' }).click();
await expect(
page.getByRole('alert').getByText('Success', { exact: true }),
@@ -141,7 +146,9 @@ test('Set up OIDC auth method @ce @ent @docker @aws', async ({
// View the OIDC account and verify account attributes
await page.getByRole('link', { name: orgName }).click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText(orgName),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText(orgName),
).toBeVisible();
await page
.getByRole('navigation', { name: 'IAM' })
@@ -236,7 +243,10 @@ test('Set up OIDC auth method @ce @ent @docker @aws', async ({
.getByRole('navigation', { name: 'IAM' })
.getByRole('link', { name: 'Users' })
.click();
await page.getByRole('cell', { hasText: email }).getByRole('link').click();
await page
.getByRole('cell', { hasText: email })
.getByRole('link')
.click();
await page.getByRole('link', { name: 'Accounts' }).click();
expect(
await page
@@ -264,4 +274,5 @@ test('Set up OIDC auth method @ce @ent @docker @aws', async ({
}
}
}
});
},
);
@@ -20,7 +20,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Verify new auth-method can be created and assigned to users @ce @ent @aws @docker', async ({
test(
'Verify new auth-method can be created and assigned to users',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -77,7 +80,9 @@ test('Verify new auth-method can be created and assigned to users @ce @ent @aws
.click();
await page.getByRole('link', { name: orgName }).click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText(orgName),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText(orgName),
).toBeVisible();
await page
.getByRole('navigation', { name: 'IAM' })
@@ -134,4 +139,5 @@ test('Verify new auth-method can be created and assigned to users @ce @ent @aws
}
}
}
});
},
);
@@ -18,7 +18,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Multiple Credential Stores (ENT) @ent @aws @docker', async ({
test(
'Multiple Credential Stores (ENT)',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -144,4 +147,5 @@ test('Multiple Credential Stores (ENT) @ent @aws @docker', async ({
}
}
}
});
},
);
@@ -39,7 +39,10 @@ test.beforeEach(async ({ page, targetAddress, targetPort }) => {
await credentialStoresPage.createStaticCredentialStore();
});
test('Static Credential Store (User & Key Pair) @ce @aws @docker', async ({
test(
'Static Credential Store (User & Key Pair)',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -103,9 +106,13 @@ test('Static Credential Store (User & Key Pair) @ce @aws @docker', async ({
}
}
}
});
},
);
test('Static Credential Store (Username & Password) @ce @aws @docker', async ({
test(
'Static Credential Store (Username & Password)',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -165,9 +172,13 @@ test('Static Credential Store (Username & Password) @ce @aws @docker', async ({
}
}
}
});
},
);
test('Static Credential Store (JSON) @ce @aws @docker', async ({
test(
'Static Credential Store (JSON)',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -176,11 +187,16 @@ test('Static Credential Store (JSON) @ce @aws @docker', async ({
}) => {
try {
const credentialName = 'Credential ' + nanoid();
await page.getByRole('link', { name: 'Credentials', exact: true }).click();
await page
.getByRole('link', { name: 'Credentials', exact: true })
.click();
await page.getByRole('link', { name: 'New', exact: true }).click();
await page.getByLabel('Name (Optional)').fill(credentialName);
await page.getByLabel('Description').fill('This is an automated test');
await page.getByRole('group', { name: 'Type' }).getByLabel('JSON').click();
await page
.getByRole('group', { name: 'Type' })
.getByLabel('JSON')
.click();
await page.getByText('{}').click();
const testName = 'name-json';
const testPassword = 'password-json';
@@ -247,9 +263,13 @@ test('Static Credential Store (JSON) @ce @aws @docker', async ({
}
}
}
});
},
);
test('Multiple Credential Stores (CE) @ce @aws @docker', async ({
test(
'Multiple Credential Stores (CE)',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -308,4 +328,5 @@ test('Multiple Credential Stores (CE) @ce @aws @docker', async ({
}
}
}
});
},
);
@@ -34,7 +34,10 @@ test.afterEach(() => {
execSync(`vault secrets disable ${secretsPath}`);
});
test('Vault Credential Store (User & Key Pair) @ent @aws @docker', async ({
test(
'Vault Credential Store (User & Key Pair)',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -127,4 +130,5 @@ test('Vault Credential Store (User & Key Pair) @ent @aws @docker', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
@@ -35,9 +35,12 @@ test.afterEach(() => {
execSync(`vault policy delete ${secretPolicyName}`);
execSync(`vault policy delete ${boundaryPolicyName}`);
execSync(`vault secrets disable ${secretsPath}`);
})
});
test('Vault Credential Store (User & Key Pair) @ce @aws @docker', async ({
test(
'Vault Credential Store (User & Key Pair)',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -150,4 +153,5 @@ test('Vault Credential Store (User & Key Pair) @ce @aws @docker', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
@@ -39,13 +39,12 @@ test.beforeEach(
test.afterEach(() => {
execSync(`vault policy delete ${secretPolicyName}`);
execSync(`vault policy delete ${boundaryPolicyName}`);
})
});
test('Verify resources can be deleted (enterprise) @ent @aws', async ({
page,
awsRegion,
vaultAddr,
}) => {
test(
'Verify resources can be deleted (enterprise)',
{ tag: ['@ent', '@aws'] },
async ({ page, awsRegion, vaultAddr }) => {
let orgId;
let orgDeleted = false;
try {
@@ -65,12 +64,12 @@ test('Verify resources can be deleted (enterprise) @ent @aws', async ({
let userId = await boundaryCli.createUser(orgId);
let staticHostCatalogId =
await boundaryCli.createStaticHostCatalog(projectId);
let dynamicAwsHostCatalogId = await boundaryCli.createDynamicAwsHostCatalog(
projectId,
awsRegion,
);
let staticHostId = await boundaryCli.createStaticHost(staticHostCatalogId);
let staticHostSetId = await boundaryCli.createHostSet(staticHostCatalogId);
let dynamicAwsHostCatalogId =
await boundaryCli.createDynamicAwsHostCatalog(projectId, awsRegion);
let staticHostId =
await boundaryCli.createStaticHost(staticHostCatalogId);
let staticHostSetId =
await boundaryCli.createHostSet(staticHostCatalogId);
let staticCredentialStoreId =
await boundaryCli.createStaticCredentialStore(projectId);
const vaultToken = await vaultCli.getVaultToken(
@@ -161,4 +160,5 @@ test('Verify resources can be deleted (enterprise) @ent @aws', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
+12 -12
View File
@@ -41,11 +41,10 @@ test.afterEach(() => {
execSync(`vault policy delete ${boundaryPolicyName}`);
});
test('Verify resources can be deleted @ce @aws', async ({
page,
awsRegion,
vaultAddr,
}) => {
test(
'Verify resources can be deleted',
{ tag: ['@ce', '@aws'] },
async ({ page, awsRegion, vaultAddr }) => {
let orgId;
let orgDeleted = false;
try {
@@ -64,12 +63,12 @@ test('Verify resources can be deleted @ce @aws', async ({
let userId = await boundaryCli.createUser(orgId);
let staticHostCatalogId =
await boundaryCli.createStaticHostCatalog(projectId);
let dynamicAwsHostCatalogId = await boundaryCli.createDynamicAwsHostCatalog(
projectId,
awsRegion,
);
let staticHostId = await boundaryCli.createStaticHost(staticHostCatalogId);
let staticHostSetId = await boundaryCli.createHostSet(staticHostCatalogId);
let dynamicAwsHostCatalogId =
await boundaryCli.createDynamicAwsHostCatalog(projectId, awsRegion);
let staticHostId =
await boundaryCli.createStaticHost(staticHostCatalogId);
let staticHostSetId =
await boundaryCli.createHostSet(staticHostCatalogId);
let staticCredentialStoreId =
await boundaryCli.createStaticCredentialStore(projectId);
const vaultToken = await vaultCli.getVaultToken(
@@ -186,4 +185,5 @@ test('Verify resources can be deleted @ce @aws', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
@@ -20,7 +20,10 @@ test.beforeEach(async ({ page }) => {
});
test.describe('AWS', () => {
test('Create an AWS Dynamic Host Catalog and set up Host Sets @ent @aws', async ({
test(
'Create an AWS Dynamic Host Catalog and set up Host Sets',
{ tag: ['@ent', '@aws'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -232,5 +235,6 @@ test.describe('AWS', () => {
}
}
}
});
},
);
});
@@ -20,7 +20,10 @@ test.beforeEach(async ({ page }) => {
});
test.describe('AWS', () => {
test('Create an AWS Dynamic Host Catalog and set up Host Sets @ce @aws', async ({
test(
'Create an AWS Dynamic Host Catalog and set up Host Sets',
{ tag: ['@ce', '@aws'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -232,5 +235,6 @@ test.describe('AWS', () => {
}
}
}
});
},
);
});
@@ -10,7 +10,10 @@ import * as boundaryCli from '../../helpers/boundary-cli';
import { OrgsPage } from '../pages/orgs.js';
import { StoragePoliciesPage } from '../pages/storage-policies.js';
test('Global Settings @ent @aws @docker', async ({
test(
'Global Settings',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -58,4 +61,5 @@ test('Global Settings @ent @aws @docker', async ({
await boundaryCli.deletePolicy(storagePolicyId);
}
}
});
},
);
+6 -2
View File
@@ -14,7 +14,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Verify a new role can be created and associated with a group @ce @ent @aws @docker', async ({
test(
'Verify a new role can be created and associated with a group',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -45,4 +48,5 @@ test('Verify a new role can be created and associated with a group @ce @ent @aws
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
+24 -22
View File
@@ -11,11 +11,10 @@ import { LoginPage } from '../pages/login.js';
// Reset storage state for this file to avoid being authenticated
test.use({ storageState: { cookies: [], origins: [] } });
test('Log in, log out, and then log back in @ce @ent @aws @docker', async ({
page,
adminLoginName,
adminPassword,
}) => {
test(
'Log in, log out, and then log back in',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({ page, adminLoginName, adminPassword }) => {
await page.goto('/');
// Log in
@@ -34,45 +33,48 @@ test('Log in, log out, and then log back in @ce @ent @aws @docker', async ({
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText('Orgs'),
).toBeVisible();
});
},
);
test.describe('Failure Cases', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/');
});
test('Log in with invalid password @ce @ent @aws @docker', async ({
page,
adminLoginName,
}) => {
test(
'Log in with invalid password',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({ page, adminLoginName }) => {
await page.getByLabel('Login Name').fill(adminLoginName);
await page.getByLabel('Password', { exact: true }).fill('badpassword');
await page.getByRole('button', { name: 'Sign In' }).click();
await expect(page.getByRole('alert').getByText('Error')).toBeVisible();
await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible();
await expect(page.getByText(adminLoginName)).toBeHidden();
});
},
);
test('Log in with only username @ce @ent @aws @docker', async ({
page,
adminLoginName,
}) => {
test(
'Log in with only username',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({ page, adminLoginName }) => {
await page.getByLabel('Login Name').fill('testuser');
await page.getByRole('button', { name: 'Sign In' }).click();
await expect(page.getByRole('alert').getByText('Error')).toBeVisible();
await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible();
await expect(page.getByText(adminLoginName)).toBeHidden();
});
},
);
test('Log in with only password @ce @ent @aws @docker', async ({
page,
adminLoginName,
adminPassword,
}) => {
test(
'Log in with only password',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({ page, adminLoginName, adminPassword }) => {
await page.getByLabel('Password', { exact: true }).fill(adminPassword);
await page.getByRole('button', { name: 'Sign In' }).click();
await expect(page.getByRole('alert').getByText('Error')).toBeVisible();
await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible();
await expect(page.getByText(adminLoginName)).toBeHidden();
});
},
);
});
+9 -6
View File
@@ -8,10 +8,10 @@ import { expect } from '@playwright/test';
import * as boundaryHttp from '../../helpers/boundary-http.js';
test('Search and Pagination (Targets) @ce @ent @aws @docker', async ({
page,
request,
}) => {
test(
'Search and Pagination (Targets)',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({ page, request }) => {
let org;
try {
org = await boundaryHttp.createOrg(request);
@@ -37,7 +37,9 @@ test('Search and Pagination (Targets) @ce @ent @aws @docker', async ({
.getByRole('navigation', { name: 'Resources' })
.getByRole('link', { name: 'Targets' })
.click();
await expect(page.getByRole('heading', { name: 'Targets' })).toBeVisible();
await expect(
page.getByRole('heading', { name: 'Targets' }),
).toBeVisible();
// Check pagination
// The most recent target should be visible. The oldest target should not be
@@ -157,4 +159,5 @@ test('Search and Pagination (Targets) @ce @ent @aws @docker', async ({
org = await request.delete(`/v1/scopes/${org.id}`);
}
}
});
},
);
@@ -21,7 +21,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Session Recording Test (AWS) @ent @aws', async ({
test(
'Session Recording Test (AWS)',
{ tag: ['@ent', '@aws'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -108,7 +111,9 @@ test('Session Recording Test (AWS) @ent @aws', async ({
await expect(page.getByRole('heading', { name: 'Orgs' })).toBeVisible();
await page.getByRole('link', { name: orgName }).click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText(orgName),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText(orgName),
).toBeVisible();
const storagePoliciesPage = new StoragePoliciesPage(page);
policyName = await storagePoliciesPage.createStoragePolicy();
@@ -181,7 +186,9 @@ test('Session Recording Test (AWS) @ent @aws', async ({
await expect(page.getByRole('heading', { name: 'Orgs' })).toBeVisible();
await page.getByRole('link', { name: orgName }).click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText(orgName),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText(orgName),
).toBeVisible();
await page
.getByRole('link', { name: 'Storage Policies', exact: true })
@@ -191,7 +198,9 @@ test('Session Recording Test (AWS) @ent @aws', async ({
await page
.getByLabel('Retention Policy')
.selectOption({ label: 'Do not protect, allow deletion any time' });
await page.getByLabel('Deletion Policy').selectOption({ label: 'Custom' });
await page
.getByLabel('Deletion Policy')
.selectOption({ label: 'Custom' });
await page.getByRole('button', { name: 'Save' }).click();
await expect(
page.getByRole('alert').getByText('Success', { exact: true }),
@@ -244,4 +253,5 @@ test('Session Recording Test (AWS) @ent @aws', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
@@ -21,7 +21,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Session Recording Test (MinIO) @ent @docker', async ({
test(
'Session Recording Test (MinIO)',
{ tag: ['@ent', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -63,7 +66,8 @@ test('Session Recording Test (MinIO) @ent @docker', async ({
// Create storage bucket
await page.getByRole('link', { name: 'Orgs', exact: true }).click();
const storageBucketsPage = new StorageBucketsPage(page);
const storageBucketName = await storageBucketsPage.createStorageBucketMinio(
const storageBucketName =
await storageBucketsPage.createStorageBucketMinio(
orgName,
bucketEndpointUrl,
bucketName,
@@ -115,7 +119,9 @@ test('Session Recording Test (MinIO) @ent @docker', async ({
await expect(page.getByRole('heading', { name: 'Orgs' })).toBeVisible();
await page.getByRole('link', { name: orgName }).click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText(orgName),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText(orgName),
).toBeVisible();
const storagePoliciesPage = new StoragePoliciesPage(page);
policyName = await storagePoliciesPage.createStoragePolicy();
@@ -188,7 +194,9 @@ test('Session Recording Test (MinIO) @ent @docker', async ({
await expect(page.getByRole('heading', { name: 'Orgs' })).toBeVisible();
await page.getByRole('link', { name: orgName }).click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText(orgName),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText(orgName),
).toBeVisible();
await page
.getByRole('link', { name: 'Storage Policies', exact: true })
@@ -198,7 +206,9 @@ test('Session Recording Test (MinIO) @ent @docker', async ({
await page
.getByLabel('Retention Policy')
.selectOption({ label: 'Do not protect, allow deletion any time' });
await page.getByLabel('Deletion Policy').selectOption({ label: 'Custom' });
await page
.getByLabel('Deletion Policy')
.selectOption({ label: 'Custom' });
await page.getByRole('button', { name: 'Save' }).click();
await expect(
page.getByRole('alert').getByText('Success', { exact: true }),
@@ -251,4 +261,5 @@ test('Session Recording Test (MinIO) @ent @docker', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
@@ -32,7 +32,10 @@ test.afterEach(async () => {
execSync(`vault policy delete ${boundaryPolicyName}`);
});
test('SSH Certificate Injection @ent @docker', async ({
test(
'SSH Certificate Injection',
{ tag: ['@ent', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -146,4 +149,5 @@ test('SSH Certificate Injection @ent @docker', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
@@ -34,7 +34,10 @@ test.afterEach(() => {
execSync(`vault secrets disable ${secretsPath}`);
});
test('SSH Credential Injection (Vault User & Key Pair) @ent @docker', async ({
test(
'SSH Credential Injection (Vault User & Key Pair)',
{ tag: ['@ent', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -136,4 +139,5 @@ test('SSH Credential Injection (Vault User & Key Pair) @ent @docker', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
+23 -7
View File
@@ -18,7 +18,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Verify session created for TCP target @ent @aws @docker', async ({
test(
'Verify session created for TCP target',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -58,7 +61,11 @@ test('Verify session created for TCP target @ent @aws @docker', async ({
projectId,
targetName,
);
connect = await boundaryCli.connectToTarget(targetId, sshUser, sshKeyPath);
connect = await boundaryCli.connectToTarget(
targetId,
sshUser,
sshKeyPath,
);
const sessionsPage = new SessionsPage(page);
await sessionsPage.waitForSessionToBeVisible(targetName);
await page
@@ -75,9 +82,13 @@ test('Verify session created for TCP target @ent @aws @docker', async ({
connect.kill('SIGTERM');
}
}
});
},
);
test('Verify session created for SSH target @ent @aws @docker', async ({
test(
'Verify session created for SSH target',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -145,9 +156,13 @@ test('Verify session created for SSH target @ent @aws @docker', async ({
connect.kill('SIGTERM');
}
}
});
},
);
test('SSH target with host sources @ent @aws @docker', async ({
test(
'SSH target with host sources',
{ tag: ['@ent', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -247,4 +262,5 @@ test('SSH target with host sources @ent @aws @docker', async ({
connect.kill('SIGTERM');
}
}
});
},
);
+28 -8
View File
@@ -18,7 +18,10 @@ test.beforeAll(async () => {
await boundaryCli.checkBoundaryCli();
});
test('Verify session created to target with host, then cancel the session @ce @aws @docker', async ({
test(
'Verify session created to target with host, then cancel the session',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -77,7 +80,11 @@ test('Verify session created to target with host, then cancel the session @ce @a
projectId,
targetName,
);
connect = await boundaryCli.connectToTarget(targetId, sshUser, sshKeyPath);
connect = await boundaryCli.connectToTarget(
targetId,
sshUser,
sshKeyPath,
);
const sessionsPage = new SessionsPage(page);
await sessionsPage.waitForSessionToBeVisible(targetName);
await page
@@ -94,9 +101,13 @@ test('Verify session created to target with host, then cancel the session @ce @a
connect.kill('SIGTERM');
}
}
});
},
);
test('Verify session created to target with address, then cancel the session @ce @aws @docker', async ({
test(
'Verify session created to target with address, then cancel the session',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -136,7 +147,11 @@ test('Verify session created to target with address, then cancel the session @ce
projectId,
targetName,
);
connect = await boundaryCli.connectToTarget(targetId, sshUser, sshKeyPath);
connect = await boundaryCli.connectToTarget(
targetId,
sshUser,
sshKeyPath,
);
const sessionsPage = new SessionsPage(page);
await sessionsPage.waitForSessionToBeVisible(targetName);
await page
@@ -153,9 +168,13 @@ test('Verify session created to target with address, then cancel the session @ce
connect.kill('SIGTERM');
}
}
});
},
);
test('Verify TCP target is updated @ce @aws @docker', async ({
test(
'Verify TCP target is updated',
{ tag: ['@ce', '@aws', '@docker'] },
async ({
page,
baseURL,
adminAuthMethodId,
@@ -230,4 +249,5 @@ test('Verify TCP target is updated @ce @aws @docker', async ({
await boundaryCli.deleteScope(orgId);
}
}
});
},
);
+12 -7
View File
@@ -6,10 +6,10 @@
import { test } from '../../global-setup.js';
import { expect } from '@playwright/test';
test('Create a worker (enterprise) @ent @docker @aws', async ({
page,
browserName,
}) => {
test(
'Create a worker (enterprise)',
{ tag: ['@ent', '@aws', '@docker'] },
async ({ page, browserName }) => {
test.skip(browserName === 'webkit', 'Bug in worker form on Safari');
await page.goto('/');
@@ -50,7 +50,9 @@ test('Create a worker (enterprise) @ent @docker @aws', async ({
.getByRole('button', { name: 'Add' })
.click();
await page.getByRole('switch', { name: 'Enable Recording Storage' }).click();
await page
.getByRole('switch', { name: 'Enable Recording Storage' })
.click();
await page.getByLabel('Recording Storage Path').fill('/tmp/recordings');
// Check auto-populated config
@@ -75,7 +77,9 @@ test('Create a worker (enterprise) @ent @docker @aws', async ({
await expect(page.locator(configLocator)).toContainText(
'type = ["downstream", "pki"]',
);
await expect(page.locator(configLocator)).toContainText('test = ["example"]');
await expect(page.locator(configLocator)).toContainText(
'test = ["example"]',
);
await expect(page.locator(configLocator)).toContainText(
'recording_storage_path = "/tmp/recordings"',
);
@@ -87,4 +91,5 @@ test('Create a worker (enterprise) @ent @docker @aws', async ({
page.getByRole('alert').getByText('Error', { exact: true }),
).toBeVisible();
await page.getByRole('button', { name: 'Dismiss' }).click();
});
},
);
+12 -4
View File
@@ -9,7 +9,10 @@ import { customAlphabet } from 'nanoid';
import { WorkersPage } from '../pages/workers.js';
test('Worker Tags @ce @ent @aws @docker', async ({ page }) => {
test(
'Worker Tags',
{ tag: ['@ce', '@ent', '@aws', '@docker'] },
async ({ page }) => {
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz', 10);
await page.goto('/');
@@ -18,7 +21,9 @@ test('Worker Tags @ce @ent @aws @docker', async ({ page }) => {
.getByRole('link', { name: 'Workers' })
.click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText('Workers'),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText('Workers'),
).toBeVisible();
// View tags from worker list page
@@ -101,7 +106,9 @@ test('Worker Tags @ce @ent @aws @docker', async ({ page }) => {
.getByRole('link', { name: 'Workers' })
.click();
await expect(
page.getByRole('navigation', { name: 'breadcrumbs' }).getByText('Workers'),
page
.getByRole('navigation', { name: 'breadcrumbs' })
.getByText('Workers'),
).toBeVisible();
await page
.getByRole('table')
@@ -182,4 +189,5 @@ test('Worker Tags @ce @ent @aws @docker', async ({ page }) => {
await expect(
page.getByRole('table').getByRole('cell', { name: newTagKey }),
).toBeHidden();
});
},
);
+9 -3
View File
@@ -6,7 +6,10 @@
import { test } from '../../global-setup.js';
import { expect } from '@playwright/test';
test('Create a worker @ce @docker @aws', async ({ page, browserName }) => {
test(
'Create a worker',
{ tag: ['@ce', '@aws', '@docker'] },
async ({ page, browserName }) => {
test.skip(browserName === 'webkit', 'Bug in worker form on Safari');
await page.goto('/');
@@ -69,7 +72,9 @@ test('Create a worker @ce @docker @aws', async ({ page, browserName }) => {
await expect(page.locator(configLocator)).toContainText(
'type = ["downstream", "pki"]',
);
await expect(page.locator(configLocator)).toContainText('test = ["example"]');
await expect(page.locator(configLocator)).toContainText(
'test = ["example"]',
);
// Try using an invalid worker token. Expect an error
await page.getByLabel('Worker Auth Registration Request').fill('test');
@@ -78,4 +83,5 @@ test('Create a worker @ce @docker @aws', async ({ page, browserName }) => {
page.getByRole('alert').getByText('Error', { exact: true }),
).toBeVisible();
await page.getByRole('button', { name: 'Dismiss' }).click();
});
},
);
+38 -615
View File
File diff suppressed because it is too large. Load diff