From 8e7904a07e5e86e3648ceebd9d4e40c573a8d443 Mon Sep 17 00:00:00 2001 From: Chebrolu Harika Date: Mon, 1 Aug 2022 16:58:13 +0530 Subject: [PATCH 1/6] Automated testcase for creating bucket with cache --- cypress/constants/tests.ts | 1 + cypress/tests/bucket-policy.spec.ts | 47 +++++++++++++++++++ .../bucket-policy/data-resource-dropdowns.tsx | 2 + 3 files changed, 50 insertions(+) diff --git a/cypress/constants/tests.ts b/cypress/constants/tests.ts index 519b57c..dbfc739 100644 --- a/cypress/constants/tests.ts +++ b/cypress/constants/tests.ts @@ -6,6 +6,7 @@ export const STATUS_CARD_TITLE = 'Data Federation service'; // Bucket policy export const SINGLE_BUCKET_POLICY = 'e2e-bucket-single'; +export const SINGLE_BUCKET_POLICY_WITH_CACHE = 'e2e-bucket-single-cache' export const PVC_NAME = 'e2e-pvc'; export const DATA_SOURCE_NAME_NSFS = 'e2e-nsfs-data-source'; export const DATA_SOURCE_NAME_AWS = 'e2e-aws-data-source'; diff --git a/cypress/tests/bucket-policy.spec.ts b/cypress/tests/bucket-policy.spec.ts index 4c3888b..356ecea 100644 --- a/cypress/tests/bucket-policy.spec.ts +++ b/cypress/tests/bucket-policy.spec.ts @@ -3,6 +3,7 @@ import { SINGLE_BUCKET_POLICY, PVC_NAME, DATA_SOURCE_NAME_NSFS, + SINGLE_BUCKET_POLICY_WITH_CACHE, } from '../constants/tests'; import { dataSourceNSFS } from '../mocks/data-source'; import { projectNameSpace } from '../views/common'; @@ -91,4 +92,50 @@ describe('Bucket policy page', () => { cy.byTestID('delete-action').click(); cy.byTestID(SINGLE_BUCKET_POLICY).should('not.exist'); }); + + // This creates bucket policy from data sources dropdown with cache + it('creates Bucket policy with single data source and enabled cache', () => { + cy.byTestID('item-create').click(); + cy.byTestID('bucket-name-text').type(SINGLE_BUCKET_POLICY_WITH_CACHE); + cy.byTestID('read-write-dropdown') + .should('be.visible') + .find('button') + .first() + .click(); + cy.byTestID("data-source-selection-item").find("li").find("button").first().click(); + cy.log('Enable Cache'); + cy.byTestID('enable-cache-checkbox') + .should('be.visible') + .check(); + cy.byTestID('namespace-dropdown') + .should('be.visible') + .contains(DATA_FEDERATION_NAMESPACE); + cy.log('Create bucket policy'); + cy.byTestID('confirm-action-bucket').click(); + cy.log('Verify bucket policy created'); + cy.byTestSelector('details-item-value__Name').should( + 'contain', + SINGLE_BUCKET_POLICY_WITH_CACHE + ); + cy.log('Verify bucket policy is Ready'); + cy.byTestID('status-text').should('contain', 'Ready'); + cy.log('Verify only 1 data source is connected'); + cy.byTestID('mcg-resource-popover') + .should('be.visible') + .should('contain', '1 data source'); + cy.log('Verify name of the connected data source'); + cy.byTestID('mcg-resource-popover').should('be.visible').click(); + cy.log('Verify if OBC is created or not'); + cy.byTestID('obc-resource-popover') + .should('be.visible') + .should('contain', '1 ObjectBucketClaim'); + }); + + it('deletes created Bucket policy', () => { + cy.byTestID(SINGLE_BUCKET_POLICY_WITH_CACHE).first().click(); + cy.byTestID('details-actions').find('button').click(); + cy.byTestID('details-actions').find('li').last().click(); + cy.byTestID('delete-action').click(); + cy.byTestID(SINGLE_BUCKET_POLICY_WITH_CACHE).should('not.exist'); + }); }); diff --git a/packages/components/bucket-policy/data-resource-dropdowns.tsx b/packages/components/bucket-policy/data-resource-dropdowns.tsx index 18e4883..6221752 100644 --- a/packages/components/bucket-policy/data-resource-dropdowns.tsx +++ b/packages/components/bucket-policy/data-resource-dropdowns.tsx @@ -87,6 +87,7 @@ const DataResourceDropdown: React.FC = ({ className={classNames(props?.className)} variant={variant} aria-label={t('Select a data source')} + data-test="data-source-selection-item" onToggle={setOpen} onSelect={(e, selection) => { onChange(selection as string); @@ -132,6 +133,7 @@ export const SingleDataResource: React.FC = ({ dispatch({ type: BucketPolicyActionType.SET_CACHE, From 7ce5415e1908ca13f7557f080c5179dec0461975 Mon Sep 17 00:00:00 2001 From: Chebrolu Harika Date: Thu, 4 Aug 2022 00:25:59 +0530 Subject: [PATCH 2/6] modularized code for creation of bucket policy Signed-off-by: Chebrolu Harika --- cypress/constants/tests.ts | 2 +- cypress/tests/bucket-policy.spec.ts | 92 +++++------------------------ cypress/views/bucket-policy.ts | 64 ++++++++++++++++++++ 3 files changed, 81 insertions(+), 77 deletions(-) create mode 100644 cypress/views/bucket-policy.ts diff --git a/cypress/constants/tests.ts b/cypress/constants/tests.ts index dbfc739..8761396 100644 --- a/cypress/constants/tests.ts +++ b/cypress/constants/tests.ts @@ -6,7 +6,7 @@ export const STATUS_CARD_TITLE = 'Data Federation service'; // Bucket policy export const SINGLE_BUCKET_POLICY = 'e2e-bucket-single'; -export const SINGLE_BUCKET_POLICY_WITH_CACHE = 'e2e-bucket-single-cache' +export const SINGLE_BUCKET_POLICY_WITH_CACHE = 'e2e-bucket-single-cache'; export const PVC_NAME = 'e2e-pvc'; export const DATA_SOURCE_NAME_NSFS = 'e2e-nsfs-data-source'; export const DATA_SOURCE_NAME_AWS = 'e2e-aws-data-source'; diff --git a/cypress/tests/bucket-policy.spec.ts b/cypress/tests/bucket-policy.spec.ts index 356ecea..ebf425b 100644 --- a/cypress/tests/bucket-policy.spec.ts +++ b/cypress/tests/bucket-policy.spec.ts @@ -6,6 +6,12 @@ import { SINGLE_BUCKET_POLICY_WITH_CACHE, } from '../constants/tests'; import { dataSourceNSFS } from '../mocks/data-source'; +import { + checkBucketCreation, + ConfirmCreateBucket, + createBucket, + deleteBucket, +} from '../views/bucket-policy'; import { projectNameSpace } from '../views/common'; import { MCGMSCommon } from '../views/mcg-ms-common'; import { pvc } from '../views/pvc'; @@ -51,91 +57,25 @@ describe('Bucket policy page', () => { dataSourceNSFS(DATA_SOURCE_NAME_NSFS, PVC_NAME, 'e2e-subPath') )}' | oc create -f -` ).then(() => { - cy.byTestID('item-create').click(); - cy.byTestID('bucket-name-text').type(SINGLE_BUCKET_POLICY); - cy.byTestID('read-write-dropdown') - .should('be.visible') - .find('button') - .first() - .click(); - cy.contains(DATA_SOURCE_NAME_NSFS).click(); - cy.byTestID('namespace-dropdown') - .should('be.visible') - .contains(DATA_FEDERATION_NAMESPACE); - cy.log('Create bucket policy'); - cy.byTestID('confirm-action-bucket').click(); - cy.log('Verify bucket policy created'); - cy.byTestSelector('details-item-value__Name').should( - 'contain', - SINGLE_BUCKET_POLICY - ); - cy.log('Verify bucket policy is Ready'); - cy.byTestID('status-text').should('contain', 'Ready'); - cy.log('Verify only 1 data source is connected'); - cy.byTestID('mcg-resource-popover') - .should('be.visible') - .should('contain', '1 data source'); - cy.log('Verify name of the connected data source'); - cy.byTestID('mcg-resource-popover').should('be.visible').click(); - cy.contains(DATA_SOURCE_NAME_NSFS); - cy.log('Verify if OBC is created or not'); - cy.byTestID('obc-resource-popover') - .should('be.visible') - .should('contain', '1 ObjectBucketClaim'); + createBucket(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS, true); + ConfirmCreateBucket(); + checkBucketCreation(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS); }); }); it('deletes created Bucket policy', () => { - cy.byTestID(SINGLE_BUCKET_POLICY).first().click(); - cy.byTestID('details-actions').find('button').click(); - cy.byTestID('details-actions').find('li').last().click(); - cy.byTestID('delete-action').click(); - cy.byTestID(SINGLE_BUCKET_POLICY).should('not.exist'); + deleteBucket(SINGLE_BUCKET_POLICY); }); // This creates bucket policy from data sources dropdown with cache it('creates Bucket policy with single data source and enabled cache', () => { - cy.byTestID('item-create').click(); - cy.byTestID('bucket-name-text').type(SINGLE_BUCKET_POLICY_WITH_CACHE); - cy.byTestID('read-write-dropdown') - .should('be.visible') - .find('button') - .first() - .click(); - cy.byTestID("data-source-selection-item").find("li").find("button").first().click(); + createBucket(SINGLE_BUCKET_POLICY_WITH_CACHE, '', false); cy.log('Enable Cache'); - cy.byTestID('enable-cache-checkbox') - .should('be.visible') - .check(); - cy.byTestID('namespace-dropdown') - .should('be.visible') - .contains(DATA_FEDERATION_NAMESPACE); - cy.log('Create bucket policy'); - cy.byTestID('confirm-action-bucket').click(); - cy.log('Verify bucket policy created'); - cy.byTestSelector('details-item-value__Name').should( - 'contain', - SINGLE_BUCKET_POLICY_WITH_CACHE - ); - cy.log('Verify bucket policy is Ready'); - cy.byTestID('status-text').should('contain', 'Ready'); - cy.log('Verify only 1 data source is connected'); - cy.byTestID('mcg-resource-popover') - .should('be.visible') - .should('contain', '1 data source'); - cy.log('Verify name of the connected data source'); - cy.byTestID('mcg-resource-popover').should('be.visible').click(); - cy.log('Verify if OBC is created or not'); - cy.byTestID('obc-resource-popover') - .should('be.visible') - .should('contain', '1 ObjectBucketClaim'); - }); + cy.byTestID('enable-cache-checkbox').should('be.visible').check(); + ConfirmCreateBucket(); - it('deletes created Bucket policy', () => { - cy.byTestID(SINGLE_BUCKET_POLICY_WITH_CACHE).first().click(); - cy.byTestID('details-actions').find('button').click(); - cy.byTestID('details-actions').find('li').last().click(); - cy.byTestID('delete-action').click(); - cy.byTestID(SINGLE_BUCKET_POLICY_WITH_CACHE).should('not.exist'); + it('deletes created Bucket policy', () => { + deleteBucket(SINGLE_BUCKET_POLICY_WITH_CACHE); + }); }); }); diff --git a/cypress/views/bucket-policy.ts b/cypress/views/bucket-policy.ts new file mode 100644 index 0000000..8690e81 --- /dev/null +++ b/cypress/views/bucket-policy.ts @@ -0,0 +1,64 @@ +import { DATA_FEDERATION_NAMESPACE } from '../constants/common'; +import { Providers, TEST_DATA_SOURCE } from '../constants/tests'; +import { createDataSource } from './data-resource'; + +export const createBucket = ( + bucketName: string, + dataSourceName: string, + useExistingDataSource: boolean +) => { + cy.log(`creating bucket ${bucketName}`); + cy.byTestID('item-create').click(); + cy.log(`entering bucket name as ${bucketName}`); + cy.byTestID('bucket-name-text').type(bucketName); + cy.byTestID('read-write-dropdown') + .should('be.visible') + .find('button') + .first() + .click(); + if (useExistingDataSource) { + cy.log(`selecting data source ${dataSourceName}`); + cy.contains(dataSourceName).click(); + } else { + cy.log(`Creating new data source`); + createDataSource(Providers.AWS, TEST_DATA_SOURCE); + } +}; + +export const ConfirmCreateBucket = () => { + cy.byTestID('namespace-dropdown') + .should('be.visible') + .contains(DATA_FEDERATION_NAMESPACE); + cy.log('Create bucket policy'); + cy.byTestID('confirm-action-bucket').click(); +}; + +export const checkBucketCreation = ( + bucketName: string, + dataSourceName: string +) => { + cy.log('Verify bucket policy created'); + cy.byTestSelector('details-item-value__Name').should('contain', bucketName); + cy.log('Verify bucket policy is Ready'); + cy.byTestID('status-text').should('contain', 'Ready'); + cy.log('Verify only 1 data source is connected'); + cy.byTestID('mcg-resource-popover') + .should('be.visible') + .should('contain', '1 data source'); + cy.log('Verify name of the connected data source'); + cy.byTestID('mcg-resource-popover').should('be.visible').click(); + cy.contains(dataSourceName); + cy.log('Verify if OBC is created or not'); + cy.byTestID('obc-resource-popover') + .should('be.visible') + .should('contain', '1 ObjectBucketClaim'); +}; + +export const deleteBucket = (bucketName: string) => { + cy.log(`deleting bucket ${bucketName}`); + cy.byTestID(bucketName).first().click(); + cy.byTestID('details-actions').find('button').click(); + cy.byTestID('details-actions').find('li').last().click(); + cy.byTestID('delete-action').click(); + cy.byTestID(bucketName).should('not.exist'); +}; From e686a24b02544b032ee710c50a5c1ca985c76fcc Mon Sep 17 00:00:00 2001 From: Chebrolu Harika Date: Thu, 4 Aug 2022 00:36:53 +0530 Subject: [PATCH 3/6] modularized code for creation of bucket policy Signed-off-by: Chebrolu Harika --- cypress/tests/bucket-policy.spec.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cypress/tests/bucket-policy.spec.ts b/cypress/tests/bucket-policy.spec.ts index ebf425b..3bce064 100644 --- a/cypress/tests/bucket-policy.spec.ts +++ b/cypress/tests/bucket-policy.spec.ts @@ -4,6 +4,7 @@ import { PVC_NAME, DATA_SOURCE_NAME_NSFS, SINGLE_BUCKET_POLICY_WITH_CACHE, + TEST_DATA_SOURCE, } from '../constants/tests'; import { dataSourceNSFS } from '../mocks/data-source'; import { @@ -73,9 +74,10 @@ describe('Bucket policy page', () => { cy.log('Enable Cache'); cy.byTestID('enable-cache-checkbox').should('be.visible').check(); ConfirmCreateBucket(); + checkBucketCreation(SINGLE_BUCKET_POLICY, TEST_DATA_SOURCE); + }); - it('deletes created Bucket policy', () => { - deleteBucket(SINGLE_BUCKET_POLICY_WITH_CACHE); - }); + it('deletes created Bucket policy', () => { + deleteBucket(SINGLE_BUCKET_POLICY_WITH_CACHE); }); }); From caf04ae322e7eacba94ca92ab04a9ff2947b837e Mon Sep 17 00:00:00 2001 From: Chebrolu Harika Date: Thu, 4 Aug 2022 16:00:05 +0530 Subject: [PATCH 4/6] Added testcase for multids --- cypress/constants/tests.ts | 3 + cypress/tests/bucket-policy.spec.ts | 87 +++++++--- cypress/tests/data-source.spec.ts | 10 +- cypress/views/bucket-policy.ts | 151 +++++++++++------- cypress/views/data-resource.ts | 11 +- .../bucket-policy/data-resource-dropdowns.tsx | 1 + 6 files changed, 175 insertions(+), 88 deletions(-) diff --git a/cypress/constants/tests.ts b/cypress/constants/tests.ts index 8761396..93a74f6 100644 --- a/cypress/constants/tests.ts +++ b/cypress/constants/tests.ts @@ -7,12 +7,14 @@ export const STATUS_CARD_TITLE = 'Data Federation service'; // Bucket policy export const SINGLE_BUCKET_POLICY = 'e2e-bucket-single'; export const SINGLE_BUCKET_POLICY_WITH_CACHE = 'e2e-bucket-single-cache'; +export const MULTIPLE_BUCKET_POLICY = 'e2e-bucket-multiple'; export const PVC_NAME = 'e2e-pvc'; export const DATA_SOURCE_NAME_NSFS = 'e2e-nsfs-data-source'; export const DATA_SOURCE_NAME_AWS = 'e2e-aws-data-source'; // constants for data source test cases export const TEST_DATA_SOURCE = 'testing-data-source'; +export const TEST_READ_DATA_SOURCE = 'testing-data-source-read'; export enum Providers { AWS = 'AWS S3', AZURE = 'Azure Blob', @@ -27,4 +29,5 @@ export const DATA_SOURCE_INPUTS = { accessKey: Cypress.env('AWS_ACCESS_KEY_ID'), secretKey: Cypress.env('AWS_SECRET_ACCESS_KEY'), targetBucket: Cypress.env('AWS_SINGLE_DATA_SOURCE_BUCKET'), + targetwriteBucket: Cypress.env('AWS_SINGLE_WRITE_DATA_SOURCE_BUCKET'), }; diff --git a/cypress/tests/bucket-policy.spec.ts b/cypress/tests/bucket-policy.spec.ts index 3bce064..e5a885e 100644 --- a/cypress/tests/bucket-policy.spec.ts +++ b/cypress/tests/bucket-policy.spec.ts @@ -5,19 +5,17 @@ import { DATA_SOURCE_NAME_NSFS, SINGLE_BUCKET_POLICY_WITH_CACHE, TEST_DATA_SOURCE, + MULTIPLE_BUCKET_POLICY, + TEST_READ_DATA_SOURCE, } from '../constants/tests'; import { dataSourceNSFS } from '../mocks/data-source'; -import { - checkBucketCreation, - ConfirmCreateBucket, - createBucket, - deleteBucket, -} from '../views/bucket-policy'; +import { BPCommon } from '../views/bucket-policy'; import { projectNameSpace } from '../views/common'; +import { deleteDataSourceResources } from '../views/data-resource'; import { MCGMSCommon } from '../views/mcg-ms-common'; import { pvc } from '../views/pvc'; -describe('Bucket policy page', () => { +describe('Bucket policy creation of nsfs type', () => { before(() => { cy.login(); cy.clickNavLink(['Storage', 'PersistentVolumeClaims']); @@ -46,38 +44,87 @@ describe('Bucket policy page', () => { failOnNonZeroExit: false, }); }); - cy.logout(); }); - // ToDo(Sanjal): Need to refactor and add more test blocks for "Multi" and "Cache" types as well. - // right now we are only creating "nsfs" (FileSystem) type NamespaceStore which is only allowed with BucketClass of type "Single". - it('creates Bucket policy with single data source', () => { + // ToDo(Sanjal): Need to refactor and add more test blocks for "Multi" and "Cache" types as well. + // right now we are only creating "nsfs"(FileSystem) type NamespaceStore which is only allowed with BucketClass of type "Single". + it('creates Bucket policy with single data source of nsfs type', () => { cy.exec( `echo '${JSON.stringify( dataSourceNSFS(DATA_SOURCE_NAME_NSFS, PVC_NAME, 'e2e-subPath') )}' | oc create -f -` ).then(() => { - createBucket(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS, true); - ConfirmCreateBucket(); - checkBucketCreation(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS); + BPCommon.createUsingSingleDS(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS); + BPCommon.confirmCreateBucket(); + BPCommon.checkBucketCreation(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS); }); }); it('deletes created Bucket policy', () => { - deleteBucket(SINGLE_BUCKET_POLICY); + BPCommon.deleteFromDetailsPage(SINGLE_BUCKET_POLICY); + }); +}); + +describe('Bucket policy creation with single data source and enabled cache', () => { + before(() => { + cy.login(); + }); + + beforeEach(() => { + MCGMSCommon.visitBucketPolicyList(); + }); + + after(() => { + /** + * Need some time for BucketClass to get cleaned-up properly before deleting NamespaceStore, + * else we get an error from server: admission webhook "admissionwebhook.noobaa.io" denied the request: + * cannot complete because nsr "-data-source" in "IN_USE" state. + * Even though BucketClass is actually deleted, there is some deplay for it to get reflected for NamespaceStore. + */ + cy.wait(30 * SECOND); + deleteDataSourceResources(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); + cy.logout(); }); - // This creates bucket policy from data sources dropdown with cache + it('creates Bucket policy with single data source and enabled cache', () => { - createBucket(SINGLE_BUCKET_POLICY_WITH_CACHE, '', false); + BPCommon.createUsingSingleDS(SINGLE_BUCKET_POLICY_WITH_CACHE, TEST_DATA_SOURCE); cy.log('Enable Cache'); cy.byTestID('enable-cache-checkbox').should('be.visible').check(); - ConfirmCreateBucket(); - checkBucketCreation(SINGLE_BUCKET_POLICY, TEST_DATA_SOURCE); + BPCommon.confirmCreateBucket(); + BPCommon.checkBucketCreation(SINGLE_BUCKET_POLICY, TEST_DATA_SOURCE); + }); + + it('deletes created Bucket policy', () => { + BPCommon.deleteFromDetailsPage(SINGLE_BUCKET_POLICY_WITH_CACHE); }); +}); +describe('Bucket policy creation with multiple data sources', () => { + before(() => { + cy.login(); + }); + beforeEach(() => { + MCGMSCommon.visitBucketPolicyList(); + }); + after(() => { + /** + * Need some time for BucketClass to get cleaned-up properly before deleting NamespaceStore, + * else we get an error from server: admission webhook "admissionwebhook.noobaa.io" denied the request: + * cannot complete because nsr "data-source" in "IN_USE" state. + * Even though BucketClass is actually deleted, there is some deplay for it to get reflected for NamespaceStore. + */ + cy.wait(30 * SECOND); + deleteDataSourceResources(TEST_READ_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); + cy.logout(); + }); + it('creates Bucket policy with multiple data sources', () => { + BPCommon.createUsingMultiDS(MULTIPLE_BUCKET_POLICY, TEST_READ_DATA_SOURCE); + BPCommon.confirmCreateBucket(); + BPCommon.checkBucketCreation(MULTIPLE_BUCKET_POLICY, TEST_READ_DATA_SOURCE); + }); it('deletes created Bucket policy', () => { - deleteBucket(SINGLE_BUCKET_POLICY_WITH_CACHE); + BPCommon.deleteFromDetailsPage(MULTIPLE_BUCKET_POLICY); }); }); diff --git a/cypress/tests/data-source.spec.ts b/cypress/tests/data-source.spec.ts index 8444824..c55127e 100644 --- a/cypress/tests/data-source.spec.ts +++ b/cypress/tests/data-source.spec.ts @@ -37,23 +37,23 @@ describe('data source creation', () => { }); it('creates a data source having AWS as the provider', () => { - createDataSource(Providers.AWS, TEST_DATA_SOURCE); + createDataSource(Providers.AWS, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); cy.byTestID(`status-text`).should('contain', 'Ready'); }); it('creates a data source having S3 Compatible as the provider', () => { - createDataSource(Providers.S3, TEST_DATA_SOURCE); + createDataSource(Providers.S3, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); }); it('creates a data source having Azure Blob as the provider', () => { - createDataSource(Providers.AZURE, TEST_DATA_SOURCE); + createDataSource(Providers.AZURE, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); }); it('creates a data source having IBM COS as the provider', () => { - createDataSource(Providers.IBM, TEST_DATA_SOURCE); + createDataSource(Providers.IBM, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); }); }); @@ -67,7 +67,7 @@ describe('data source deletion', () => { MCGMSCommon.visitDataSourceListPage(); navigateToCreatePage(); app.waitForLoad(); - createDataSource(Providers.AWS, TEST_DATA_SOURCE); + createDataSource(Providers.AWS, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE, false); }); diff --git a/cypress/views/bucket-policy.ts b/cypress/views/bucket-policy.ts index 8690e81..d63dbbd 100644 --- a/cypress/views/bucket-policy.ts +++ b/cypress/views/bucket-policy.ts @@ -1,64 +1,97 @@ import { DATA_FEDERATION_NAMESPACE } from '../constants/common'; -import { Providers, TEST_DATA_SOURCE } from '../constants/tests'; +import { DATA_SOURCE_INPUTS, Providers, TEST_DATA_SOURCE } from '../constants/tests'; import { createDataSource } from './data-resource'; -export const createBucket = ( - bucketName: string, - dataSourceName: string, - useExistingDataSource: boolean -) => { - cy.log(`creating bucket ${bucketName}`); - cy.byTestID('item-create').click(); - cy.log(`entering bucket name as ${bucketName}`); - cy.byTestID('bucket-name-text').type(bucketName); - cy.byTestID('read-write-dropdown') - .should('be.visible') - .find('button') - .first() - .click(); - if (useExistingDataSource) { - cy.log(`selecting data source ${dataSourceName}`); - cy.contains(dataSourceName).click(); - } else { +export const BPCommon = { + createUsingSingleDS: ( + bucketName: string, + dataSourceName: string + ) => { + cy.log(`creating bucket ${bucketName}`); + cy.byTestID('item-create').click(); + cy.log(`entering bucket name as ${bucketName}`); + cy.byTestID('bucket-name-text').type(bucketName); + cy.byTestID('read-write-dropdown') + .should('be.visible') + .find('button') + .first() + .click(); cy.log(`Creating new data source`); - createDataSource(Providers.AWS, TEST_DATA_SOURCE); + cy.byTestID('add-data-source-item').click() + createDataSource(Providers.AWS, dataSourceName, DATA_SOURCE_INPUTS.targetBucket); + cy.byTestID('ready-action-finish').click(); + cy.byTestID('read-write-dropdown') + .should('be.visible') + .find('button') + .first() + .click(); + cy.byTestID('data-source-selection-item').find('li').last().click(); + }, + confirmCreateBucket: () => { + cy.byTestID('namespace-dropdown') + .should('be.visible') + .contains(DATA_FEDERATION_NAMESPACE); + cy.log('Create bucket policy'); + cy.byTestID('confirm-action-bucket').click(); + }, + createUsingMultiDS: ( + bucketName: string, + dataSourceName: string + ) => { + cy.log(`creating bucket ${bucketName}`); + cy.byTestID('item-create').click(); + cy.log(`entering bucket name as ${bucketName}`); + cy.byTestID('bucket-name-text').type(bucketName); + cy.byTestID('multi-data-source-radio-button') + .click(); + cy.byTestID('read-dropdown').click(); + cy.log(`Configuring a data source to read`); + cy.byTestID('data-source-selection-item').click(); + cy.byTestID('add-data-source-item').click(); + createDataSource(Providers.AWS, dataSourceName, DATA_SOURCE_INPUTS.targetBucket); + cy.byTestID('ready-action-finish').click(); + cy.byTestID('read-dropdown') + .should('be.visible') + .first() + .click(); + cy.byTestID('data-source-selection-item').find('li').byTestID(`${dataSourceName}-dropdown-item`).find('input[type=checkbox]').check(); + cy.byTestID('read-dropdown') + .first() + .click(); + cy.byTestID('write-dropdown').find('button').click(); + cy.log(`Configuring a data source to write`); + cy.byTestID('data-source-selection-item').find('li').byTestID(`${dataSourceName}-dropdown-item`).click(); + cy.byTestID('write-dropdown') + .should('be.visible') + .first() + .click(); + }, + checkBucketCreation: ( + bucketName: string, + dataSourceName: string + ) => { + cy.log('Verify bucket policy created'); + cy.byTestSelector('details-item-value__Name').should('contain', bucketName); + cy.log('Verify bucket policy is Ready'); + cy.byTestID('status-text').should('contain', 'Ready'); + cy.log('Verify only 1 data source is connected'); + cy.byTestID('mcg-resource-popover') + .should('be.visible') + .should('contain', '1 data source'); + cy.log('Verify name of the connected data source'); + cy.byTestID('mcg-resource-popover').should('be.visible').click(); + cy.contains(dataSourceName); + cy.log('Verify if OBC is created or not'); + cy.byTestID('obc-resource-popover') + .should('be.visible') + .should('contain', '1 ObjectBucketClaim'); + }, + deleteFromDetailsPage: (bucketName: string) => { + cy.log(`deleting bucket ${bucketName}`); + cy.byTestID(bucketName).first().click(); + cy.byTestID('details-actions').find('button').click(); + cy.byTestID('details-actions').find('li').last().click(); + cy.byTestID('delete-action').click(); + cy.byTestID(bucketName).should('not.exist'); } -}; - -export const ConfirmCreateBucket = () => { - cy.byTestID('namespace-dropdown') - .should('be.visible') - .contains(DATA_FEDERATION_NAMESPACE); - cy.log('Create bucket policy'); - cy.byTestID('confirm-action-bucket').click(); -}; - -export const checkBucketCreation = ( - bucketName: string, - dataSourceName: string -) => { - cy.log('Verify bucket policy created'); - cy.byTestSelector('details-item-value__Name').should('contain', bucketName); - cy.log('Verify bucket policy is Ready'); - cy.byTestID('status-text').should('contain', 'Ready'); - cy.log('Verify only 1 data source is connected'); - cy.byTestID('mcg-resource-popover') - .should('be.visible') - .should('contain', '1 data source'); - cy.log('Verify name of the connected data source'); - cy.byTestID('mcg-resource-popover').should('be.visible').click(); - cy.contains(dataSourceName); - cy.log('Verify if OBC is created or not'); - cy.byTestID('obc-resource-popover') - .should('be.visible') - .should('contain', '1 ObjectBucketClaim'); -}; - -export const deleteBucket = (bucketName: string) => { - cy.log(`deleting bucket ${bucketName}`); - cy.byTestID(bucketName).first().click(); - cy.byTestID('details-actions').find('button').click(); - cy.byTestID('details-actions').find('li').last().click(); - cy.byTestID('delete-action').click(); - cy.byTestID(bucketName).should('not.exist'); -}; +} diff --git a/cypress/views/data-resource.ts b/cypress/views/data-resource.ts index b513238..cc83862 100644 --- a/cypress/views/data-resource.ts +++ b/cypress/views/data-resource.ts @@ -1,8 +1,10 @@ import { MINUTE, SECOND } from '../constants/common'; import { DATA_SOURCE_INPUTS, Providers } from '../constants/tests'; -const inputCustomSecrets = () => { - const { accessKey, secretKey, targetBucket } = DATA_SOURCE_INPUTS; +const inputCustomSecrets = ( + targetBucket: string +) => { + const { accessKey, secretKey } = DATA_SOURCE_INPUTS; cy.log('setting up custom secret for the resource'); cy.byTestID('switch-to-credentials').click(); cy.byTestID(`namespacestore-access-key`).type(accessKey); @@ -86,13 +88,14 @@ export const navigateToListPageViaBreadCrumbs = (dataSourceName: string) => { export const createDataSource = ( provider: Providers, - dataSourceName: string + dataSourceName: string, + bucketName: string ) => { cy.log(`creating data source with ${provider} as provider`); cy.log(`entering data source name as ${dataSourceName}`); cy.byTestID(`data-source-name`).type(dataSourceName); setUpProvider(provider); - inputCustomSecrets(); + inputCustomSecrets(bucketName); cy.byTestID(`data-source-create-button`).click(); }; diff --git a/packages/components/bucket-policy/data-resource-dropdowns.tsx b/packages/components/bucket-policy/data-resource-dropdowns.tsx index 6221752..15d44f3 100644 --- a/packages/components/bucket-policy/data-resource-dropdowns.tsx +++ b/packages/components/bucket-policy/data-resource-dropdowns.tsx @@ -68,6 +68,7 @@ const DataResourceDropdown: React.FC = ({ key="data-source-add-modal" className="create-data-source__modal-button" variant="plain" + data-test="add-data-source-item" onClick={() => { setOpen(false); launchModal(); From 9d1d1b8cf9ba1194db633bc95cf92eac5a593fac Mon Sep 17 00:00:00 2001 From: Chebrolu Harika Date: Thu, 4 Aug 2022 16:01:39 +0530 Subject: [PATCH 5/6] Added testcase for multids --- cypress/tests/bucket-policy.spec.ts | 6 ++- cypress/tests/data-source.spec.ts | 30 ++++++++++--- cypress/views/bucket-policy.ts | 65 +++++++++++++++-------------- cypress/views/data-resource.ts | 4 +- 4 files changed, 63 insertions(+), 42 deletions(-) diff --git a/cypress/tests/bucket-policy.spec.ts b/cypress/tests/bucket-policy.spec.ts index e5a885e..88d8262 100644 --- a/cypress/tests/bucket-policy.spec.ts +++ b/cypress/tests/bucket-policy.spec.ts @@ -87,9 +87,11 @@ describe('Bucket policy creation with single data source and enabled cache', () cy.logout(); }); - it('creates Bucket policy with single data source and enabled cache', () => { - BPCommon.createUsingSingleDS(SINGLE_BUCKET_POLICY_WITH_CACHE, TEST_DATA_SOURCE); + BPCommon.createUsingSingleDS( + SINGLE_BUCKET_POLICY_WITH_CACHE, + TEST_DATA_SOURCE + ); cy.log('Enable Cache'); cy.byTestID('enable-cache-checkbox').should('be.visible').check(); BPCommon.confirmCreateBucket(); diff --git a/cypress/tests/data-source.spec.ts b/cypress/tests/data-source.spec.ts index c55127e..681014e 100644 --- a/cypress/tests/data-source.spec.ts +++ b/cypress/tests/data-source.spec.ts @@ -37,23 +37,39 @@ describe('data source creation', () => { }); it('creates a data source having AWS as the provider', () => { - createDataSource(Providers.AWS, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); + createDataSource( + Providers.AWS, + TEST_DATA_SOURCE, + DATA_SOURCE_INPUTS.targetBucket + ); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); cy.byTestID(`status-text`).should('contain', 'Ready'); }); it('creates a data source having S3 Compatible as the provider', () => { - createDataSource(Providers.S3, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); + createDataSource( + Providers.S3, + TEST_DATA_SOURCE, + DATA_SOURCE_INPUTS.targetBucket + ); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); }); it('creates a data source having Azure Blob as the provider', () => { - createDataSource(Providers.AZURE, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); + createDataSource( + Providers.AZURE, + TEST_DATA_SOURCE, + DATA_SOURCE_INPUTS.targetBucket + ); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); }); it('creates a data source having IBM COS as the provider', () => { - createDataSource(Providers.IBM, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); + createDataSource( + Providers.IBM, + TEST_DATA_SOURCE, + DATA_SOURCE_INPUTS.targetBucket + ); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE); }); }); @@ -67,7 +83,11 @@ describe('data source deletion', () => { MCGMSCommon.visitDataSourceListPage(); navigateToCreatePage(); app.waitForLoad(); - createDataSource(Providers.AWS, TEST_DATA_SOURCE, DATA_SOURCE_INPUTS.targetBucket); + createDataSource( + Providers.AWS, + TEST_DATA_SOURCE, + DATA_SOURCE_INPUTS.targetBucket + ); checkDataSourceCreation(TEST_DATA_SOURCE, DATA_FEDERATION_NAMESPACE, false); }); diff --git a/cypress/views/bucket-policy.ts b/cypress/views/bucket-policy.ts index d63dbbd..fc381f8 100644 --- a/cypress/views/bucket-policy.ts +++ b/cypress/views/bucket-policy.ts @@ -1,12 +1,13 @@ import { DATA_FEDERATION_NAMESPACE } from '../constants/common'; -import { DATA_SOURCE_INPUTS, Providers, TEST_DATA_SOURCE } from '../constants/tests'; +import { + DATA_SOURCE_INPUTS, + Providers, + TEST_DATA_SOURCE, +} from '../constants/tests'; import { createDataSource } from './data-resource'; export const BPCommon = { - createUsingSingleDS: ( - bucketName: string, - dataSourceName: string - ) => { + createUsingSingleDS: (bucketName: string, dataSourceName: string) => { cy.log(`creating bucket ${bucketName}`); cy.byTestID('item-create').click(); cy.log(`entering bucket name as ${bucketName}`); @@ -17,8 +18,12 @@ export const BPCommon = { .first() .click(); cy.log(`Creating new data source`); - cy.byTestID('add-data-source-item').click() - createDataSource(Providers.AWS, dataSourceName, DATA_SOURCE_INPUTS.targetBucket); + cy.byTestID('add-data-source-item').click(); + createDataSource( + Providers.AWS, + dataSourceName, + DATA_SOURCE_INPUTS.targetBucket + ); cy.byTestID('ready-action-finish').click(); cy.byTestID('read-write-dropdown') .should('be.visible') @@ -34,42 +39,38 @@ export const BPCommon = { cy.log('Create bucket policy'); cy.byTestID('confirm-action-bucket').click(); }, - createUsingMultiDS: ( - bucketName: string, - dataSourceName: string - ) => { + createUsingMultiDS: (bucketName: string, dataSourceName: string) => { cy.log(`creating bucket ${bucketName}`); cy.byTestID('item-create').click(); cy.log(`entering bucket name as ${bucketName}`); cy.byTestID('bucket-name-text').type(bucketName); - cy.byTestID('multi-data-source-radio-button') - .click(); + cy.byTestID('multi-data-source-radio-button').click(); cy.byTestID('read-dropdown').click(); cy.log(`Configuring a data source to read`); cy.byTestID('data-source-selection-item').click(); cy.byTestID('add-data-source-item').click(); - createDataSource(Providers.AWS, dataSourceName, DATA_SOURCE_INPUTS.targetBucket); + createDataSource( + Providers.AWS, + dataSourceName, + DATA_SOURCE_INPUTS.targetBucket + ); cy.byTestID('ready-action-finish').click(); - cy.byTestID('read-dropdown') - .should('be.visible') - .first() - .click(); - cy.byTestID('data-source-selection-item').find('li').byTestID(`${dataSourceName}-dropdown-item`).find('input[type=checkbox]').check(); - cy.byTestID('read-dropdown') - .first() - .click(); + cy.byTestID('read-dropdown').should('be.visible').first().click(); + cy.byTestID('data-source-selection-item') + .find('li') + .byTestID(`${dataSourceName}-dropdown-item`) + .find('input[type=checkbox]') + .check(); + cy.byTestID('read-dropdown').first().click(); cy.byTestID('write-dropdown').find('button').click(); cy.log(`Configuring a data source to write`); - cy.byTestID('data-source-selection-item').find('li').byTestID(`${dataSourceName}-dropdown-item`).click(); - cy.byTestID('write-dropdown') - .should('be.visible') - .first() + cy.byTestID('data-source-selection-item') + .find('li') + .byTestID(`${dataSourceName}-dropdown-item`) .click(); + cy.byTestID('write-dropdown').should('be.visible').first().click(); }, - checkBucketCreation: ( - bucketName: string, - dataSourceName: string - ) => { + checkBucketCreation: (bucketName: string, dataSourceName: string) => { cy.log('Verify bucket policy created'); cy.byTestSelector('details-item-value__Name').should('contain', bucketName); cy.log('Verify bucket policy is Ready'); @@ -93,5 +94,5 @@ export const BPCommon = { cy.byTestID('details-actions').find('li').last().click(); cy.byTestID('delete-action').click(); cy.byTestID(bucketName).should('not.exist'); - } -} + }, +}; diff --git a/cypress/views/data-resource.ts b/cypress/views/data-resource.ts index cc83862..8ed10d8 100644 --- a/cypress/views/data-resource.ts +++ b/cypress/views/data-resource.ts @@ -1,9 +1,7 @@ import { MINUTE, SECOND } from '../constants/common'; import { DATA_SOURCE_INPUTS, Providers } from '../constants/tests'; -const inputCustomSecrets = ( - targetBucket: string -) => { +const inputCustomSecrets = (targetBucket: string) => { const { accessKey, secretKey } = DATA_SOURCE_INPUTS; cy.log('setting up custom secret for the resource'); cy.byTestID('switch-to-credentials').click(); From 49711d150831e8e8f5bc26d59ee6dd273afe7e64 Mon Sep 17 00:00:00 2001 From: Chebrolu Harika Date: Thu, 4 Aug 2022 16:32:48 +0530 Subject: [PATCH 6/6] Added testcase for multids --- cypress/tests/bucket-policy.spec.ts | 7 +++++-- cypress/views/bucket-policy.ts | 27 +++++++++++++++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/cypress/tests/bucket-policy.spec.ts b/cypress/tests/bucket-policy.spec.ts index 88d8262..ecb6c7f 100644 --- a/cypress/tests/bucket-policy.spec.ts +++ b/cypress/tests/bucket-policy.spec.ts @@ -55,7 +55,10 @@ describe('Bucket policy creation of nsfs type', () => { dataSourceNSFS(DATA_SOURCE_NAME_NSFS, PVC_NAME, 'e2e-subPath') )}' | oc create -f -` ).then(() => { - BPCommon.createUsingSingleDS(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS); + BPCommon.createUsingSingleDSAndExistingDataSource( + SINGLE_BUCKET_POLICY, + DATA_SOURCE_NAME_NSFS + ); BPCommon.confirmCreateBucket(); BPCommon.checkBucketCreation(SINGLE_BUCKET_POLICY, DATA_SOURCE_NAME_NSFS); }); @@ -88,7 +91,7 @@ describe('Bucket policy creation with single data source and enabled cache', () }); it('creates Bucket policy with single data source and enabled cache', () => { - BPCommon.createUsingSingleDS( + BPCommon.createUsingSingleDSAndNewDataSource( SINGLE_BUCKET_POLICY_WITH_CACHE, TEST_DATA_SOURCE ); diff --git a/cypress/views/bucket-policy.ts b/cypress/views/bucket-policy.ts index fc381f8..44484de 100644 --- a/cypress/views/bucket-policy.ts +++ b/cypress/views/bucket-policy.ts @@ -1,13 +1,28 @@ import { DATA_FEDERATION_NAMESPACE } from '../constants/common'; -import { - DATA_SOURCE_INPUTS, - Providers, - TEST_DATA_SOURCE, -} from '../constants/tests'; +import { DATA_SOURCE_INPUTS, Providers } from '../constants/tests'; import { createDataSource } from './data-resource'; export const BPCommon = { - createUsingSingleDS: (bucketName: string, dataSourceName: string) => { + createUsingSingleDSAndExistingDataSource: ( + bucketName: string, + dataSourceName: string + ) => { + cy.log(`creating bucket ${bucketName}`); + cy.byTestID('item-create').click(); + cy.log(`entering bucket name as ${bucketName}`); + cy.byTestID('bucket-name-text').type(bucketName); + cy.byTestID('read-write-dropdown') + .should('be.visible') + .find('button') + .first() + .click(); + cy.log(`Creating new data source`); + cy.contains(dataSourceName).click(); + }, + createUsingSingleDSAndNewDataSource: ( + bucketName: string, + dataSourceName: string + ) => { cy.log(`creating bucket ${bucketName}`); cy.byTestID('item-create').click(); cy.log(`entering bucket name as ${bucketName}`);