diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/e2e')
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 + } +} |