summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/frontend/e2e
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/e2e')
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts34
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/block/images.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts34
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts36
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts36
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.po.ts9
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts36
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/helper.po.ts48
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts24
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts36
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts7
-rw-r--r--src/pybind/mgr/dashboard/frontend/e2e/tsconfig.e2e.json15
28 files changed, 536 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts
new file mode 100644
index 00000000..10d71fcc
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts
@@ -0,0 +1,34 @@
+import { Helper } from '../helper.po';
+import { ImagesPage } from './images.po';
+
+describe('Images page', () => {
+ let page: ImagesPage;
+
+ beforeAll(() => {
+ page = new ImagesPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb and tab tests', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Images');
+ });
+
+ it('should show three tabs', () => {
+ expect(Helper.getTabsCount()).toEqual(3);
+ });
+
+ it('should show text for all tabs', () => {
+ expect(Helper.getTabText(0)).toEqual('Images');
+ expect(Helper.getTabText(1)).toEqual('Trash');
+ expect(Helper.getTabText(2)).toEqual('Overall Performance');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/images.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/images.po.ts
new file mode 100644
index 00000000..b3fb2f1e
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/block/images.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class ImagesPage {
+ navigateTo() {
+ return browser.get('/#/block/rbd');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts
new file mode 100644
index 00000000..82d1d482
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { IscsiPage } from './iscsi.po';
+
+describe('Iscsi Page', () => {
+ let page: IscsiPage;
+
+ beforeAll(() => {
+ page = new IscsiPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Overview');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.po.ts
new file mode 100644
index 00000000..79eb94c4
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class IscsiPage {
+ navigateTo() {
+ return browser.get('/#/block/iscsi');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts
new file mode 100644
index 00000000..e15cb53e
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts
@@ -0,0 +1,34 @@
+import { Helper } from '../helper.po';
+import { MirroringPage } from './mirroring.po';
+
+describe('Mirroring page', () => {
+ let page: MirroringPage;
+
+ beforeAll(() => {
+ page = new MirroringPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb and tab tests', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Mirroring');
+ });
+
+ it('should show three tabs', () => {
+ expect(Helper.getTabsCount()).toEqual(3);
+ });
+
+ it('should show text for all tabs', () => {
+ expect(Helper.getTabText(0)).toEqual('Issues');
+ expect(Helper.getTabText(1)).toEqual('Syncing');
+ expect(Helper.getTabText(2)).toEqual('Ready');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.po.ts
new file mode 100644
index 00000000..f4a8baeb
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class MirroringPage {
+ navigateTo() {
+ return browser.get('/#/block/mirroring');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts
new file mode 100644
index 00000000..e8cc7113
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { ConfigurationPage } from './configuration.po';
+
+describe('Configuration page', () => {
+ let page: ConfigurationPage;
+
+ beforeAll(() => {
+ page = new ConfigurationPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Configuration');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts
new file mode 100644
index 00000000..b23a078a
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class ConfigurationPage {
+ navigateTo() {
+ return browser.get('/#/configuration');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts
new file mode 100644
index 00000000..2c1b004b
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { CrushMapPage } from './crush-map.po';
+
+describe('CRUSH map page', () => {
+ let page: CrushMapPage;
+
+ beforeAll(() => {
+ page = new CrushMapPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'CRUSH map');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.po.ts
new file mode 100644
index 00000000..e4d54c61
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class CrushMapPage {
+ navigateTo() {
+ return browser.get('/#/crush-map');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts
new file mode 100644
index 00000000..f0b8a0e2
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts
@@ -0,0 +1,36 @@
+import { Helper } from '../helper.po';
+import { HostsPage } from './hosts.po';
+
+describe('Hosts page', () => {
+ let page: HostsPage;
+
+ beforeAll(() => {
+ page = new HostsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb and tab tests', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Hosts');
+ });
+
+ it('should show two tabs', () => {
+ expect(Helper.getTabsCount()).toEqual(2);
+ });
+
+ it('should show hosts list tab at first', () => {
+ expect(Helper.getTabText(0)).toEqual('Hosts List');
+ });
+
+ it('should show overall performance as a second tab', () => {
+ expect(Helper.getTabText(1)).toEqual('Overall Performance');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts
new file mode 100644
index 00000000..6a90ef7f
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class HostsPage {
+ navigateTo() {
+ return browser.get('/#/hosts');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts
new file mode 100644
index 00000000..45076e66
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts
@@ -0,0 +1,36 @@
+import { Helper } from '../helper.po';
+import { LogsPage } from './logs.po';
+
+describe('Logs page', () => {
+ let page: LogsPage;
+
+ beforeAll(() => {
+ page = new LogsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb and tab tests', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Logs');
+ });
+
+ it('should show two tabs', () => {
+ expect(Helper.getTabsCount()).toEqual(2);
+ });
+
+ it('should show cluster logs tab at first', () => {
+ expect(Helper.getTabText(0)).toEqual('Cluster Logs');
+ });
+
+ it('should show audit logs as a second tab', () => {
+ expect(Helper.getTabText(1)).toEqual('Audit Logs');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.po.ts
new file mode 100644
index 00000000..14677945
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.po.ts
@@ -0,0 +1,9 @@
+import { browser } from 'protractor';
+
+browser.ignoreSynchronization = true;
+
+export class LogsPage {
+ navigateTo() {
+ return browser.get('/#/logs');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts
new file mode 100644
index 00000000..629b791f
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { ManagerModulesPage } from './mgr-modules.po';
+
+describe('Manager modules page', () => {
+ let page: ManagerModulesPage;
+
+ beforeAll(() => {
+ page = new ManagerModulesPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Manager modules');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.po.ts
new file mode 100644
index 00000000..208f3033
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class ManagerModulesPage {
+ navigateTo() {
+ return browser.get('/#/mgr-modules');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts
new file mode 100644
index 00000000..5b2676fa
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { MonitorsPage } from './monitors.po';
+
+describe('Monitors page', () => {
+ let page: MonitorsPage;
+
+ beforeAll(() => {
+ page = new MonitorsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Monitors');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.po.ts
new file mode 100644
index 00000000..53159d30
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class MonitorsPage {
+ navigateTo() {
+ return browser.get('/#/monitor');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts
new file mode 100644
index 00000000..61cb0c03
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts
@@ -0,0 +1,36 @@
+import { Helper } from '../helper.po';
+import { OSDsPage } from './osds.po';
+
+describe('OSDs page', () => {
+ let page: OSDsPage;
+
+ beforeAll(() => {
+ page = new OSDsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb and tab tests', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'OSDs');
+ });
+
+ it('should show two tabs', () => {
+ expect(Helper.getTabsCount()).toEqual(2);
+ });
+
+ it('should show OSDs list tab at first', () => {
+ expect(Helper.getTabText(0)).toEqual('OSDs List');
+ });
+
+ it('should show overall performance as a second tab', () => {
+ expect(Helper.getTabText(1)).toEqual('Overall Performance');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.po.ts
new file mode 100644
index 00000000..08e41438
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class OSDsPage {
+ navigateTo() {
+ return browser.get('/#/osd');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts
new file mode 100644
index 00000000..9c39a925
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { FilesystemsPage } from './filesystems.po';
+
+describe('Filesystems page', () => {
+ let page: FilesystemsPage;
+
+ beforeAll(() => {
+ page = new FilesystemsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Filesystems');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.po.ts
new file mode 100644
index 00000000..4f763814
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class FilesystemsPage {
+ navigateTo() {
+ return browser.get('/#/cephfs');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/helper.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/helper.po.ts
new file mode 100644
index 00000000..cd6b8f67
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/helper.po.ts
@@ -0,0 +1,48 @@
+import { $, $$, browser, ElementFinder } from 'protractor';
+
+export class Helper {
+ static EC = browser.ExpectedConditions;
+ static TIMEOUT = 10000;
+
+ /**
+ * Checks if there are any errors on the browser
+ *
+ * @static
+ * @memberof Helper
+ */
+ static checkConsole() {
+ browser
+ .manage()
+ .logs()
+ .get('browser')
+ .then(function(browserLog) {
+ browserLog = browserLog.filter((log) => {
+ return log.level.value > 900; // SEVERE level
+ });
+
+ if (browserLog.length > 0) {
+ console.log('\n log: ' + require('util').inspect(browserLog));
+ }
+
+ expect(browserLog.length).toEqual(0);
+ });
+ }
+
+ static getBreadcrumb() {
+ return $('.breadcrumb-item.active');
+ }
+
+ static getTabText(idx) {
+ return $$('.nav.nav-tabs li')
+ .get(idx)
+ .getText();
+ }
+
+ static getTabsCount() {
+ return $$('.nav.nav-tabs li').count();
+ }
+
+ static waitTextToBePresent(elem: ElementFinder, text: string, message?: string) {
+ return browser.wait(Helper.EC.textToBePresentInElement(elem, text), Helper.TIMEOUT, message);
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts
new file mode 100644
index 00000000..988737a6
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Helper } from '../helper.po';
+import { NfsPage } from './nfs.po';
+
+describe('Nfs page', () => {
+ let page: NfsPage;
+
+ beforeAll(() => {
+ page = new NfsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb test', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'NFS');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.po.ts
new file mode 100644
index 00000000..fe6f342e
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class NfsPage {
+ navigateTo() {
+ return browser.get('/#/nfs');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts
new file mode 100644
index 00000000..5d68b0fe
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts
@@ -0,0 +1,36 @@
+import { Helper } from '../helper.po';
+import { PoolsPage } from './pools.po';
+
+describe('Pools page', () => {
+ let page: PoolsPage;
+
+ beforeAll(() => {
+ page = new PoolsPage();
+ });
+
+ afterEach(() => {
+ Helper.checkConsole();
+ });
+
+ describe('breadcrumb and tab tests', () => {
+ beforeAll(() => {
+ page.navigateTo();
+ });
+
+ it('should open and show breadcrumb', () => {
+ Helper.waitTextToBePresent(Helper.getBreadcrumb(), 'Pools');
+ });
+
+ it('should show two tabs', () => {
+ expect(Helper.getTabsCount()).toEqual(2);
+ });
+
+ it('should show pools list tab at first', () => {
+ expect(Helper.getTabText(0)).toEqual('Pools List');
+ });
+
+ it('should show overall performance as a second tab', () => {
+ expect(Helper.getTabText(1)).toEqual('Overall Performance');
+ });
+ });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts
new file mode 100644
index 00000000..3682c671
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts
@@ -0,0 +1,7 @@
+import { browser } from 'protractor';
+
+export class PoolsPage {
+ navigateTo() {
+ return browser.get('/#/pool');
+ }
+}
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/tsconfig.e2e.json b/src/pybind/mgr/dashboard/frontend/e2e/tsconfig.e2e.json
new file mode 100644
index 00000000..e3d6ae76
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/e2e/tsconfig.e2e.json
@@ -0,0 +1,15 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/e2e",
+ "baseUrl": "./",
+ "module": "commonjs",
+ "target": "es5",
+ "types": [
+ "jasmine",
+ "jasminewd2",
+ "node"
+ ],
+ "noEmit": true
+ }
+}