]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Refactoring dashboard cephadm checks 44652/head
authorNizamudeen A <nia@redhat.com>
Thu, 13 Jan 2022 12:58:56 +0000 (18:28 +0530)
committerNizamudeen A <nia@redhat.com>
Wed, 19 Jan 2022 07:34:19 +0000 (13:04 +0530)
I isolated all the tests suites into there respective files
so that in future it is easier to add more tests to it.

I also given priority to the host actions.

Create OSD checks are now written in a way that OSDs
are created only on the intended hosts. This will make
the host draining process easier and less time consuming.

Also tried to address the flaky force maintenance checks.

Removed some duplicated codes

Service creation part improved to reduce the time taken
for its completion

Fixes: https://tracker.ceph.com/issues/53905
Signed-off-by: Nizamudeen A <nia@redhat.com>
(cherry picked from commit b6759b75c9fc4d3fb565201aa6bbe0c2473fd3d4)

15 files changed:
src/pybind/mgr/dashboard/ci/cephadm/ceph_cluster.yml
src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/create-cluster.po.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.po.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.po.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/services.po.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/02-create-cluster-add-host.e2e-spec.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/03-create-cluster-create-services.e2e-spec.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/04-create-cluster-create-osds.e2e-spec.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/06-cluster-check.e2e-spec.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-nfs-exports.e2e-spec.ts [deleted file]
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts [new file with mode: 0644]
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts [new file with mode: 0644]
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts [new file with mode: 0644]
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts [new file with mode: 0644]
src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.html

index 894d5d086eae552edd7674b626a0848d5801e63a..bdd84b7f1cdb33d2368c45093a5ba6d6e12fd17f 100755 (executable)
@@ -12,6 +12,7 @@ parameters:
  disks:
  - 15
  - 5
+ - 5
 
 {% for number in range(0, nodes) %}
 {{ prefix }}-node-0{{ number }}:
index 52be703af28eb61ec60c45f6585d71dced6f6f30..819afd559b1298529d5c81b98650479a5a9e50cb 100644 (file)
@@ -24,20 +24,6 @@ export class CreateClusterWizardHelper extends PageHelper {
     notification.open();
     notification.getNotifications().should('contain', 'Cluster expansion skipped by user');
   }
