Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/tests-e2e-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
fail-fast: false
matrix:
# Number of threads to run tests
parallel: [0, 1, 2, 3, 4, 5]
parallel: [0, 1, 2, 3]

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -66,7 +66,7 @@ jobs:
- name: Generate short list of the test files
working-directory: ./tests/e2e
run: |
testFiles=$(find tests/web -type f -name '*.e2e.ts' | sort | awk "NR % 6 == ${{ matrix.parallel }}")
testFiles=$(find tests/web -type f -name '*.e2e.ts' | sort | awk "NR % 4 == ${{ matrix.parallel }}")

echo $testFiles

Expand Down
9 changes: 6 additions & 3 deletions tests/e2e/pageObjects/dialogs/add-redis-database-dialog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ export class AddRedisDatabaseDialog {
cancelButton = Selector('[data-testid=btn-cancel]');
testConnectionBtn = Selector('[data-testid=btn-test-connection]');
backButton = Selector('[data-testid=back-btn]');
generalTab = Selector('[data-testid=manual-form-tab-general]');
securityTab = Selector('[data-testid=manual-form-tab-security]');
decompressionTab = Selector('[data-testid=manual-form-tab-decompression]');

// TEXT INPUTS (also referred to as 'Text fields')
disabledDatabaseInfo = Selector('[class=euiListGroupItem__label]');
Expand Down Expand Up @@ -103,7 +106,6 @@ export class AddRedisDatabaseDialog {
* @param index the logical index of database
*/
async addLogicalRedisDatabase(parameters: AddNewDatabaseParameters, index: string): Promise<void> {

await t
.click(this.addDatabaseButton)
.click(this.customSettingsButton);
Expand Down Expand Up @@ -147,6 +149,7 @@ export class AddRedisDatabaseDialog {
await t.typeText(this.passwordInput, databaseParameters.databasePassword, { replace: true, paste: true });
}
// Select SSH Tunnel checkbox
await t.click(this.securityTab);
await t.click(this.useSSHCheckbox);
// Enter SSH fields
await t
Expand Down Expand Up @@ -250,10 +253,10 @@ export class AddRedisDatabaseDialog {
* @param compressor - compressor value
*/
async setCompressorValue(compressor: string): Promise<void> {

if(!await this.selectCompressor.exists) {
await t.click(this.dataCompressorLabel);
}

await t.click(this.selectCompressor);
await t.click(Selector(`[id="${compressor}"]`));
}
Expand All @@ -264,7 +267,7 @@ export class AddRedisDatabaseDialog {
* @param name - name of the certificate
*/
async removeCertificateButton(certificate: TlsCertificates, name: string): Promise<void> {

await t.click(this.securityTab);
const row = Selector('button')
.find('div')
.withText(name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ test
await t
.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.customSettingsButton)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.useSSHCheckbox)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyRadioBtn)
.hover(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton);
Expand Down Expand Up @@ -100,19 +101,22 @@ test
// Verify that user can edit SSH parameters for existing database connections
await t.click(browserPage.OverviewPanel.myRedisDBLink);
await myRedisDatabasePage.clickOnEditDBByName(sshDbPrivateKey.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t
.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput, sshWithPassphrase.sshPrivateKey, { replace: true, paste: true })
.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput, sshWithPassphrase.sshPassphrase, { replace: true, paste: true });
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton.exists).notOk('Edit database panel still displayed');
await databaseHelper.clickOnEditDatabaseByName(sshDbPrivateKey.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
// Verify that password, passphrase and private key are hidden for SSH option
await t
.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput.textContent).eql(hiddenPass, 'Edited Private key not saved')
.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput.value).eql(hiddenPass, 'Edited Passphrase not saved');

// Verify that user can clone database with SSH tunnel
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.generalTab);
// Edit Database alias before cloning
await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, newClonedDatabaseAlias, { replace: true });
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ test

await t
.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.customSettingsButton);

.click(myRedisDatabasePage.AddRedisDatabaseDialog.customSettingsButton)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t
.click(myRedisDatabasePage.AddRedisDatabaseDialog.useSSHCheckbox)
.click(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyRadioBtn)
Expand Down Expand Up @@ -155,12 +155,14 @@ test
// Verify that user can edit SSH parameters for existing database connections
await t.click(browserPage.OverviewPanel.myRedisDBLink);
await myRedisDatabasePage.clickOnEditDBByName(sshDbPrivateKey.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t
.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput, sshWithPassphrase.sshPrivateKey, { replace: true, paste: true })
.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput, sshWithPassphrase.sshPassphrase, { replace: true, paste: true });
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton.exists).notOk('Edit database panel still displayed');
await databaseHelper.clickOnEditDatabaseByName(sshDbPrivateKey.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
// Verify that password, passphrase and private key are hidden for SSH option
await t
.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput.textContent).eql(hiddenPass, 'Edited Private key not saved')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ test
const compressor = 'Brotli';

await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.decompressionTab);
await myRedisDatabasePage.AddRedisDatabaseDialog.setCompressorValue(compressor);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton);

