disks:
- 15
- 5
+ - 5
{% for number in range(0, nodes) %}
{{ prefix }}-node-0{{ number }}:
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 {
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()
this.clickTab('cd-host-details', hostname, 'Daemons');
cy.get('cd-host-details').within(() => {
- cy.wait(10000);
+ cy.wait(20000);
this.expectTableCount('total', 0);
});
}
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();
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)
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;
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();
'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);
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);
};
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', () => {
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');
});
});
});
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();
+ }
});
});
});
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', () => {
const services = new ServicesPageHelper();
const hosts = new HostsPageHelper();
- const serviceName = 'rgw.foo';
const hostnames = [
'ceph-node-00.cephlab.com',
'ceph-node-01.cephlab.com',
}
});
});
-
- 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);
- });
- });
});
+++ /dev/null
-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);
- });
- });
-});
--- /dev/null
+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']);
+ }
+ });
+});
--- /dev/null
+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);
+ });
+});
--- /dev/null
+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');
+ });
+});
--- /dev/null
+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);
+ });
+ });
+});
[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>