Files
threshold-ui/e2e-tests/admin/tests/delete-resources.spec.js
T
Zhihe Li 9c10d79661 Icu 14777 add more target tests (#2594)
* refactor: 💡 Move global setup to root
* refactor: 💡 Move env variable test fixture to global setup file
* test: 💍 Add more DC e2e tests for targets
* docs: ✏️ Updated e2e README

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14777
2024-12-03 18:51:22 -05:00

206 lines
6.6 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { test, authenticatedState } from '../../global-setup.js';
import { execSync } from 'node:child_process';
import {
authenticateBoundaryCli,
checkBoundaryCli,
createOrgCli,
createProjectCli,
createControllerLedWorkerCli,
createPasswordAuthMethodCli,
makeAuthMethodPrimaryCli,
createPasswordAccountCli,
createRoleCli,
createGroupCli,
createUserCli,
createStaticHostCatalogCli,
createDynamicAwsHostCatalogCli,
createStaticHostCli,
createHostSetCli,
createStaticCredentialStoreCli,
createTcpTarget,
createVaultCredentialStoreCli,
createUsernamePasswordCredentialCli,
deleteScopeCli,
} from '../../helpers/boundary-cli.js';
import { checkVaultCli, getVaultToken } from '../../helpers/vault-cli.js';
import { AuthMethodsPage } from '../pages/auth-methods.js';
import { BaseResourcePage } from '../pages/base-resource.js';
import { WorkersPage } from '../pages/workers.js';
const secretPolicyName = 'kv-policy';
const boundaryPolicyName = 'boundary-controller';
test.use({ storageState: authenticatedState });
// Setting the test timeout to 180s
// This test can often exceed the globally defined timeout due to the number of
// network calls.
test.setTimeout(180000);
test.beforeAll(async () => {
await checkBoundaryCli();
await checkVaultCli();
});
test.beforeEach(
async ({ baseURL, adminAuthMethodId, adminLoginName, adminPassword }) => {
execSync(`vault policy delete ${secretPolicyName}`);
execSync(`vault policy delete ${boundaryPolicyName}`);
await authenticateBoundaryCli(
baseURL,
adminAuthMethodId,
adminLoginName,
adminPassword,
);
},
);
test('Verify resources can be deleted @ce @aws', async ({
page,
awsRegion,
vaultAddr,
}) => {
let orgId;
let orgDeleted = false;
try {
// Create boundary resources using CLI
orgId = await createOrgCli();
let projectId = await createProjectCli(orgId);
let workerId = await createControllerLedWorkerCli();
let authMethodId = await createPasswordAuthMethodCli(orgId);
await makeAuthMethodPrimaryCli(orgId, authMethodId);
let passwordAccountId = await createPasswordAccountCli(authMethodId);
let projectScopeRoleId = await createRoleCli(projectId);
let orgScopeRoleId = await createRoleCli(orgId);
let globalScopeRoleId = await createRoleCli('global');
let groupId = await createGroupCli(orgId);
let userId = await createUserCli(orgId);
let staticHostCatalogId = await createStaticHostCatalogCli(projectId);
let dynamicAwsHostCatalogId = await createDynamicAwsHostCatalogCli(
projectId,
awsRegion,
);
let staticHostId = await createStaticHostCli(staticHostCatalogId);
let staticHostSetId = await createHostSetCli(staticHostCatalogId);
let staticCredentialStoreId =
await createStaticCredentialStoreCli(projectId);
const vaultToken = await getVaultToken(
boundaryPolicyName,
secretPolicyName,
);
let vaultCredentialStoreId = await createVaultCredentialStoreCli(
projectId,
vaultAddr,
vaultToken,
);
let usernamePasswordCredentialId =
await createUsernamePasswordCredentialCli(staticCredentialStoreId);
let tcpTargetId = await createTcpTarget(projectId);
const baseResourcePage = new BaseResourcePage(page);
// Delete TCP target
await page.goto(`/scopes/${projectId}/targets/${tcpTargetId}`);
await baseResourcePage.deleteResource(page);
// Delete username-password credentials
await page.goto(
`/scopes/${projectId}/credential-stores/${staticCredentialStoreId}/credentials/${usernamePasswordCredentialId}`,
);
await baseResourcePage.deleteResource(page);
// Delete static credential store
await page.goto(
`/scopes/${projectId}/credential-stores/${staticCredentialStoreId}`,
);
await baseResourcePage.deleteResource(page);
// Delete vault credential store
await page.goto(
`/scopes/${projectId}/credential-stores/${vaultCredentialStoreId}`,
);
await baseResourcePage.deleteResource(page);
// Delete static host set
await page.goto(
`/scopes/${projectId}/host-catalogs/${staticHostCatalogId}/host-sets/${staticHostSetId}`,
);
await baseResourcePage.deleteResource(page);
// Delete static host
await page.goto(
`/scopes/${projectId}/host-catalogs/${staticHostCatalogId}/hosts/${staticHostId}`,
);
await baseResourcePage.deleteResource(page);
// Delete static host catalog
await page.goto(
`/scopes/${projectId}/host-catalogs/${staticHostCatalogId}`,
);
await baseResourcePage.deleteResource(page);
// Delete dynamic aws host catalog
await page.goto(
`/scopes/${projectId}/host-catalogs/${dynamicAwsHostCatalogId}`,
);
await baseResourcePage.deleteResource(page);
// Delete user
await page.goto(`/scopes/${projectId}/users/${userId}`);
await baseResourcePage.deleteResource(page);
// Delete group
await page.goto(`/scopes/${projectId}/groups/${groupId}`);
await baseResourcePage.deleteResource(page);
// Delete role under global scope
await page.goto(`/scopes/global/roles/${globalScopeRoleId}`);
await baseResourcePage.deleteResource(page);
// Delete role under org scope
await page.goto(`/scopes/${projectId}/roles/${orgScopeRoleId}`);
await baseResourcePage.deleteResource(page);
// Delete role under project scope
await page.goto(`/scopes/${projectId}/roles/${projectScopeRoleId}`);
await baseResourcePage.deleteResource(page);
// Delete password account
await page.goto(
`/scopes/${orgId}/auth-methods/${authMethodId}/accounts/${passwordAccountId}`,
);
await baseResourcePage.deleteResource(page);
// Delete auth method
await page.goto(`/scopes/${orgId}/auth-methods/${authMethodId}`);
const authMethodsPage = new AuthMethodsPage(page);
await authMethodsPage.removeAuthMethodAsPrimary();
await baseResourcePage.deleteResource(page);
// Delete worker
await page.goto(`/scopes/global/workers/${workerId}`);
const workersPage = new WorkersPage(page);
await workersPage.deleteResource(page);
// Delete project
await page.goto(`/scopes/${projectId}`);
await baseResourcePage.deleteResource(page);
// Delete org
await page.goto(`/scopes/${orgId}/edit`);
await baseResourcePage.deleteResource(page);
orgDeleted = true;
} finally {
// Delete org in case the test failed before deleting the org using UI
if (orgId && orgDeleted === false) {
await deleteScopeCli(orgId);
}
}
});