Expand Down Expand Up @@ -89,11 +90,13 @@ test
await t.expect(modulesDbRedisStackIcon.exists).ok('module icon is displayed');

await databaseHelper.clickOnEditDatabaseByName(databaseNames[1]);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).contains('ca', 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).contains('client', 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.decompressionTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.selectCompressor.textContent).eql(compressor, 'Compressor import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);
});
Expand Down
13 changes: 13 additions & 0 deletions tests/e2e/tests/web/critical-path/database/import-databases.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,28 +164,33 @@ test('Connection import from JSON', async t => {
Verify that user can see the certificate name as the certificate file name
*/
await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmHost+Port+Name+CaCert'));
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('ca', 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.exists).notOk('Client certificate was imported');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

// Verify that user can import database with Client certificate, Client private key
await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmHost+Port+Name+clientCert+privateKey'));
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('client', 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

// Verify that user can import database with all certificates
await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmHost+Port+Name+CaCert+clientCert+privateKey'));
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('ca', 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('client', 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

// Verify that certificate not imported when any certificate field has not been parsed
await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmCaCertInvalidBody'));
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.exists).notOk('Client certificate was imported');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);
await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmInvalidClientCert'));
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.exists).notOk('Client certificate was imported');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);
Expand All @@ -210,34 +215,40 @@ test('Certificates import with/without path', async t => {

// Verify that when user imports a certificate and the same certificate body already exists, the existing certificate (with its name) is applied
await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[0].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql(rdmListOfCertsDB[0].caCert.name, 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql(rdmListOfCertsDB[0].clientCert.name, 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[1].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql(rdmListOfCertsDB[0].caCert.name, 'CA certificate name with the same body is incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql(rdmListOfCertsDB[0].clientCert.name, 'Client certificate name with the same body is incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

// Verify that when user imports a certificate and the same certificate name exists but with a different body, the certificate imported with "({incremental_number})_certificate_name" name
await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[2].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql(`1_${rdmListOfCertsDB[0].caCert.name}`, 'CA certificate name with the same body is incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql(`1_${rdmListOfCertsDB[0].clientCert.name}`, 'Client certificate name with the same body is incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

// Verify that when user imports a certificate by path and the same certificate body already exists, the existing certificate (with its name) is applied
await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[3].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('caPath', 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('clientPath', 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[4].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('caPath', 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('clientPath', 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

// Verify that when user imports a certificate by path and the same certificate name exists but with a different body, the certificate imported with "({incremental_number})certificate_name" name
await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[5].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('1_caPath', 'CA certificate import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('1_clientPath', 'Client certificate import incorrect');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);
Expand All @@ -262,6 +273,7 @@ test('Import SSH parameters', async t => {

await t.click(myRedisDatabasePage.closeImportBtn);
await databaseHelper.clickOnEditDatabaseByName(racompListOfSSHDB[0].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
// Verify that user can import the SSH parameters with Password
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshHostInput.value).eql(racompListOfSSHDB[0].sshHost, 'SSH host import incorrect');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPortInput.value).eql((racompListOfSSHDB[0].sshPort).toString(), 'SSH port import incorrect');
Expand All @@ -271,6 +283,7 @@ test('Import SSH parameters', async t => {
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton);

await databaseHelper.clickOnEditDatabaseByName(racompListOfSSHDB[1].name);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
// Verify that user can import the SSH Private Key both by its value specified in the file and by the file path
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput.textContent).contains(hiddenPassword, 'SSH Private key import incorrect');
// Verify that user can import the SSH parameters with Passcode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ fixture `tls certificates`
test('Verify that user can remove added certificates', async t => {
await t.click(browserPage.NavigationPanel.myRedisDBButton);
await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await myRedisDatabasePage.AddRedisDatabaseDialog.removeCertificateButton(TlsCertificates.CA, 'ca');
// remove if other Certificates were added
if( await myRedisDatabasePage.AddRedisDatabaseDialog.getDeleteCertificate(TlsCertificates.CA).exists){
Expand All @@ -35,6 +36,7 @@ test('Verify that user can remove added certificates', async t => {
// wait for dbs are displayed
await t.expect(myRedisDatabasePage.dbNameList.count).gt(0);
await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
//verify that ca certificate is deleted
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).contains('No CA Certificate', 'CA certificate was not deleted');
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField);
Expand All @@ -47,11 +49,13 @@ test('Verify that user can remove added certificates', async t => {
// wait for dbs are displayed
await t.expect(myRedisDatabasePage.dbNameList.count).gt(0);
await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.requiresTlsClientCheckbox);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).contains('Add new certificate', 'Client certificate was not deleted');
await myRedisDatabasePage.reloadPage();

await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName);
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.requiresTlsClientCheckbox.checked).notOk('the certificate was not removed');
await myRedisDatabasePage.reloadPage();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ test
];

await t.navigateTo(generateLink(connectUrlParams));
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.securityTab);
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).contains('Add new CA certificate', 'add CA certificate is not shown');
await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).contains('Add new certificate', 'add client certificate is not shown');
await t.hover(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton);
Expand Down
Loading