Skip to content

Commit

Permalink
PMM-13086 fb tests fixes (#774)
Browse files Browse the repository at this point in the history
* PMM-13086 pgsm tests

* PMM-13086 remove alertmanager tests as they are not part of pmm3

* PMM-13086 fix exporters and bm locations tests

* PMM-13086 workflow temp update

* PMM-13086 workflow temp update

* PMM-13086 workflow temp update

* trigger

* PMM-13086 workflow temp update

* PMM-13086 fix pgss

* PMM-13086 fix instances and pgss\pgsm

* PMM-13086 fix instances and pgss\pgsm

* PMM-13086 fix profile tests

* PMM-13086 user password test

* PMM-13086 dont check agents on profile_test.js

* PMM-13086 dont check agents on profile_test.js

* PMM-13086 dont check agents on profile_test.js

* PMM-13086 fix services locators

* PMM-13086 skipping some tests

* PMM-13086 update ci yml

* PMM-13086 fix pgsm qan

* trigger

* PMM-13086 review fixes, fix qan for pgsm

* PMM-13086 fix qan for pgsm

* PMM-13086 add wait for search filter field

* PMM-13086 use buildUrlWithParams for accessing QAN in PGSM tests

* PMM-13086 use buildUrlWithParams for accessing QAN in PGSM tests

* PMM-13086 remove only

* PMM-13086 use playwright for searching for a filter in QAN

* PMM-13086 use playwright for searching for a filter in QAN

* PMM-13086 use playwright for searching for a filter in QAN

* trigger

* PMM-13086 test with old version of the pmm framework

* PMM-13086 test with old version of the pmm framework

* PMM-13086 test pmm framework fix

* trigger

* PMM-13086 use default qa-integration branch
  • Loading branch information
yurkovychv authored May 7, 2024
1 parent 6dca7c8 commit e86f9fa
Show file tree
Hide file tree
Showing 25 changed files with 243 additions and 374 deletions.
10 changes: 4 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
pull_request:
branches:
- main
- v3

jobs:
lint:
Expand All @@ -23,14 +24,11 @@ jobs:

e2e_fb_tests:
name: e2e FB tests
uses: percona/pmm-qa/.github/workflows/fb-e2e-suite.yml@main
secrets:
BACKUP_LOCATION_ACCESS_KEY: ${{ secrets.BACKUP_LOCATION_ACCESS_KEY }}
BACKUP_LOCATION_SECRET_KEY: ${{ secrets.BACKUP_LOCATION_SECRET_KEY }}
uses: percona/pmm-qa/.github/workflows/fb-e2e-suite.yml@v3
with:
sha: 'null'
pmm_ui_tests_branch: ${{ github.head_ref }}
pmm_qa_branch: 'main'
pmm_qa_branch: 'v3'
pmm_server_image: 'perconalab/pmm-server:3-dev-latest'
pmm_client_image: 'perconalab/pmm-client:3-dev-latest'
pmm_client_version: 'dev-latest'
pmm_client_version: '3-dev-latest'
13 changes: 5 additions & 8 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,13 @@ services:
- "443:8443"
environment:
- PMM_DEBUG=1
- ENABLE_RBAC=1
- PERCONA_TEST_SAAS_HOST=check-dev.percona.com:443
- PMM_ENABLE_ACCESS_CONTROL=1
- GF_AUTH_OAUTH_ALLOW_INSECURE_EMAIL_LOOKUP=1
- PERCONA_PORTAL_URL=https://portal-dev.percona.com
- PERCONA_TEST_CHECKS_PUBLIC_KEY=RWTg+ZmCCjt7O8eWeAmTLAqW+1ozUbpRSKSwNTmO+exlS5KEIPYWuYdX
- PERCONA_TEST_PLATFORM_ADDRESS=https://check-dev.percona.com:443
- PERCONA_TEST_PLATFORM_PUBLIC_KEY=RWTg+ZmCCjt7O8eWeAmTLAqW+1ozUbpRSKSwNTmO+exlS5KEIPYWuYdX
- PERCONA_TEST_VERSION_SERVICE_URL=https://check-dev.percona.com/versions/v1
- PERCONA_TEST_TELEMETRY_INTERVAL=10s
- PERCONA_TEST_TELEMETRY_RETRY_BACKOFF=10s
- PMM_DEV_PERCONA_PLATFORM_PUBLIC_KEY=RWTg+ZmCCjt7O8eWeAmTLAqW+1ozUbpRSKSwNTmO+exlS5KEIPYWuYdX
- PMM_DEV_PERCONA_PLATFORM_ADDRESS=https://check-dev.percona.com:443
- PMM_DEV_TELEMETRY_INTERVAL=10s
- PMM_DEV_TELEMETRY_RETRY_BACKOFF=10s
volumes:
- pmm-server-data:/srv
networks:
Expand Down
5 changes: 3 additions & 2 deletions tests/backup/inventory_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,9 @@ Data(restoreFromDifferentStorageLocationsTests).Scenario(

const restoreToDifferentService = new DataTable(['backupType']);

restoreToDifferentService.add(['LOGICAL']);
restoreToDifferentService.add(['PHYSICAL']);
// TODO: unskip in scope of https://perconadev.atlassian.net/browse/PMM-13097
// restoreToDifferentService.add(['LOGICAL']);
// restoreToDifferentService.add(['PHYSICAL']);

Data(restoreToDifferentService).Scenario(
'@PMM-T1773 Verify user is able to perform MongoDB restore to compatible service @backup @bm-mongo @bm-fb',
Expand Down
1 change: 0 additions & 1 deletion tests/backup/locations_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ const mongoServiceName = 'mongo-backup-locations';
Feature('BM: Backup Locations').retry(1);

BeforeSuite(async ({ I }) => {
// await I.suppressTour();
I.say(await I.verifyCommand(`docker exec rs101 pmm-admin add mongodb --username=pmm --password=pmmpass --port=27017 --service-name=${mongoServiceName} --replication-set=rs0 --cluster=rs`));
});

Expand Down
4 changes: 2 additions & 2 deletions tests/backup/pages/locationsPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ module.exports = {
deleteByName: (name) => locate('$delete-storage-location-button').inside(locationCell(name)),
showDetails: (name) => locate('$show-row-details').inside(locationCell(name)),
hideDetails: (name) => locate('$hide-row-details').inside(locationCell(name)),
showSecret: locate('div').after('$small-secret-holder'),
showSecret: locate('[class$="-Icon"]').after('$small-secret-holder'),
forceDeleteCheckbox: '$force-checkbox-input',
cancelDelete: '$cancel-delete-modal-button',
confirmDelete: '$confirm-delete-modal-button',
Expand Down Expand Up @@ -128,7 +128,7 @@ module.exports = {

verifyLocationFields(name, type, config, description = '') {
const {
path, endpoint, bucket_name, access_key, secret_key,
endpoint, bucket_name, access_key, secret_key,
} = config;

I.waitForVisible(this.fields.name, 30);
Expand Down
3 changes: 2 additions & 1 deletion tests/backup/scheduled_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,8 @@ Scenario(
},
);

Scenario(
// TODO: unskip after https://perconadev.atlassian.net/browse/PMM-12988
Scenario.skip(
'@PMM-T908 Verify user can enable/disable scheduled backup @backup @bm-mongo @bm-fb',
async ({
I, scheduledPage, scheduledAPI,
Expand Down
2 changes: 1 addition & 1 deletion tests/configuration/pages/changePasswordPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module.exports = {
url: 'graph/profile/password',

elements: {
heading: '.page-sub-heading',
heading: '[class*=page-header] h1',
oldPasswordInput: '#current-password',
newPasswordInput: '#new-password',
confirmPasswordInput: '#confirm-new-password',
Expand Down
9 changes: 5 additions & 4 deletions tests/configuration/pages/servicesTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,22 @@ const getServiceRowLocator = (serviceName) => `//span[contains(text(), '${servic
module.exports = {
url: 'graph/inventory/services',
fields: {
nodesLink: locate('[role="tablist"] a').withText('Nodes').withAttr({ 'aria-label': 'Tab Nodes' }),
serviceRow: (serviceName) => getServiceRowLocator(serviceName),
serviceCellMonitoring: (serviceName) => `${getServiceRowLocator(serviceName)}/td[5]`,
inventoryTable: locate('table'),

},
buttons: {
addService: locate('button').withText('Add Service'),
},
pagination: paginationPart,

async open() {
I.amOnPage(this.url);
await I.waitForVisible(this.fields.nodesLink, 30);
I.waitForVisible(this.buttons.addService, 30);
},

async getServiceMonitoringStatus(serviceName) {
await I.waitForVisible(this.fields.serviceRow(serviceName), 60);
I.waitForVisible(this.fields.serviceRow(serviceName), 60);

return (await I.grabTextFrom(this.fields.serviceCellMonitoring(serviceName))).trim();
},
Expand Down
9 changes: 0 additions & 9 deletions tests/configuration/profile_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,6 @@ Scenario(
process.env.ADMIN_PASSWORD = NEW_ADMIN_PASSWORD;
await loginPage.login();

await I.say('Verify all agents have "Running" status. There is no agent with "DONE" and "UNKNOWN" status');
for (const name of ['vmagent', 'node_exporter', 'postgres_exporter', 'mongodb_exporter', 'mysqld_exporter']) {
const listStatus = (await I.verifyCommand(`pmm-admin list | grep ${name} | awk -F' ' '{print $2}' | tail -n 1`)).trim();
const status = (await I.verifyCommand(`pmm-admin status | grep ${name} | awk -F' ' '{print $3}' | tail -n 1`)).trim();

I.assertEqual(listStatus, 'Running', `'${name}' is expected to have 'Running' status in pmm-admin list, but found: '${status}'`);
I.assertEqual(status, 'Running', `'${name}' is expected to have 'Running' status in pmm-admin status, but found: '${status}'`);
}

await pmmInventoryPage.servicesTab.open();
await pmmInventoryPage.servicesTab.pagination.selectRowsPerPage(100);

Expand Down
11 changes: 7 additions & 4 deletions tests/configuration/verifyPMMInventory_test.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
const assert = require('assert');
const { de } = require('@faker-js/faker/lib/locales');

const {
I, remoteInstancesPage, pmmInventoryPage, remoteInstancesHelper,
remoteInstancesPage, pmmInventoryPage, remoteInstancesHelper,
} = inject();

const externalExporterServiceName = 'external_service_new';
Expand Down Expand Up @@ -250,12 +249,16 @@ Scenario(
},
);

// the test relies on --database psmdb
Scenario(
'PMM-T1225 - Verify summary file includes process_exec_path for agents @inventory @exporters @cli',
async ({ I, pmmInventoryPage }) => {
I.amOnPage(pmmInventoryPage.url);
const response = await I.verifyCommand('pmm-admin summary');
const statusFile = JSON.parse(await I.readFileInZipArchive(response.split(' ')[0], 'client/status.json'));
const response = await I.verifyCommand('docker exec rs101 pmm-admin summary');
const zipFileName = response.split(' ')[0];

await I.verifyCommand(`docker cp rs101:/${zipFileName} ./summary.zip`);
const statusFile = JSON.parse(await I.readFileInZipArchive('summary.zip', 'client/status.json'));
const exporters = statusFile.agents_info.filter((agent) => !agent.agent_type.toLowerCase().includes('qan'));

I.amOnPage(pmmInventoryPage.url);
Expand Down
28 changes: 0 additions & 28 deletions tests/configuration/verifyPMMSettingsPageElements_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,34 +86,6 @@ xScenario(
},
);

Scenario(
'@PMM-T1519 Verify that alerting link inside settings forwarding to correct page @settings',
async ({ I, pmmSettingsPage, alertsPage }) => {
I.amOnPage(pmmSettingsPage.alertManagerUrl);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
I.click(pmmSettingsPage.fields.perconaAlertingUrl);
I.assertTrue((await I.grabCurrentUrl()).includes(alertsPage.url), 'Link should lead to IA page. But it does not');
I.waitForElement(alertsPage.elements.pageHeader, 30);
},
);

Scenario(
'@PMM-T1820 - Verify DBaaS deprecation warning @settings @settings-fb',
async ({
I, pmmSettingsPage, settingsAPI, dbaasPage,
}) => {
await settingsAPI.changeSettings({ dbaas: false });
I.amOnPage(pmmSettingsPage.advancedSettingsUrl);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
I.waitForVisible(pmmSettingsPage.fields.dbaasSwitchSelector, 30);
pmmSettingsPage.verifySwitch(pmmSettingsPage.fields.dbaasSwitchSelectorInput, 'off');
I.click(pmmSettingsPage.fields.dbaasSwitchSelector);
I.verifyWarning('Deprecation notice\nDBaaS feature is deprecated. We encourage you to use Everest instead. Check out our Migration guide', 10);
await settingsAPI.changeSettings({ dbaas: true });
I.amOnPage(dbaasPage.k8sClusterUrl);
I.verifyWarning('Deprecation notice\nDBaaS feature is deprecated. We encourage you to use Everest instead. Check out our Migration guide', 10);
},
);
Scenario('@PMM-T1866 - Verify if public address has an port assigned and following UI/API requests dont error @settings', async ({ I, pmmSettingsPage, adminPage }) => {
I.amOnPage(pmmSettingsPage.advancedSettingsUrl);

Expand Down
145 changes: 0 additions & 145 deletions tests/configuration/verifyPMMSettingsPageFunctionality_test.js
Original file line number Diff line number Diff line change
@@ -1,45 +1,5 @@
const communicationDefaults = new DataTable(['type', 'serverAddress', 'hello', 'from', 'authType', 'username', 'password', 'url', 'message']);
const assert = require('assert');

// pmmSettingsPage.communicationData.forEach(({
// type, serverAddress, hello, from, authType, username, password, url,
// }) => {
// // eslint-disable-next-line max-len
// eslint-disable-next-line max-len
// communicationDefaults.add([type, serverAddress, hello, from, authType, username, password, url, pmmSettingsPage.messages.successPopUpMessage]);
// });

// communicationDefaults.add([
// pmmSettingsPage.emailDefaults.type,
// 'test.com',
// pmmSettingsPage.emailDefaults.hello,
// pmmSettingsPage.emailDefaults.from,
// pmmSettingsPage.emailDefaults.authType,
// null,
// null,
// null,
// 'Invalid argument: invalid server address, expected format host:port']);
// communicationDefaults.add([
// pmmSettingsPage.emailDefaults.type,
// pmmSettingsPage.emailDefaults.serverAddress,
// '%',
// pmmSettingsPage.emailDefaults.from,
// pmmSettingsPage.emailDefaults.authType,
// null,
// null,
// null,
// 'Invalid argument: invalid hello field, expected valid host']);
// communicationDefaults.add([
// 'slack',
// null,
// null,
// null,
// null,
// null,
// null,
// 'invalid@url',
// 'Invalid argument: invalid url value']);

Feature('PMM Settings Functionality').retry(1);

Before(async ({ I, settingsAPI }) => {
Expand Down Expand Up @@ -82,34 +42,6 @@ Scenario('PMM-T94 - Open PMM Settings page and verify changing Data Retention [c
I.waitForValue(pmmSettingsPage.fields.dataRetentionInput, dataRetentionValue, 30);
});

// TODO: check ovf failure
Scenario(
'PMM-T108 - Open PMM Settings page and verify adding Alertmanager Rule [critical] PMM-T109 - Verify adding and clearing Alertmanager rules @not-ovf @settings',
async ({ I, pmmSettingsPage }) => {
const scheme = 'http://';
const sectionNameToExpand = pmmSettingsPage.sectionTabsList.alertmanager;

I.amOnPage(pmmSettingsPage.url);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
await pmmSettingsPage.expandSection(sectionNameToExpand, pmmSettingsPage.fields.alertmanagerButton);
pmmSettingsPage.addAlertmanagerRule(
scheme + pmmSettingsPage.alertManager.ip + pmmSettingsPage.alertManager.service,
pmmSettingsPage.alertManager.editRule.replace('{{ sec }}', Math.floor(Math.random() * 10) + 1),
);
I.verifyPopUpMessage(pmmSettingsPage.messages.successPopUpMessage);
pmmSettingsPage.openAlertsManagerUi();
await pmmSettingsPage.verifyAlertmanagerRuleAdded(pmmSettingsPage.alertManager.editRuleName);
// PMM-T109 starting here
I.amOnPage(pmmSettingsPage.url);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
await pmmSettingsPage.expandSection(sectionNameToExpand, pmmSettingsPage.fields.alertmanagerButton);
pmmSettingsPage.addAlertmanagerRule('', '');
I.wait(5);
pmmSettingsPage.openAlertsManagerUi();
I.dontSeeElement(`//pre[contains(text(), '${pmmSettingsPage.alertManager.editRuleName}')]`);
},
);

Scenario.skip(
'PMM-T253 Verify user can see correct tooltip for STT [trivial] @settings @stt @grafana-pr',
async ({ I, pmmSettingsPage }) => {
Expand Down Expand Up @@ -141,49 +73,6 @@ Scenario.skip(
},
).retry(2);

Scenario('PMM-T520 - Verify that alert is in Firing State - internal alert manager @nightly @not-ovf', async ({
I,
pmmSettingsPage,
}) => {
const scheme = 'http://127.0.0.1';
const sectionNameToExpand = pmmSettingsPage.sectionTabsList.alertmanager;

I.amOnPage(pmmSettingsPage.url);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
await pmmSettingsPage.expandSection(sectionNameToExpand, pmmSettingsPage.fields.alertmanagerButton);
pmmSettingsPage.addAlertmanagerRule(
scheme + pmmSettingsPage.alertManager.service,
pmmSettingsPage.alertManager.rule2,
);
I.verifyPopUpMessage(pmmSettingsPage.messages.successPopUpMessage);
pmmSettingsPage.openAlertsManagerUi();
await pmmSettingsPage.verifyAlertmanagerRuleAdded(pmmSettingsPage.alertManager.ruleName2);
I.amOnPage(pmmSettingsPage.stateOfAlertsUrl);
await pmmSettingsPage.verifyAlertmanagerRuleAdded(pmmSettingsPage.alertManager.ruleName2, true);
});

Scenario('PMM-T520 - Verify that alert is being fired to external Alert Manager @nightly @not-ovf', async ({
I,
pmmSettingsPage,
}) => {
const scheme = 'http://';
const sectionNameToExpand = pmmSettingsPage.sectionTabsList.alertmanager;

I.amOnPage(pmmSettingsPage.url);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
await pmmSettingsPage.expandSection(sectionNameToExpand, pmmSettingsPage.fields.alertmanagerButton);
pmmSettingsPage.addAlertmanagerRule(
scheme + pmmSettingsPage.alertManager.ip + pmmSettingsPage.alertManager.externalAlertManagerPort,
pmmSettingsPage.alertManager.rule,
);
I.verifyPopUpMessage(pmmSettingsPage.messages.successPopUpMessage);
pmmSettingsPage.openAlertsManagerUi();
await pmmSettingsPage.verifyAlertmanagerRuleAdded(pmmSettingsPage.alertManager.ruleName);
I.amOnPage(pmmSettingsPage.stateOfAlertsUrl);
await pmmSettingsPage.verifyAlertmanagerRuleAdded(pmmSettingsPage.alertManager.ruleName, true);
await pmmSettingsPage.verifyExternalAlertManager(pmmSettingsPage.alertManager.ruleName);
});

Scenario(
'PMM-T532 PMM-T533 PMM-T536 - Verify user can disable/enable IA in Settings @ia @settings',
async ({
Expand Down Expand Up @@ -212,40 +101,6 @@ Scenario(
},
).retry(2);

Scenario(
'PMM-T785 - Verify DBaaS cannot be disabled with ENABLE_DBAAS or PERCONA_TEST_DBAAS @dbaas',
async ({ I, pmmSettingsPage }) => {
I.amOnPage(pmmSettingsPage.advancedSettingsUrl);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
I.waitForVisible(pmmSettingsPage.fields.dbaasSwitchSelector, 30);
pmmSettingsPage.verifySwitch(pmmSettingsPage.fields.dbaasSwitchSelectorInput, 'on');
I.click(pmmSettingsPage.fields.dbaasSwitchSelector);
pmmSettingsPage.verifySwitch(pmmSettingsPage.fields.dbaasSwitchSelectorInput, 'off');
I.click(pmmSettingsPage.fields.advancedButton);
// skipped until PMM-9982 is fixed
// pmmSettingsPage.verifySwitch(pmmSettingsPage.fields.dbaasSwitchSelectorInput, 'on');
I.verifyPopUpMessage(pmmSettingsPage.messages.invalidDBaaSDisableMessage);
},
);

Data(communicationDefaults).Scenario(
'PMM-T534 PMM-T535 PMM-T1074 - Verify user is able to set up default Email/Slack communication settings / validation @ia @settings @grafana-pr',
async ({
I, pmmSettingsPage, settingsAPI, current,
}) => {
await settingsAPI.apiEnableIA();
I.amOnPage(pmmSettingsPage.communicationSettingsUrl);
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
pmmSettingsPage.fillCommunicationFields(current);
I.verifyPopUpMessage(current.message);
if (current === pmmSettingsPage.messages.successPopUpMessage) {
I.refreshPage();
await pmmSettingsPage.waitForPmmSettingsPageLoaded();
await pmmSettingsPage.verifyCommunicationFields(current);
}
},
);

Scenario(
'PMM-T747 - Verify enabling Azure flag @instances',
async ({
Expand Down
6 changes: 6 additions & 0 deletions tests/custom_steps.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,12 @@ module.exports = () => actor({
case 'service_name':
queryParams['var-service_name'] = value;
break;
case 'application_name':
queryParams['var-application_name'] = value;
break;
case 'database':
queryParams['var-database'] = value;
break;
case 'columns':
queryParams.columns = value;
break;
Expand Down
Loading

0 comments on commit e86f9fa

Please sign in to comment.