-
-  createOSD(deviceType: 'hdd' | 'ssd') {
-    // Click Primary devices Add button
-    cy.get('cd-osd-devices-selection-groups[name="Primary"]').as('primaryGroups');
-    cy.get('@primaryGroups').find('button').click();
-
-    // Select all devices with `deviceType`
-    cy.get('cd-osd-devices-selection-modal').within(() => {
-      cy.get('.modal-footer .tc_submitButton').as('addButton').should('be.disabled');
-      this.filterTable('Type', deviceType);
-      this.getTableCount('total').should('be.gte', 1);
-      cy.get('@addButton').click();
-    });
-  }
 }
 
 export class CreateClusterHostPageHelper extends HostsPageHelper {
index f2be649ae5fec6c40f5b1a141d0c438902aa15c6..ffac83ba67bfc5553db1a3db35f9410001b2f44d 100644 (file)
@@ -131,7 +131,9 @@ export class HostsPageHelper extends PageHelper {
       this.getTableCell(this.columnIndex.hostname, hostname).click();
       this.clickActionButton('enter-maintenance');
 
-      cy.contains('cd-modal button', 'Continue').click();
+      cy.get('cd-modal').within(() => {
+        cy.contains('button', 'Continue').click();
+      });
 
       this.getTableCell(this.columnIndex.hostname, hostname)
         .parent()
@@ -182,7 +184,7 @@ export class HostsPageHelper extends PageHelper {
 
     this.clickTab('cd-host-details', hostname, 'Daemons');
     cy.get('cd-host-details').within(() => {
-      cy.wait(10000);
+      cy.wait(20000);
       this.expectTableCount('total', 0);
     });
   }
index 862c7c6011d4b52fd017824b7cbcce6302f96385..d388a3c5ba6e6439306aca9c5f4a1c454aef3cf7 100644 (file)
@@ -13,8 +13,7 @@ export class OSDsPageHelper extends PageHelper {
     status: 5
   };
 
-  @PageHelper.restrictTo(pages.create.url)
-  create(deviceType: 'hdd' | 'ssd') {
+  create(deviceType: 'hdd' | 'ssd', hostname?: string, expandCluster = false) {
     // Click Primary devices Add button
     cy.get('cd-osd-devices-selection-groups[name="Primary"]').as('primaryGroups');
     cy.get('@primaryGroups').find('button').click();
@@ -23,15 +22,24 @@ export class OSDsPageHelper extends PageHelper {
     cy.get('cd-osd-devices-selection-modal').within(() => {
       cy.get('.modal-footer .tc_submitButton').as('addButton').should('be.disabled');
       this.filterTable('Type', deviceType);
+      if (hostname) {
+        this.filterTable('Hostname', hostname);
+      }
+
+      if (expandCluster) {
+        this.getTableCount('total').should('be.gte', 1);
+      }
       cy.get('@addButton').click();
     });
 
-    cy.get('@primaryGroups').within(() => {
-      this.getTableCount('total').as('newOSDCount');
-    });
+    if (!expandCluster) {
+      cy.get('@primaryGroups').within(() => {
+        this.getTableCount('total').as('newOSDCount');
+      });
 
-    cy.get(`${pages.create.id} .card-footer .tc_submitButton`).click();
-    cy.get(`cd-osd-creation-preview-modal .modal-footer .tc_submitButton`).click();
+      cy.get(`${pages.create.id} .card-footer .tc_submitButton`).click();
+      cy.get(`cd-osd-creation-preview-modal .modal-footer .tc_submitButton`).click();
+    }
   }
 
   @PageHelper.restrictTo(pages.index.url)
index 2d1969b75bd0aa0f0235d9f1cb60e0675a3734d5..07bd3b58b8b7ef01116effcc4992fe9311117641 100644 (file)
@@ -49,7 +49,7 @@ export class ServicesPageHelper extends PageHelper {
         case 'ingress':
           this.selectOption('backend_service', 'rgw.foo');
           cy.get('#service_id').should('have.value', 'rgw.foo');
-          cy.get('#virtual_ip').type('192.168.20.1/24');
+          cy.get('#virtual_ip').type('192.168.100.1/24');
           cy.get('#frontend_port').type('8081');
           cy.get('#monitor_port').type('8082');
           break;
@@ -58,6 +58,11 @@ export class ServicesPageHelper extends PageHelper {
           cy.get('#service_id').type('testnfs');
           cy.get('#count').type(count);
           break;
+
+        default:
+          cy.get('#service_id').type('test');
+          cy.get('#count').type(count);
+          break;
       }
 
       cy.get('cd-submit-button').click();
index 0310e473ec2395a6dc3fe4fd71556bcf09929747..02b61167de3bbf1fe313c6becdac21e2733f7668 100644 (file)
@@ -13,7 +13,7 @@ describe('Create cluster add host page', () => {
     'ceph-node-[01-03].cephlab.com'
   ];
   const addHost = (hostname: string, exist?: boolean, pattern?: boolean, labels: string[] = []) => {
-    cy.get('.btn.btn-accent').first().click({ force: true });
+    cy.get('button[data-testid=table-action-button]').click();
     createClusterHostPage.add(hostname, exist, false, labels);
     if (!pattern) {
       createClusterHostPage.checkExist(hostname, true);
index e1b33fea34f76dcebea429df80aa91de4832d869..d52c7d53864c24f5801972b89a779f946a081f00 100644 (file)
@@ -7,8 +7,8 @@ describe('Create cluster create services page', () => {
   const createCluster = new CreateClusterWizardHelper();
   const createClusterServicePage = new CreateClusterServicePageHelper();
 
-  const createService = (serviceType: string, serviceName: string, count?: string) => {
-    cy.get('.btn.btn-accent').first().click({ force: true });
+  const createService = (serviceType: string, serviceName: string, count = '1') => {
+    cy.get('button[data-testid=table-action-button]').click();
     createClusterServicePage.addService(serviceType, false, count);
     createClusterServicePage.checkExist(serviceName, true);
   };
@@ -28,14 +28,9 @@ describe('Create cluster create services page', () => {
   describe('when Orchestrator is available', () => {
     const serviceName = 'rgw.foo';
 
-    it('should create an rgw service', () => {
-      createService('rgw', serviceName, '2');
-    });
-
-    it('should delete the service and add it back', () => {
-      createClusterServicePage.deleteService(serviceName);
-
+    it('should create an rgw and mds service', () => {
       createService('rgw', serviceName, '2');
+      createService('mds', 'mds.test');
     });
 
     it('should edit a service', () => {
@@ -44,8 +39,8 @@ describe('Create cluster create services page', () => {
       createClusterServicePage.expectPlacementCount(serviceName, daemonCount);
     });
 
-    it('should create an ingress service', () => {
-      createService('ingress', 'ingress.rgw.foo', '2');
+    it('should delete the mds service', () => {
+      createClusterServicePage.deleteService('mds.test');
     });
   });
 });
index c8d93b4796230a2b55e11bff0b2957127a590db7..268cf0ad78626b30cff0b872691087114714e464 100644 (file)
@@ -20,21 +20,24 @@ describe('Create cluster create osds page', () => {
 
   describe('when Orchestrator is available', () => {
     it('should create OSDs', () => {
-      osds.navigateTo();
-      osds.getTableCount('total').as('initOSDCount');
-
-      createCluster.navigateTo();
-      createCluster.createCluster();
-      cy.get('.nav-link').contains('Create OSDs').click();
-
-      createCluster.createOSD('hdd');
-
-      // Go to the Review section and Expand the cluster
-      // because the drive group spec is only stored
-      // in frontend and will be lost when refreshed
-      cy.get('.nav-link').contains('Review').click();
-      cy.get('button[aria-label="Next"]').click();
-      cy.get('cd-dashboard').should('exist');
+      const hostnames = [
+        'ceph-node-00.cephlab.com',
+        'ceph-node-02.cephlab.com',
+        'ceph-node-03.cephlab.com'
+      ];
+      for (const hostname of hostnames) {
+        osds.create('hdd', hostname, true);
+
+        // Go to the Review section and Expand the cluster
+        // because the drive group spec is only stored
+        // in frontend and will be lost when refreshed
+        cy.get('.nav-link').contains('Review').click();
+        cy.get('button[aria-label="Next"]').click();
+        cy.get('cd-dashboard').should('exist');
+        createCluster.navigateTo();
+        createCluster.createCluster();
+        cy.get('.nav-link').contains('Create OSDs').click();
+      }
     });
   });
 });
index ff6017559f2e6ff9013a5bbdecb06696000fedc4..531a31b339d30e767de7c12773cb83676af82a7a 100644 (file)
@@ -1,6 +1,5 @@
 import { CreateClusterWizardHelper } from 'cypress/integration/cluster/create-cluster.po';
 import { HostsPageHelper } from 'cypress/integration/cluster/hosts.po';
-import { OSDsPageHelper } from 'cypress/integration/cluster/osds.po';
 import { ServicesPageHelper } from 'cypress/integration/cluster/services.po';
 
 describe('when cluster creation is completed', () => {
@@ -8,7 +7,6 @@ describe('when cluster creation is completed', () => {
   const services = new ServicesPageHelper();
   const hosts = new HostsPageHelper();
 
-  const serviceName = 'rgw.foo';
   const hostnames = [
     'ceph-node-00.cephlab.com',
     'ceph-node-01.cephlab.com',
@@ -64,51 +62,4 @@ describe('when cluster creation is completed', () => {
       }
     });
   });
-
-  describe('OSDs page', () => {
-    const osds = new OSDsPageHelper();
-
-    beforeEach(() => {
-      osds.navigateTo();
-    });
-
-    it('should check if osds are created', { retries: 1 }, () => {
-      osds.getTableCount('total').should('be.gte', 2);
-    });
-  });
-
-  describe('Services page', () => {
-    beforeEach(() => {
-      services.navigateTo();
-    });
-
-    it('should check if services are created', () => {
-      services.checkExist(serviceName, true);
-    });
-  });
-
-  describe('Host actions', () => {
-    beforeEach(() => {
-      hosts.navigateTo();
-    });
-
-    it('should check if rgw daemon is running', () => {
-      hosts.clickTab('cd-host-details', hostnames[3], 'Daemons');
-      cy.get('cd-host-details').within(() => {
-        services.checkServiceStatus('rgw');
-      });
-    });
-
-    it('should force maintenance and exit', { retries: 1 }, () => {
-      hosts.maintenance(hostnames[3], true, true);
-    });
-
-    it('should drain, remove and add the host back', () => {
-      hosts.drain(hostnames[1]);
-      hosts.remove(hostnames[1]);
-      hosts.navigateTo('add');
-      hosts.add(hostnames[1]);
-      hosts.checkExist(hostnames[1], true);
-    });
-  });
 });
diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-nfs-exports.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-nfs-exports.e2e-spec.ts
deleted file mode 100644 (file)
index 2d92075..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-import { ServicesPageHelper } from 'cypress/integration/cluster/services.po';
-import { NFSPageHelper } from 'cypress/integration/orchestrator/workflow/nfs/nfs-export.po';
-import { BucketsPageHelper } from 'cypress/integration/rgw/buckets.po';
-
-describe('nfsExport page', () => {
-  const nfsExport = new NFSPageHelper();
-  const services = new ServicesPageHelper();
-  const buckets = new BucketsPageHelper();
-  const bucketName = 'e2e.nfs.bucket';
-  // @TODO: uncomment this when a CephFS volume can be created through Dashboard.
-  // const fsPseudo = '/fsPseudo';
-  const rgwPseudo = '/rgwPseudo';
-  const editPseudo = '/editPseudo';
-  const backends = ['CephFS', 'Object Gateway'];
-  const squash = 'no_root_squash';
-  const client: object = { addresses: '192.168.0.10' };
-
-  beforeEach(() => {
-    cy.login();
-    Cypress.Cookies.preserveOnce('token');
-    nfsExport.navigateTo();
-  });
-
-  describe('breadcrumb test', () => {
-    it('should open and show breadcrumb', () => {
-      nfsExport.expectBreadcrumbText('NFS');
-    });
-  });
-
-  describe('Create, edit and delete', () => {
-    it('should create an NFS cluster', () => {
-      services.navigateTo('create');
-
-      services.addService('nfs');
-
-      services.checkExist('nfs.testnfs', true);
-      services.getExpandCollapseElement().click();
-      services.checkServiceStatus('nfs');
-    });
-
-    it('should create a nfs-export with RGW backend', () => {
-      buckets.navigateTo('create');
-      buckets.create(bucketName, 'dashboard', 'default-placement');
-
-      nfsExport.navigateTo();
-      nfsExport.existTableCell(rgwPseudo, false);
-      nfsExport.navigateTo('create');
-      nfsExport.create(backends[1], squash, client, rgwPseudo, bucketName);
-      nfsExport.existTableCell(rgwPseudo);
-    });
-
-    // @TODO: uncomment this when a CephFS volume can be created through Dashboard.
-    // it('should create a nfs-export with CephFS backend', () => {
-    //   nfsExport.navigateTo();
-    //   nfsExport.existTableCell(fsPseudo, false);
-    //   nfsExport.navigateTo('create');
-    //   nfsExport.create(backends[0], squash, client, fsPseudo);
-    //   nfsExport.existTableCell(fsPseudo);
-    // });
-
-    it('should show Clients', () => {
-      nfsExport.clickTab('cd-nfs-details', rgwPseudo, 'Clients (1)');
-      cy.get('cd-nfs-details').within(() => {
-        nfsExport.getTableCount('total').should('be.gte', 0);
-      });
-    });
-
-    it('should edit an export', () => {
-      nfsExport.editExport(rgwPseudo, editPseudo);
-
-      nfsExport.existTableCell(editPseudo);
-    });
-
-    it('should delete exports and bucket', () => {
-      nfsExport.delete(editPseudo);
-
-      buckets.navigateTo();
-      buckets.delete(bucketName);
-    });
-  });
-});
diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts
new file mode 100644 (file)
index 0000000..90db146
--- /dev/null
@@ -0,0 +1,22 @@
+import { OSDsPageHelper } from 'cypress/integration/cluster/osds.po';
+
+describe('OSDs page', () => {
+  const osds = new OSDsPageHelper();
+
+  beforeEach(() => {
+    cy.login();
+    Cypress.Cookies.preserveOnce('token');
+    osds.navigateTo();
+  });
+
+  it('should check if atleast 3 osds are created', { retries: 3 }, () => {
+    // we have created a total of more than 3 osds throughout
+    // the whole tests so ensuring that atleast
+    // 3 osds are listed in the table. Since the OSD
+    // creation can take more time going with
+    // retry of 3
+    for (let id = 0; id < 3; id++) {
+      osds.checkStatus(id, ['in', 'up']);
+    }
+  });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts
new file mode 100644 (file)
index 0000000..9423215
--- /dev/null
@@ -0,0 +1,42 @@
+import { HostsPageHelper } from 'cypress/integration/cluster/hosts.po';
+import { ServicesPageHelper } from 'cypress/integration/cluster/services.po';
+
+describe('Host Page', () => {
+  const hosts = new HostsPageHelper();
+  const services = new ServicesPageHelper();
+
+  const hostnames = [
+    'ceph-node-00.cephlab.com',
+    'ceph-node-01.cephlab.com',
+    'ceph-node-02.cephlab.com',
+    'ceph-node-03.cephlab.com'
+  ];
+
+  beforeEach(() => {
+    cy.login();
+    Cypress.Cookies.preserveOnce('token');
+    hosts.navigateTo();
+  });
+
+  // rgw is needed for testing the force maintenance
+  it('should check if rgw daemon is running on all hosts', () => {
+    for (const hostname of hostnames) {
+      hosts.clickTab('cd-host-details', hostname, 'Daemons');
+      cy.get('cd-host-details').within(() => {
+        services.checkServiceStatus('rgw');
+      });
+    }
+  });
+
+  it('should force maintenance and exit', { retries: 2 }, () => {
+    hosts.maintenance(hostnames[1], true, true);
+  });
+
+  it('should drain, remove and add the host back', () => {
+    hosts.drain(hostnames[1]);
+    hosts.remove(hostnames[1]);
+    hosts.navigateTo('add');
+    hosts.add(hostnames[1]);
+    hosts.checkExist(hostnames[1], true);
+  });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts
new file mode 100644 (file)
index 0000000..9b49c75
--- /dev/null
@@ -0,0 +1,27 @@
+import { ServicesPageHelper } from 'cypress/integration/cluster/services.po';
+
+describe('Services page', () => {
+  const services = new ServicesPageHelper();
+  beforeEach(() => {
+    cy.login();
+    Cypress.Cookies.preserveOnce('token');
+    services.navigateTo();
+  });
+
+  it('should check if rgw service is created', () => {
+    services.checkExist('rgw.foo', true);
+  });
+
+  it('should create and delete an mds service', () => {
+    services.navigateTo('create');
+    services.addService('mds', false);
+    services.checkExist('mds.test', true);
+
+    services.clickServiceTab('mds.test', 'Details');
+    cy.get('cd-service-details').within(() => {
+      services.checkServiceStatus('mds');
+    });
+
+    services.deleteService('mds.test');
+  });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts
new file mode 100644 (file)
index 0000000..2d92075
--- /dev/null
@@ -0,0 +1,81 @@
+import { ServicesPageHelper } from 'cypress/integration/cluster/services.po';
+import { NFSPageHelper } from 'cypress/integration/orchestrator/workflow/nfs/nfs-export.po';
+import { BucketsPageHelper } from 'cypress/integration/rgw/buckets.po';
+
+describe('nfsExport page', () => {
+  const nfsExport = new NFSPageHelper();
+  const services = new ServicesPageHelper();
+  const buckets = new BucketsPageHelper();
+  const bucketName = 'e2e.nfs.bucket';
+  // @TODO: uncomment this when a CephFS volume can be created through Dashboard.
+  // const fsPseudo = '/fsPseudo';
+  const rgwPseudo = '/rgwPseudo';
+  const editPseudo = '/editPseudo';
+  const backends = ['CephFS', 'Object Gateway'];
+  const squash = 'no_root_squash';
+  const client: object = { addresses: '192.168.0.10' };
+
+  beforeEach(() => {
+    cy.login();
+    Cypress.Cookies.preserveOnce('token');
+    nfsExport.navigateTo();
+  });
+
+  describe('breadcrumb test', () => {
+    it('should open and show breadcrumb', () => {
+      nfsExport.expectBreadcrumbText('NFS');
+    });
+  });
+
+  describe('Create, edit and delete', () => {
+    it('should create an NFS cluster', () => {
+      services.navigateTo('create');
+
+      services.addService('nfs');
+
+      services.checkExist('nfs.testnfs', true);
+      services.getExpandCollapseElement().click();
+      services.checkServiceStatus('nfs');
+    });
+
+    it('should create a nfs-export with RGW backend', () => {
+      buckets.navigateTo('create');
+      buckets.create(bucketName, 'dashboard', 'default-placement');
+
+      nfsExport.navigateTo();
+      nfsExport.existTableCell(rgwPseudo, false);
+      nfsExport.navigateTo('create');
+      nfsExport.create(backends[1], squash, client, rgwPseudo, bucketName);
+      nfsExport.existTableCell(rgwPseudo);
+    });
+
+    // @TODO: uncomment this when a CephFS volume can be created through Dashboard.
+    // it('should create a nfs-export with CephFS backend', () => {
+    //   nfsExport.navigateTo();
+    //   nfsExport.existTableCell(fsPseudo, false);
+    //   nfsExport.navigateTo('create');
+    //   nfsExport.create(backends[0], squash, client, fsPseudo);
+    //   nfsExport.existTableCell(fsPseudo);
+    // });
+
+    it('should show Clients', () => {
+      nfsExport.clickTab('cd-nfs-details', rgwPseudo, 'Clients (1)');
+      cy.get('cd-nfs-details').within(() => {
+        nfsExport.getTableCount('total').should('be.gte', 0);
+      });
+    });
+
+    it('should edit an export', () => {
+      nfsExport.editExport(rgwPseudo, editPseudo);
+
+      nfsExport.existTableCell(editPseudo);
+    });
+
+    it('should delete exports and bucket', () => {
+      nfsExport.delete(editPseudo);
+
+      buckets.navigateTo();
+      buckets.delete(bucketName);
+    });
+  });
+});
index b60c9b1ddb42df8f3fa97b9bbf2e63f93dc47d67..9896d56206d256e1cc0f864da3a148644abedcb8 100644 (file)
@@ -6,6 +6,7 @@
             [ngClass]="{'disabled': disableSelectionAction(currentAction)}"
             (click)="useClickAction(currentAction)"
             [routerLink]="useRouterLink(currentAction)"
+            data-testid="table-action-button"
             [preserveFragment]="currentAction.preserveFragment ? '' : null">
       <i [ngClass]="[currentAction.icon]"></i>
       <span>{{ currentAction.name }}</span>