Skip to content

Commit f43e062

Browse files
authored
Merge pull request #1522 from RedisInsight/e2e/feature/Import-certificates
E2e/feature/import certificates
2 parents 8b52a36 + b5b4045 commit f43e062

File tree

18 files changed

+316
-74
lines changed

18 files changed

+316
-74
lines changed

tests/e2e/common-actions/databases-actions.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { t } from 'testcafe';
2+
import * as fs from 'fs';
23
import { MyRedisDatabasePage } from '../pageObjects';
34

45
const myRedisDatabasePage = new MyRedisDatabasePage();
@@ -26,6 +27,14 @@ export class DatabasesActions {
2627
.click(myRedisDatabasePage.submitImportBtn)
2728
.expect(myRedisDatabasePage.importDialogTitle.textContent).eql('Import Results', `Databases from ${fileParameters.type} not imported`);
2829
}
30+
31+
/**
32+
* Parse json for importing databases
33+
* @param path The path to json file
34+
*/
35+
parseDbJsonByPath(path: string): any[] {
36+
return JSON.parse(fs.readFileSync(path, 'utf-8'));
37+
}
2938
}
3039

3140
/**
@@ -37,6 +46,7 @@ export class DatabasesActions {
3746
* @param password The password of db
3847
* @param connectionType The connection type of db
3948
* @param fileName The file name
49+
* @param parsedJson The parsed json content
4050
*/
4151
export type ImportDatabaseParameters = {
4252
path: string,
@@ -45,5 +55,6 @@ export type ImportDatabaseParameters = {
4555
userName?: string,
4656
password?: string,
4757
connectionType?: string,
48-
fileName?: string
58+
fileName?: string,
59+
parsedJson?: any
4960
};

tests/e2e/helpers/api/api-database.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export async function addNewOSSClusterDatabaseApi(databaseParameters: OSSCluster
6262
export async function discoverSentinelDatabaseApi(databaseParameters: SentinelParameters, primaryGroupsNumber?: number): Promise<void> {
6363
let masters = databaseParameters.masters;
6464
if (primaryGroupsNumber) {
65-
masters = databaseParameters.masters.slice(0, primaryGroupsNumber);
65+
masters = databaseParameters.masters!.slice(0, primaryGroupsNumber);
6666
}
6767
const response = await request(endpoint).post('/redis-sentinel/databases')
6868
.send({
@@ -126,7 +126,7 @@ export async function getDatabaseByConnectionType(connectionType?: string): Prom
126126
export async function deleteAllDatabasesApi(): Promise<void> {
127127
const allDatabases = await getAllDatabases();
128128
if (allDatabases.length > 0) {
129-
const databaseIds = [];
129+
const databaseIds: string[] = [];
130130
for (let i = 0; i < allDatabases.length; i++) {
131131
const dbData = JSON.parse(JSON.stringify(allDatabases[i]));
132132
databaseIds.push(dbData.id);
@@ -183,8 +183,8 @@ export async function deleteOSSClusterDatabaseApi(databaseParameters: OSSCluster
183183
* @param databaseParameters The database parameters
184184
*/
185185
export async function deleteAllSentinelDatabasesApi(databaseParameters: SentinelParameters): Promise<void> {
186-
for (let i = 0; i < databaseParameters.name.length; i++) {
187-
const databaseId = await getDatabaseByName(databaseParameters.name[i]);
186+
for (let i = 0; i < databaseParameters.name!.length; i++) {
187+
const databaseId = await getDatabaseByName(databaseParameters.name![i]);
188188
const response = await request(endpoint).delete('/databases')
189189
.send({ 'ids': [`${databaseId}`] }).set('Accept', 'application/json');
190190
await t.expect(response.status).eql(200, 'Delete Sentinel database request failed');

tests/e2e/helpers/database.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export async function acceptLicenseTermsAndAddSentinelDatabaseApi(databaseParame
158158
// Reload Page to see the database added through api
159159
await common.reloadPage();
160160
// Connect to DB
161-
await myRedisDatabasePage.clickOnDBByName(databaseParameters.name[1] ?? '');
161+
await myRedisDatabasePage.clickOnDBByName(databaseParameters.name![1] ?? '');
162162
}
163163

164164
/**
@@ -273,7 +273,7 @@ export async function clickOnEditDatabaseByName(databaseName: string): Promise<v
273273
* Delete database button by name
274274
* @param databaseName The name of the database
275275
*/
276-
export async function deleteDatabaseByNameApi(databaseName: string): Promise<void> {
276+
export async function deleteDatabaseByNameApi(databaseName: string): Promise<void> {
277277
const databaseId = await getDatabaseByName(databaseName);
278278
const databaseDeleteBtn = Selector(`[data-testid=delete-instance-${databaseId}-icon]`);
279279

tests/e2e/pageObjects/add-redis-database-page.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,14 @@ export class AddRedisDatabasePage {
4444
primaryGroupNameInput = Selector('[data-testid=primary-group]');
4545
masterGroupPassword = Selector('[data-testid=sentinel-master-password]');
4646
connectionType = Selector('[data-testid=connection-type]');
47+
sentinelForm = Selector('[data-testid=form]');
4748
//Links
4849
buildFromSource = Selector('a').withExactText('Build from source');
4950
buildFromDocker = Selector('a').withExactText('Docker');
5051
buildFromHomebrew = Selector('a').withExactText('Homebrew');
52+
// DROPDOWNS
53+
caCertField = Selector('[data-testid=select-ca-cert]', {timeout: 500});
54+
clientCertField = Selector('[data-testid=select-cert]', {timeout: 500});
5155

5256
/**
5357
* Adding a new redis database
@@ -61,7 +65,7 @@ export class AddRedisDatabasePage {
6165
await t
6266
.typeText(this.hostInput, parameters.host, { replace: true, paste: true })
6367
.typeText(this.portInput, parameters.port, { replace: true, paste: true })
64-
.typeText(this.databaseAliasInput, parameters.databaseName, { replace: true, paste: true });
68+
.typeText(this.databaseAliasInput, parameters.databaseName!, { replace: true, paste: true });
6569
if (!!parameters.databaseUsername) {
6670
await t.typeText(this.usernameInput, parameters.databaseUsername, { replace: true, paste: true });
6771
}
@@ -82,7 +86,7 @@ export class AddRedisDatabasePage {
8286
await t
8387
.typeText(this.hostInput, parameters.host, { replace: true, paste: true })
8488
.typeText(this.portInput, parameters.port, { replace: true, paste: true })
85-
.typeText(this.databaseAliasInput, parameters.databaseName, { replace: true, paste: true });
89+
.typeText(this.databaseAliasInput, parameters.databaseName!, { replace: true, paste: true });
8690
if (!!parameters.databaseUsername) {
8791
await t.typeText(this.usernameInput, parameters.databaseUsername, { replace: true, paste: true });
8892
}
@@ -128,8 +132,8 @@ export class AddRedisDatabasePage {
128132
await t
129133
.typeText(this.hostInput, parameters.host, { replace: true, paste: true })
130134
.typeText(this.portInput, parameters.port, { replace: true, paste: true })
131-
.typeText(this.usernameInput, parameters.databaseUsername, { replace: true, paste: true })
132-
.typeText(this.passwordInput, parameters.databasePassword, { replace: true, paste: true });
135+
.typeText(this.usernameInput, parameters.databaseUsername!, { replace: true, paste: true })
136+
.typeText(this.passwordInput, parameters.databasePassword!, { replace: true, paste: true });
133137
}
134138

135139
/**

tests/e2e/pageObjects/my-redis-databases-page.ts

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,64 @@ export class MyRedisDatabasePage {
188188
* Verify database status is visible
189189
*/
190190
async verifyDatabaseStatusIsVisible(): Promise<void> {
191-
await t.expect(Selector("div").withAttribute("data-testid", /database-status-new-*/).visible)
192-
.ok("Database status is not visible");
191+
await t.expect(Selector('div').withAttribute('data-testid', /database-status-new-*/).visible)
192+
.ok('Database status is not visible');
193193
}
194194

195195
/**
196196
* Verify database status is not visible
197197
*/
198198
async verifyDatabaseStatusIsNotVisible(): Promise<void> {
199-
await t.expect(Selector("div").withAttribute("data-testid", /database-status-new-*/).visible)
200-
.notOk("Database status is still visible");
199+
await t.expect(Selector('div').withAttribute('data-testid', /database-status-new-*/).visible)
200+
.notOk('Database status is still visible');
201+
}
202+
203+
/**
204+
* Filter array with database objects by result field and return names
205+
* @param listOfDb Actual databases list
206+
* @param result The expected import result
207+
*/
208+
getDatabaseNamesFromListByResult(listOfDb: DatabasesForImport, result: string): string[] {
209+
return listOfDb.filter(element => element.result === result).map(item => item.name!);
201210
}
202211
}
212+
213+
/**
214+
* Database for import parameters
215+
* @param host Host of connection
216+
* @param port Port of connection
217+
* @param name The name of connection
218+
* @param result The expected result of connection import
219+
* @param username The username of connection
220+
* @param auth Password of connection
221+
* @param cluster Is the connection has cluster
222+
* @param indName The name of coonection with index
223+
* @param db The index of connection
224+
* @param ssh_port The ssh port of connection
225+
* @param timeout_connect The connect timeout of connection
226+
* @param timeout_execute The execute timeout of connection
227+
* @param other_field The test field
228+
* @param ssl_ca_cert_path The CA certificate of connection by path
229+
* @param ssl_local_cert_path The Client certificate of connection by path
230+
* @param ssl_private_key_path The Client key of connection by path
231+
* @param ssl Is the connection have ssl
232+
*/
233+
export type DatabasesForImport = {
234+
host?: string,
235+
port?: number | string,
236+
name?: string,
237+
result?: string,
238+
username?: string,
239+
auth?: string,
240+
cluster?: boolean | string,
241+
indName?: string,
242+
db?: number,
243+
ssh_port?: number,
244+
timeout_connect?: number,
245+
timeout_execute?: number,
246+
other_field?: string,
247+
ssl_ca_cert_path?: string,
248+
ssl_local_cert_path?: string,
249+
ssl_private_key_path?: string,
250+
ssl?: boolean
251+
}[];
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-----BEGIN CERTIFICATE-----
2+
mockedCACertificatePath
3+
-----END CERTIFICATE-----
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-----BEGIN CERTIFICATE-----
2+
mockedCACertificatePath
3+
-----END CERTIFICATE-----
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-----BEGIN CERTIFICATE-----
2+
mockedClientCrtPath
3+
-----END CERTIFICATE-----
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-----BEGIN PRIVATE KEY-----
2+
mockedPrivateKeyPath
3+
-----END PRIVATE KEY-----
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-----BEGIN CERTIFICATE-----
2+
mockedClientCrtPath
3+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)