From 725ec5d6b079f378ca8073276fcc51f4bfcd2b27 Mon Sep 17 00:00:00 2001 From: Ajas Date: Sun, 2 Jun 2024 18:25:31 +0530 Subject: [PATCH 01/10] Add and Completed Netdata Test --- .env.sample | 3 -- tests/auth.setup.js | 2 +- tests/dashboards/netdata.spec.js | 80 ++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 4 deletions(-) delete mode 100644 .env.sample create mode 100644 tests/dashboards/netdata.spec.js diff --git a/.env.sample b/.env.sample deleted file mode 100644 index 824d671..0000000 --- a/.env.sample +++ /dev/null @@ -1,3 +0,0 @@ -URL=https://192.168.1.1 -ADMIN_USER= -ADMIN_PASS= \ No newline at end of file diff --git a/tests/auth.setup.js b/tests/auth.setup.js index c0efc6b..c633ee0 100644 --- a/tests/auth.setup.js +++ b/tests/auth.setup.js @@ -5,7 +5,7 @@ const authFile = 'playwright/.auth/user.json'; test('Authenticate', async ({ page }) => { await page.goto('/login'); await page.waitForSelector('input[name="user"]', { timeout: 3000 }); - await page.getByPlaceholder('Username').fill( process.env.ADMIN_USER); + await page.getByPlaceholder('Username').fill(process.env.ADMIN_USER); await page.getByPlaceholder('Password').fill(process.env.ADMIN_PASS); await page.getByRole('link', { name: 'Login' }).click(); await page.waitForSelector('span:has-text("Quick Actions")', { timeout: 3000 }); diff --git a/tests/dashboards/netdata.spec.js b/tests/dashboards/netdata.spec.js new file mode 100644 index 0000000..50e6688 --- /dev/null +++ b/tests/dashboards/netdata.spec.js @@ -0,0 +1,80 @@ +import { test, expect } from "@playwright/test"; + +test.describe("General - Dashboard - Netdata", () => { + test.beforeEach(async ({ page }) => { + await page.goto("/dash-netdata", { waitUntil: "load" }); + }); + + test("Title", async ({ page }) => { + const title = await page.title(); + expect(title).toBe("Difuse - Dashboard - Netdata"); + }); + + test("Check Netdata iframe loading", async ({ page }) => { + const iframeElement = await page.locator("#netdataFrame"); + await expect(iframeElement).toBeTruthy(); + + const netdataContent = await page.locator( + `//div[@class='flex-sc-1m6gk2e-0 layout__Wrapper-sc-1d05imu-0 frXvTZ kLLhdj']` + ); + expect(netdataContent).toBeTruthy(); + }); + + test("Netdata Key Elements", async ({ page }) => { + const systemOverview = await page.getByRole("heading", { + name: "System Overview", + }); + const CPUs = await page.getByRole("heading", { name: "Memory" }); + const disks = await page.getByRole("heading", { name: "Disks" }); + const newtworkStack = await page.getByRole("heading", { + name: "Networking Stack", + }); + const Ipv4 = await page.getByRole("heading", { name: "IPv4 Networking" }); + const Ipv6 = await page.getByRole("heading", { name: "IPv6 Networking" }); + const networkInterfaces = await page.getByRole("heading", { + name: "Network Interfaces", + }); + const firewall = await page.getByRole("heading", { + name: "Firewall (netfilter)", + }); + const netdataMonitoring = await page.getByRole("heading", { + name: "Netdata Monitoring", + }); + + expect( + systemOverview && + CPUs && + disks && + newtworkStack && + Ipv4 && + Ipv6 && + networkInterfaces && + firewall && + netdataMonitoring + ).toBeTruthy(); + }); + + test("Display System Overview Chart", async ({ page }) => { + const diskRead = await page.locator("#easypiechart-system.io-1-chart"); + await expect(diskRead).toBeTruthy(); + + const diskWrite = await page.locator("#easypiechart-system.io-2-chart"); + await expect(diskWrite).toBeTruthy(); + + const CPUguage = await page.locator("#gauge-system.cpu-3-chart"); + await expect(CPUguage).toBeTruthy(); + + const netInbound = await page.locator("#easypiechart-system.net-4-chart"); + await expect(netInbound).toBeTruthy(); + + const netOutbound = await page.locator("#easypiechart-system.net-5-chart"); + await expect(netOutbound).toBeTruthy(); + + const userRAM = await page.locator("#easypiechart-system.ram-6-chart"); + await expect(userRAM).toBeTruthy(); + + await expect( + diskRead && diskWrite && CPUguage && netInbound && netOutbound && userRAM + ).toBeTruthy(); + }); +}); -- 2.39.5 From 8d3eb7d1469999801eaa3812a2565910bec501e1 Mon Sep 17 00:00:00 2001 From: Ajas Date: Sun, 2 Jun 2024 22:04:13 +0530 Subject: [PATCH 02/10] Renamed Branch Testing-Progress to 1.1.0 and Restore .env.sample file --- .env.sample | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .env.sample diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..824d671 --- /dev/null +++ b/.env.sample @@ -0,0 +1,3 @@ +URL=https://192.168.1.1 +ADMIN_USER= +ADMIN_PASS= \ No newline at end of file -- 2.39.5 From 4fc96b7f238a2b24c296c417fff393cfe8c00d16 Mon Sep 17 00:00:00 2001 From: Ajas Date: Sun, 2 Jun 2024 23:15:54 +0530 Subject: [PATCH 03/10] Check Netdata iframe loading: Change dynamic class name to deterministic and fix lint errors --- tests/dashboards/netdata.spec.js | 74 ++++++++++++++++---------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/tests/dashboards/netdata.spec.js b/tests/dashboards/netdata.spec.js index 50e6688..a021fe5 100644 --- a/tests/dashboards/netdata.spec.js +++ b/tests/dashboards/netdata.spec.js @@ -1,80 +1,78 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from '@playwright/test'; -test.describe("General - Dashboard - Netdata", () => { +test.describe('General - Dashboard - Netdata', () => { test.beforeEach(async ({ page }) => { - await page.goto("/dash-netdata", { waitUntil: "load" }); + await page.goto('/dash-netdata', { waitUntil: 'load' }); }); - test("Title", async ({ page }) => { + test('Title', async ({ page }) => { const title = await page.title(); - expect(title).toBe("Difuse - Dashboard - Netdata"); + expect(title).toBe('Difuse - Dashboard - Netdata'); }); - test("Check Netdata iframe loading", async ({ page }) => { - const iframeElement = await page.locator("#netdataFrame"); + test('Check Netdata iframe loading', async ({ page }) => { + const iframeElement = await page.locator('#netdataFrame'); await expect(iframeElement).toBeTruthy(); - const netdataContent = await page.locator( - `//div[@class='flex-sc-1m6gk2e-0 layout__Wrapper-sc-1d05imu-0 frXvTZ kLLhdj']` - ); - expect(netdataContent).toBeTruthy(); + const netDataContent = await page.locator('.charts-body'); + expect(netDataContent).toBeTruthy(); }); - test("Netdata Key Elements", async ({ page }) => { - const systemOverview = await page.getByRole("heading", { - name: "System Overview", + test('Netdata Key Elements', async ({ page }) => { + const systemOverview = await page.getByRole('heading', { + name: 'System Overview' }); - const CPUs = await page.getByRole("heading", { name: "Memory" }); - const disks = await page.getByRole("heading", { name: "Disks" }); - const newtworkStack = await page.getByRole("heading", { - name: "Networking Stack", + const cpuS = await page.getByRole('heading', { name: 'Memory' }); + const disks = await page.getByRole('heading', { name: 'Disks' }); + const newtworkStack = await page.getByRole('heading', { + name: 'Networking Stack' }); - const Ipv4 = await page.getByRole("heading", { name: "IPv4 Networking" }); - const Ipv6 = await page.getByRole("heading", { name: "IPv6 Networking" }); - const networkInterfaces = await page.getByRole("heading", { - name: "Network Interfaces", + const ipv4 = await page.getByRole('heading', { name: 'IPv4 Networking' }); + const ipv6 = await page.getByRole('heading', { name: 'IPv6 Networking' }); + const networkInterfaces = await page.getByRole('heading', { + name: 'Network Interfaces' }); - const firewall = await page.getByRole("heading", { - name: "Firewall (netfilter)", + const firewall = await page.getByRole('heading', { + name: 'Firewall (netfilter)' }); - const netdataMonitoring = await page.getByRole("heading", { - name: "Netdata Monitoring", + const netdataMonitoring = await page.getByRole('heading', { + name: 'Netdata Monitoring' }); expect( systemOverview && - CPUs && + cpuS && disks && newtworkStack && - Ipv4 && - Ipv6 && + ipv4 && + ipv6 && networkInterfaces && firewall && netdataMonitoring ).toBeTruthy(); }); - test("Display System Overview Chart", async ({ page }) => { - const diskRead = await page.locator("#easypiechart-system.io-1-chart"); + test('Display System Overview Chart', async ({ page }) => { + const diskRead = await page.locator('#easypiechart-system.io-1-chart'); await expect(diskRead).toBeTruthy(); - const diskWrite = await page.locator("#easypiechart-system.io-2-chart"); + const diskWrite = await page.locator('#easypiechart-system.io-2-chart'); await expect(diskWrite).toBeTruthy(); - const CPUguage = await page.locator("#gauge-system.cpu-3-chart"); - await expect(CPUguage).toBeTruthy(); + const cpuGuage = await page.locator('#gauge-system.cpu-3-chart'); + await expect(cpuGuage).toBeTruthy(); - const netInbound = await page.locator("#easypiechart-system.net-4-chart"); + const netInbound = await page.locator('#easypiechart-system.net-4-chart'); await expect(netInbound).toBeTruthy(); - const netOutbound = await page.locator("#easypiechart-system.net-5-chart"); + const netOutbound = await page.locator('#easypiechart-system.net-5-chart'); await expect(netOutbound).toBeTruthy(); - const userRAM = await page.locator("#easypiechart-system.ram-6-chart"); + const userRAM = await page.locator('#easypiechart-system.ram-6-chart'); await expect(userRAM).toBeTruthy(); await expect( - diskRead && diskWrite && CPUguage && netInbound && netOutbound && userRAM + diskRead && diskWrite && cpuGuage && netInbound && netOutbound && userRAM ).toBeTruthy(); }); }); -- 2.39.5 From d27f515d8ebaa50c2b5acb253b9f777605d2c3e5 Mon Sep 17 00:00:00 2001 From: Ajas Date: Mon, 3 Jun 2024 16:10:53 +0530 Subject: [PATCH 04/10] Completed implementation of Traffic Monitor top cards --- .../network-analyzer/traffic-monitor.spec.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/dashboards/network-analyzer/traffic-monitor.spec.js diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js new file mode 100644 index 0000000..3823a60 --- /dev/null +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -0,0 +1,50 @@ +import { test, expect } from '@playwright/test'; + +test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/traffic-monitor', { + waitUntil: 'networkidle' + }); + }); + + test('Title', async ({ page }) => { + const title = await page.title(); + expect(title).toBe( + 'Difuse - Dashboard - Network Analyzer - Traffic Monitor' + ); + }); + + test('Traffic Distribution Top Cards', async ({ page }) => { + const hosts = await page.getByRole('heading', { name: 'Hosts' }); + const hostsIcon = await page.locator('.mdi-server-network'); + + expect(hosts).toBeTruthy(); + const hostsValue = await page.textContent('#thc'); + expect(hostsValue).toMatch(/^\d+$/); // check if it is an integer + + const upload = await page.getByRole('heading', { name: 'Upload' }); + const uploadIcon = await page.locator('.mdi-upload'); + + const uploadValue = await page.textContent('#tuc'); + expect(uploadValue).toMatch(/^\d+(\.\d+)? MiB$/); // check if it is a float followed by MiB + + const download = await page.getByRole('heading', { name: 'Download' }); + const downloadIcon = await page.locator('.mdi-download'); + + const downloadValue = await page.textContent('#tdc'); + expect(downloadValue).toMatch(/^\d+(\.\d+)? MiB$/); // check if it is a float followed by MiB + + const connections = await page.getByRole('heading', { + name: 'Connections' + }); + const connectionsIcon = await page.locator('.mdi-lan-connect'); + + const connectionsValue = await page.textContent('#tcc'); + expect(connectionsValue).toMatch(/^\d+(\.\d+)?K?$/); // check if it is a float or integer + + expect(hosts && upload && download && connections).toBeTruthy(); + expect( + hostsIcon && uploadIcon && downloadIcon && connectionsIcon + ).toBeTruthy(); + }); +}); -- 2.39.5 From 1038dfd9e7b39dcd512e64f070ae6913aedea997 Mon Sep 17 00:00:00 2001 From: Ajas Date: Mon, 3 Jun 2024 19:33:38 +0530 Subject: [PATCH 05/10] Network-Analyzer: Traffic Monitor test Completed --- .../network-analyzer/traffic-monitor.spec.js | 166 ++++++++++++++---- 1 file changed, 130 insertions(+), 36 deletions(-) diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js index 3823a60..2160b51 100644 --- a/tests/dashboards/network-analyzer/traffic-monitor.spec.js +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -1,50 +1,144 @@ import { test, expect } from '@playwright/test'; test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => { - test.beforeEach(async ({ page }) => { - await page.goto('network-analyzer/traffic-monitor', { - waitUntil: 'networkidle' + test.describe('Traffic Distribution', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/traffic-monitor', { + waitUntil: 'networkidle' + }); + }); + + test('Title', async ({ page }) => { + const title = await page.title(); + expect(title).toBe( + 'Difuse - Dashboard - Network Analyzer - Traffic Monitor' + ); + }); + + test('Traffic Distribution Top Cards', async ({ page }) => { + const hosts = await page.getByRole('heading', { name: 'Hosts' }); + const hostsIcon = await page.locator('.mdi-server-network'); + + expect(hosts).toBeTruthy(); + const hostsValue = await page.textContent('#thc'); + expect(typeof parseInt(hostsValue)).toBe('number'); + + const upload = await page.getByRole('heading', { name: 'Upload' }); + const uploadIcon = await page.locator('.mdi-upload'); + + const uploadValue = await page.textContent('#tuc'); + expect(typeof parseInt(uploadValue)).toBe('number'); + + const download = await page.getByRole('heading', { name: 'Download' }); + const downloadIcon = await page.locator('.mdi-download'); + + const downloadValue = await page.textContent('#tdc'); + expect(typeof parseInt(downloadValue)).toBe('number'); + + const connections = await page.getByRole('heading', { + name: 'Connections' + }); + const connectionsIcon = await page.locator('.mdi-lan-connect'); + + const connectionsValue = await page.textContent('#tcc'); + expect(typeof parseInt(connectionsValue)).toBe('number'); + + expect(hosts && upload && download && connections).toBeTruthy(); + expect( + hostsIcon && uploadIcon && downloadIcon && connectionsIcon + ).toBeTruthy(); + }); + + test('Traffic', async ({ page }) => { + expect(await page.$('header:has-text("Traffic")')).toBeTruthy(); + expect(await page.isVisible('#chart-1')); + }); + + test('Connections', async ({ page }) => { + expect(await page.$('header:has-text("Connections")')).toBeTruthy(); + expect(await page.isVisible('#chart-2')); + }); + + test('Traffic Distribution', async ({ page }) => { + expect(await page.$('header:has-text("Traffic Distribution")')).toBeTruthy(); }); }); - test('Title', async ({ page }) => { - const title = await page.title(); - expect(title).toBe( - 'Difuse - Dashboard - Network Analyzer - Traffic Monitor' - ); + test.describe('Application Protocol', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/traffic-monitor', { + waitUntil: 'networkidle' + }); + + await page.click('#app-tab-bwm'); + }); + test('Download / Application', async ({ page }) => { + expect(await page.$('header:has-text("Download / Application")')).toBeTruthy(); + expect(await page.isVisible('#chart-3')); + }); + + test('Upload / Application', async ({ page }) => { + expect(await page.$('header:has-text("Upload / Application")')).toBeTruthy(); + expect(await page.isVisible('#chart-4')); + }); + + test('Application Protocol', async ({ page }) => { + expect(await page.$('header:has-text("Application Protocol")')).toBeTruthy(); + }); }); - test('Traffic Distribution Top Cards', async ({ page }) => { - const hosts = await page.getByRole('heading', { name: 'Hosts' }); - const hostsIcon = await page.locator('.mdi-server-network'); + test.describe('Internet Protocol', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/traffic-monitor', { + waitUntil: 'networkidle' + }); - expect(hosts).toBeTruthy(); - const hostsValue = await page.textContent('#thc'); - expect(hostsValue).toMatch(/^\d+$/); // check if it is an integer - - const upload = await page.getByRole('heading', { name: 'Upload' }); - const uploadIcon = await page.locator('.mdi-upload'); - - const uploadValue = await page.textContent('#tuc'); - expect(uploadValue).toMatch(/^\d+(\.\d+)? MiB$/); // check if it is a float followed by MiB - - const download = await page.getByRole('heading', { name: 'Download' }); - const downloadIcon = await page.locator('.mdi-download'); - - const downloadValue = await page.textContent('#tdc'); - expect(downloadValue).toMatch(/^\d+(\.\d+)? MiB$/); // check if it is a float followed by MiB - - const connections = await page.getByRole('heading', { - name: 'Connections' + await page.click('#app-tab-bwm'); }); - const connectionsIcon = await page.locator('.mdi-lan-connect'); - const connectionsValue = await page.textContent('#tcc'); - expect(connectionsValue).toMatch(/^\d+(\.\d+)?K?$/); // check if it is a float or integer + test('IPv4 vs. IPv6', async ({ page }) => { + expect(await page.$('header:has-text("IPv4 vs. IPv6")')).toBeTruthy(); + expect(await page.isVisible('#chart-5')); + }); - expect(hosts && upload && download && connections).toBeTruthy(); - expect( - hostsIcon && uploadIcon && downloadIcon && connectionsIcon - ).toBeTruthy(); + test('Dualstack Distribution', async ({ page }) => { + expect(await page.$('header:has-text("Dualstack Distribution")')).toBeTruthy(); + expect(await page.isVisible('#chart-6')); + }); + + test('Usage by Host', async ({ page }) => { + expect(await page.$('header:has-text("Usage by Host")')).toBeTruthy(); + }); + }); + + test.describe('Export', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/traffic-monitor', { waitUntil: 'load' }); + await page.click('#export-tab-bwm'); + }); + + test('Grouped By Mac (CSV) Download Button', async ({ page }) => { + const groupedByMac = await page.locator('a:has-text("Grouped By Mac (CSV)")'); + const isVisible = await groupedByMac.isVisible(); + expect(isVisible).toBeTruthy(); + }); + + test('Grouped By IP (CSV) Download Button', async ({ page }) => { + const groupedByIp = await page.locator('a:has-text("Grouped By IP (CSV)")'); + const isVisible = await groupedByIp.isVisible(); + expect(isVisible).toBeTruthy(); + }); + + test('Grouped By Protocol (CSV) Download Button', async ({ page }) => { + const groupedByProtocol = await page.locator('a:has-text("Grouped By Protocol (CSV)")'); + const isVisible = await groupedByProtocol.isVisible(); + expect(isVisible).toBeTruthy(); + }); + + test('JSON Dump Download Button', async ({ page }) => { + const jsonDump = await page.locator('a:has-text("JSON Dump")'); + const isVisible = await jsonDump.isVisible(); + expect(isVisible).toBeTruthy(); + }); }); }); -- 2.39.5 From f2dab2e83e6170af29f8d58d4bb42935197ca887 Mon Sep 17 00:00:00 2001 From: Ajas Date: Mon, 3 Jun 2024 20:04:57 +0530 Subject: [PATCH 06/10] Network-Analyzer: added test for Traffic monitor heading --- .../network-analyzer/traffic-monitor.spec.js | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js index 2160b51..460d8dc 100644 --- a/tests/dashboards/network-analyzer/traffic-monitor.spec.js +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -15,6 +15,10 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => ); }); + test('Traffic Monitor', async ({ page }) => { + expect(await page.$('header:has-text("Traffic Monitor")')).toBeTruthy(); + }); + test('Traffic Distribution Top Cards', async ({ page }) => { const hosts = await page.getByRole('heading', { name: 'Hosts' }); const hostsIcon = await page.locator('.mdi-server-network'); @@ -50,17 +54,17 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => }); test('Traffic', async ({ page }) => { - expect(await page.$('header:has-text("Traffic")')).toBeTruthy(); + expect(await page.$('p:has-text("Traffic")')).toBeTruthy(); expect(await page.isVisible('#chart-1')); }); test('Connections', async ({ page }) => { - expect(await page.$('header:has-text("Connections")')).toBeTruthy(); + expect(await page.$('p:has-text("Connections")')).toBeTruthy(); expect(await page.isVisible('#chart-2')); }); test('Traffic Distribution', async ({ page }) => { - expect(await page.$('header:has-text("Traffic Distribution")')).toBeTruthy(); + expect(await page.$('p:has-text("Traffic Distribution")')).toBeTruthy(); }); }); @@ -73,17 +77,17 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => await page.click('#app-tab-bwm'); }); test('Download / Application', async ({ page }) => { - expect(await page.$('header:has-text("Download / Application")')).toBeTruthy(); + expect(await page.$('p:has-text("Download / Application")')).toBeTruthy(); expect(await page.isVisible('#chart-3')); }); test('Upload / Application', async ({ page }) => { - expect(await page.$('header:has-text("Upload / Application")')).toBeTruthy(); + expect(await page.$('p:has-text("Upload / Application")')).toBeTruthy(); expect(await page.isVisible('#chart-4')); }); test('Application Protocol', async ({ page }) => { - expect(await page.$('header:has-text("Application Protocol")')).toBeTruthy(); + expect(await page.$('p:has-text("Application Protocol")')).toBeTruthy(); }); }); @@ -97,17 +101,17 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => }); test('IPv4 vs. IPv6', async ({ page }) => { - expect(await page.$('header:has-text("IPv4 vs. IPv6")')).toBeTruthy(); + expect(await page.$('p:has-text("IPv4 vs. IPv6")')).toBeTruthy(); expect(await page.isVisible('#chart-5')); }); test('Dualstack Distribution', async ({ page }) => { - expect(await page.$('header:has-text("Dualstack Distribution")')).toBeTruthy(); + expect(await page.$('p:has-text("Dualstack Distribution")')).toBeTruthy(); expect(await page.isVisible('#chart-6')); }); test('Usage by Host', async ({ page }) => { - expect(await page.$('header:has-text("Usage by Host")')).toBeTruthy(); + expect(await page.$('p:has-text("Usage by Host")')).toBeTruthy(); }); }); -- 2.39.5 From 4c37ce3595bb51fc5f341dcb3bc1c59155e17393 Mon Sep 17 00:00:00 2001 From: Ajas Date: Mon, 3 Jun 2024 20:25:06 +0530 Subject: [PATCH 07/10] Network-Analyzer: Traffic Monitor Date Select test completed --- .../network-analyzer/traffic-monitor.spec.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js index 460d8dc..56865d4 100644 --- a/tests/dashboards/network-analyzer/traffic-monitor.spec.js +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -19,6 +19,25 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => expect(await page.$('header:has-text("Traffic Monitor")')).toBeTruthy(); }); + test('Traffic Monitor select Date', async ({ page }) => { + const selectElement = page.locator('select.period-select'); + + const options = await selectElement.locator('option'); + + const optionCount = await options.count(); + const date = []; + for (let i = 0; i < optionCount; i++) { + const option = options.nth(i); + const value = await option.getAttribute('value'); + date.push(value); + } + + await selectElement.selectOption(date[1]); + + const selectedValue = await selectElement.inputValue(); + expect(selectedValue).toBe(date[1]); + }); + test('Traffic Distribution Top Cards', async ({ page }) => { const hosts = await page.getByRole('heading', { name: 'Hosts' }); const hostsIcon = await page.locator('.mdi-server-network'); -- 2.39.5 From e1f446762cc5efaca673bd6291df555477e0996c Mon Sep 17 00:00:00 2001 From: Ajas Date: Tue, 4 Jun 2024 20:30:30 +0530 Subject: [PATCH 08/10] Network-Analyzer: Traffic Monitor Tab test added --- .../network-analyzer/traffic-monitor.spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js index 56865d4..01f435a 100644 --- a/tests/dashboards/network-analyzer/traffic-monitor.spec.js +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -38,6 +38,15 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => expect(selectedValue).toBe(date[1]); }); + test('Tabs', async ({ page }) => { + const distributionTab = await page.locator('#distribution-tab-bwm'); + const applicationTab = await page.locator('#app-tab-bwm'); + const ipTab = await page.locator('#ip-tab-bwm'); + const exportTab = await page.locator('#export-tab-bwm'); + + expect(distributionTab && applicationTab && ipTab && exportTab).toBeTruthy(); + }); + test('Traffic Distribution Top Cards', async ({ page }) => { const hosts = await page.getByRole('heading', { name: 'Hosts' }); const hostsIcon = await page.locator('.mdi-server-network'); @@ -95,6 +104,7 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => await page.click('#app-tab-bwm'); }); + test('Download / Application', async ({ page }) => { expect(await page.$('p:has-text("Download / Application")')).toBeTruthy(); expect(await page.isVisible('#chart-3')); -- 2.39.5 From 18b3574fcba57a89570331a3d5aa2d467d1de5b9 Mon Sep 17 00:00:00 2001 From: Ajas Date: Wed, 5 Jun 2024 01:22:52 +0530 Subject: [PATCH 09/10] Deep-Packet-Inspection : Overview tab test completed --- .../deep-packet-inspection.spec.js | 148 ++++++++++++++++++ .../network-analyzer/traffic-monitor.spec.js | 12 +- 2 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 tests/dashboards/network-analyzer/deep-packet-inspection.spec.js diff --git a/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js b/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js new file mode 100644 index 0000000..8054ea7 --- /dev/null +++ b/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js @@ -0,0 +1,148 @@ +import { test, expect } from '@playwright/test'; + +test.describe('General - Dashboard - Network Analyzer - Deep Packet Inspection', () => { + test.describe('Overview', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/deep-packet-inspector', { waitUntil: 'load' }); + + await page.waitForSelector('.card-content', { timeout: 3000 }); + }); + + test('Title', async ({ page }) => { + const title = await page.title(); + expect(title).toBe( + 'Difuse - Dashboard - Network Analyzer - Deep Packet Inspector (DPI)' + ); + }); + + test('Deep Packet Inspection (DPI)', async ({ page }) => { + expect(await page.$('p:has-text("Deep Packet Inspection (DPI)")')).toBeTruthy(); + }); + + test('Tabs', async ({ page }) => { + const overviewTab = await page.locator('#overview-tab-dpi'); + const detailExplorerTab = await page.locator('#detail-tab-dpi'); + const liveViewTab = await page.locator('#liveview-tab-dpi'); + const settingsTab = await page.locator('#settings-tab-dpi'); + + expect(overviewTab && detailExplorerTab && liveViewTab && settingsTab).toBeTruthy(); + }); + + test('Overview Top Cards', async ({ page }) => { + const inspectedFlows = await page.getByRole('heading', { name: 'Inspected Flows' }); + const inspectedFlowsIcon = await page.locator('.mdi-magnify'); + + const inspectedFlowsValue = await page.textContent('#tip'); + expect(typeof parseInt(inspectedFlowsValue)).toBe('number'); + + const applications = await page.getByRole('heading', { name: 'Applications' }); + const applicationsIcon = await page.locator('.mdi-apps'); + + const applicationsValue = await page.textContent('#tia'); + expect(typeof parseInt(applicationsValue)).toBe('number'); + + const countries = await page.getByRole('heading', { name: 'Countries' }); + const countriesIcon = await page.locator('.mdi-earth'); + + const countriesValue = await page.textContent('#tcc'); + expect(typeof parseInt(countriesValue)).toBe('number'); + + const domains = await page.getByRole('heading', { name: 'Domains' }); + const domainsIcon = await page.locator('.mdi-server'); + + const domainsValue = await page.textContent('#tia'); + expect(typeof parseInt(domainsValue)).toBe('number'); + + expect(inspectedFlows && applications && countries && domains).toBeTruthy(); + expect(inspectedFlowsIcon && applicationsIcon && countriesIcon && domainsIcon).toBeTruthy(); + }); + + test('Connections by Country', async ({ page }) => { + expect(await page.$('p:has-text("Connections by Country")')).toBeTruthy(); + }); + + test('DPI Map', async ({ page }) => { + const dpiMap = await page.locator('#dpi-map'); + const isVisible = await dpiMap.isVisible(); + const isEnabled = await dpiMap.isEnabled(); + + expect(isVisible && isEnabled).toBeTruthy(); + }); + + test('Detected Applications', async ({ page }) => { + expect(await page.$('p:has-text("Detected Application")')).toBeTruthy(); + }); + + test('Detected Applications Filter', async ({ page }) => { + const filterField = await page.locator('#filter-field-apps'); + const loadFilterField = await filterField.isVisible(); + expect(loadFilterField).toBeTruthy(); + await filterField.selectOption({ label: 'Category' }); + + const typeField = await page.locator('#filter-type-apps'); + const loadType = await typeField.isVisible(); + expect(loadType).toBeTruthy(); + await typeField.selectOption({ label: '=' }); + + const valueField = await page.locator('#filter-value-categories'); + const loadValue = await typeField.isVisible(); + expect(loadValue).toBeTruthy(); + await valueField.selectOption({ label: 'CDN' }); + + const filterFieldValue = await filterField.inputValue(); + expect(filterFieldValue).toBe('category'); + + const typeValue = await typeField.inputValue(); + expect(typeValue).toBe('='); + + const value = await valueField.inputValue(); + expect(value).toBe('CDN'); + }); + + test('Clear Filter',async({page})=>{ + const clearFilter = await page.locator('#filter-clear-apps') + expect(await clearFilter.isVisible()).toBeTruthy() + }) + + test('Download PDF Button',async({page})=>{ + const button = await page.$('button[data-type="PDF"]'); + const isVisible =await button.isVisible() + const isEnabled =await button.isEnabled() + const buttonName = await button.textContent() + + expect(isVisible && isEnabled).toBeTruthy() + expect(buttonName).toBe('Download PDF') + }) + + test('Download XLSX Button',async({page})=>{ + const button = await page.$('button[data-type="XLSX"]'); + const isVisible =await button.isVisible() + const buttonName = await button.textContent() + + expect(isVisible).toBeTruthy() + expect(buttonName).toBe('Download XLSX') + }) + + test('Download CSV Button',async({page})=>{ + const button = await page.$('button[data-type="CSV"]'); + const isVisible =await button.isVisible() + const isEnabled =await button.isEnabled() + const buttonName = await button.textContent() + + expect(isVisible && isEnabled).toBeTruthy() + expect(buttonName).toBe('Download CSV') + }) + + test('Download JSON Button',async({page})=>{ + const button = await page.$('button[data-type="JSON"]'); + const isVisible =await button.isVisible() + const isEnabled =await button.isEnabled() + const buttonName = await button.textContent() + + expect(isVisible && isEnabled).toBeTruthy() + expect(buttonName).toBe('Download JSON') + }) + + + }); +}); diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js index 01f435a..e371163 100644 --- a/tests/dashboards/network-analyzer/traffic-monitor.spec.js +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -6,6 +6,7 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => await page.goto('network-analyzer/traffic-monitor', { waitUntil: 'networkidle' }); + }); test('Title', async ({ page }) => { @@ -16,7 +17,7 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => }); test('Traffic Monitor', async ({ page }) => { - expect(await page.$('header:has-text("Traffic Monitor")')).toBeTruthy(); + expect(await page.$('p:has-text("Traffic Monitor")')).toBeTruthy(); }); test('Traffic Monitor select Date', async ({ page }) => { @@ -51,7 +52,6 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => const hosts = await page.getByRole('heading', { name: 'Hosts' }); const hostsIcon = await page.locator('.mdi-server-network'); - expect(hosts).toBeTruthy(); const hostsValue = await page.textContent('#thc'); expect(typeof parseInt(hostsValue)).toBe('number'); @@ -153,25 +153,33 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => test('Grouped By Mac (CSV) Download Button', async ({ page }) => { const groupedByMac = await page.locator('a:has-text("Grouped By Mac (CSV)")'); const isVisible = await groupedByMac.isVisible(); + const isEnabled = await groupedByMac.isEnabled(); expect(isVisible).toBeTruthy(); + expect(isEnabled).toBeTruthy(); }); test('Grouped By IP (CSV) Download Button', async ({ page }) => { const groupedByIp = await page.locator('a:has-text("Grouped By IP (CSV)")'); const isVisible = await groupedByIp.isVisible(); + const isEnabled = await groupedByIp.isEnabled(); expect(isVisible).toBeTruthy(); + expect(isEnabled).toBeTruthy(); }); test('Grouped By Protocol (CSV) Download Button', async ({ page }) => { const groupedByProtocol = await page.locator('a:has-text("Grouped By Protocol (CSV)")'); const isVisible = await groupedByProtocol.isVisible(); + const isEnabled = await groupedByProtocol.isEnabled(); expect(isVisible).toBeTruthy(); + expect(isEnabled).toBeTruthy(); }); test('JSON Dump Download Button', async ({ page }) => { const jsonDump = await page.locator('a:has-text("JSON Dump")'); const isVisible = await jsonDump.isVisible(); + const isEnabled = await jsonDump.isEnabled(); expect(isVisible).toBeTruthy(); + expect(isEnabled).toBeTruthy(); }); }); }); -- 2.39.5 From 5e8374adc34d9a44b1a03d28ad55bbd008214924 Mon Sep 17 00:00:00 2001 From: Ajas Date: Wed, 5 Jun 2024 21:12:22 +0530 Subject: [PATCH 10/10] DPI : Overview ,Detail Explorer ,Live View, Settings Test Completed --- .../deep-packet-inspection.spec.js | 245 ++++++++++++++---- .../network-analyzer/traffic-monitor.spec.js | 1 - 2 files changed, 190 insertions(+), 56 deletions(-) diff --git a/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js b/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js index 8054ea7..245fac2 100644 --- a/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js +++ b/tests/dashboards/network-analyzer/deep-packet-inspection.spec.js @@ -4,8 +4,6 @@ test.describe('General - Dashboard - Network Analyzer - Deep Packet Inspection', test.describe('Overview', () => { test.beforeEach(async ({ page }) => { await page.goto('network-analyzer/deep-packet-inspector', { waitUntil: 'load' }); - - await page.waitForSelector('.card-content', { timeout: 3000 }); }); test('Title', async ({ page }) => { @@ -75,74 +73,211 @@ test.describe('General - Dashboard - Network Analyzer - Deep Packet Inspection', test('Detected Applications Filter', async ({ page }) => { const filterField = await page.locator('#filter-field-apps'); - const loadFilterField = await filterField.isVisible(); - expect(loadFilterField).toBeTruthy(); - await filterField.selectOption({ label: 'Category' }); + expect(filterField).toBeTruthy(); const typeField = await page.locator('#filter-type-apps'); - const loadType = await typeField.isVisible(); - expect(loadType).toBeTruthy(); - await typeField.selectOption({ label: '=' }); + expect(typeField).toBeTruthy(); const valueField = await page.locator('#filter-value-categories'); - const loadValue = await typeField.isVisible(); - expect(loadValue).toBeTruthy(); - await valueField.selectOption({ label: 'CDN' }); - - const filterFieldValue = await filterField.inputValue(); - expect(filterFieldValue).toBe('category'); - - const typeValue = await typeField.inputValue(); - expect(typeValue).toBe('='); - - const value = await valueField.inputValue(); - expect(value).toBe('CDN'); + expect(valueField).toBeTruthy(); }); - test('Clear Filter',async({page})=>{ - const clearFilter = await page.locator('#filter-clear-apps') - expect(await clearFilter.isVisible()).toBeTruthy() - }) + test('Clear Filter', async ({ page }) => { + const clearFilter = await page.locator('#filter-clear-apps'); + expect(clearFilter).toBeTruthy(); + }); - test('Download PDF Button',async({page})=>{ - const button = await page.$('button[data-type="PDF"]'); - const isVisible =await button.isVisible() - const isEnabled =await button.isEnabled() - const buttonName = await button.textContent() + test('Download PDF Button', async ({ page }) => { + const button = await page.$('button[data-type="PDF"].download-table-apps'); + expect(button).toBeTruthy(); + const buttonName = await button.textContent(); + expect(buttonName).toBe('Download PDF'); + }); - expect(isVisible && isEnabled).toBeTruthy() - expect(buttonName).toBe('Download PDF') - }) + test('Download XLSX Button', async ({ page }) => { + const button = await page.$('button[data-type="XLSX"].download-table-apps'); + expect(button).toBeTruthy(); + const buttonName = await button.textContent(); + expect(buttonName).toBe('Download XLSX'); + }); - test('Download XLSX Button',async({page})=>{ - const button = await page.$('button[data-type="XLSX"]'); - const isVisible =await button.isVisible() - const buttonName = await button.textContent() + test('Download CSV Button', async ({ page }) => { + const button = await page.$('button[data-type="CSV"].download-table-apps'); + expect(button).toBeTruthy(); + const buttonName = await button.textContent(); + expect(buttonName).toBe('Download CSV'); + }); - expect(isVisible).toBeTruthy() - expect(buttonName).toBe('Download XLSX') - }) + test('Download JSON Button', async ({ page }) => { + const button = await page.$('button[data-type="JSON"].download-table-apps'); + expect(button).toBeTruthy(); + const buttonName = await button.textContent(); + expect(buttonName).toBe('Download JSON'); + }); + }); - test('Download CSV Button',async({page})=>{ - const button = await page.$('button[data-type="CSV"]'); - const isVisible =await button.isVisible() - const isEnabled =await button.isEnabled() - const buttonName = await button.textContent() + test.describe('Detail Explorer Tab', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/deep-packet-inspector', { + waitUntil: 'networkidle' + }); - expect(isVisible && isEnabled).toBeTruthy() - expect(buttonName).toBe('Download CSV') - }) + await page.click('#detail-tab-dpi'); + }); - test('Download JSON Button',async({page})=>{ - const button = await page.$('button[data-type="JSON"]'); - const isVisible =await button.isVisible() - const isEnabled =await button.isEnabled() - const buttonName = await button.textContent() + test('Detail Explorer Top Cards', async ({ page }) => { + const disoveredIps = await page.$('header', { name: 'Discovered IPs' }); + const dicoveredIpsIcon = await page.locator('.mdi-magnify'); - expect(isVisible && isEnabled).toBeTruthy() - expect(buttonName).toBe('Download JSON') - }) + const disoveredIpsValue = await page.textContent('#deips'); + expect(typeof parseInt(disoveredIpsValue)).toBe('number'); + const disoveredMacS = await page.$('header', { name: 'Discovered MACs' }); + const disoveredMacSicon = await page.locator('.mdi-magnify'); + const disoveredMacSValue = await page.textContent('#demacs'); + expect(typeof parseInt(disoveredMacSValue)).toBe('number'); + + expect(disoveredIps && disoveredMacS).toBeTruthy(); + expect(dicoveredIpsIcon && disoveredMacSicon).toBeTruthy(); + }); + + test('Detected Network Peers', async ({ page }) => { + expect(await page.$('p:has-text("Detected Network Peers")')).toBeTruthy(); + }); + + test('Detected Network Filter', async ({ page }) => { + const filterField = await page.locator('#filter-field-de1'); + const loadFilterField = await filterField.isVisible(); + expect(loadFilterField).toBeTruthy(); + + const typeField = await page.locator('#filter-type-de1'); + const loadType = await typeField.isVisible(); + expect(loadType).toBeTruthy(); + + const valueField = await page.locator('#filter-value-de1'); + const loadValue = await valueField.isVisible(); + expect(loadValue).toBeTruthy(); + }); + + test('Explorer Clear Filter Button', async ({ page }) => { + const clearFilter = await page.locator('#filter-clear-de1'); + expect(await clearFilter.isVisible()).toBeTruthy(); + }); + + test('Explorer Download PDF Button', async ({ page }) => { + const button = await page.$('button[data-type="PDF"].download-table-de1'); + const isVisible = await button.isVisible(); + const isEnabled = await button.isEnabled(); + const buttonName = await button.textContent(); + + expect(isVisible && isEnabled).toBeTruthy(); + expect(buttonName).toBe('Download PDF'); + }); + + test('Explorer Download XLSX Button', async ({ page }) => { + const button = await page.$('button[data-type="XLSX"].download-table-de1'); + const isVisible = await button.isVisible(); + const buttonName = await button.textContent(); + + expect(isVisible).toBeTruthy(); + expect(buttonName).toBe('Download XLSX'); + }); + + test('Explorer Download CSV Button', async ({ page }) => { + const button = await page.$('button[data-type="CSV"].download-table-de1'); + const isVisible = await button.isVisible(); + const isEnabled = await button.isEnabled(); + const buttonName = await button.textContent(); + + expect(isVisible && isEnabled).toBeTruthy(); + expect(buttonName).toBe('Download CSV'); + }); + + test('Explorer Download JSON Button', async ({ page }) => { + const button = await page.$('button[data-type="JSON"].download-table-de1'); + const isVisible = await button.isVisible(); + const isEnabled = await button.isEnabled(); + const buttonName = await button.textContent(); + + expect(isVisible && isEnabled).toBeTruthy(); + expect(buttonName).toBe('Download JSON'); + }); + + test('Explore Peer Table', async ({ page }) => { + const table = page.locator('#de2-sec'); + await expect(table).toBeHidden(); + }); + }); + + test.describe('Live View Tab', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/deep-packet-inspector', { waitUntil: 'networkidle' }); + + await page.click('#liveview-tab-dpi'); + }); + + test('Toggle icon is Pause', async ({ page }) => { + const toggleIcon = await page.locator('#toggle-icon'); + const classAttribute = await toggleIcon.getAttribute('class'); + expect(classAttribute).toContain('mdi-pause'); + }); + + test('Toggle icon is Play', async ({ page }) => { + await page.click('#toggle-icon'); + const toggleIcon = await page.locator('#toggle-icon'); + const classAttribute = await toggleIcon.getAttribute('class'); + expect(classAttribute).toContain('mdi-play'); + }); + + test('Live Code Check', async ({ page }) => { + const code = await page.locator('#liveview'); + expect(code).toBeTruthy(); + const codeData = await code.getAttribute('class'); + expect(codeData).toContain('json'); + }); + }); + + test.describe('Settings', () => { + test.beforeEach(async ({ page }) => { + await page.goto('network-analyzer/deep-packet-inspector', { waitUntil: 'networkidle' }); + await page.click('#settings-tab-dpi'); + }); + + test('Enable Label', async ({ page }) => { + expect(await page.$('label:has-text("Enable")')).toBeTruthy(); + }); + + test('Enable Checkbox', async ({ page }) => { + const checkbox = await page.locator('input.cb-enable'); + expect(checkbox).toBeTruthy(); + }); + + test('Ignore Bittorrent Traffic', async ({ page }) => { + expect(await page.$('label:has-text("Ignore Bittorrent Traffic")')).toBeTruthy(); + }); + + test('Ignore Bittorrent Traffic Checkbox', async ({ page }) => { + const checkbox = await page.locator('input.cb-ignorebtt'); + expect(checkbox).toBeTruthy(); + }); + + test('Maximum Storage', async ({ page }) => { + expect(await page.$('label:has-text("Maximum Storage")')).toBeTruthy(); + }); + + test('Maximum Storage Input', async ({ page }) => { + const input = await page.locator('#max-storage'); + expect(input).toBeTruthy(); + }); + + test('Save Button', async ({ page }) => { + const button = await page.getByRole('button', { name: 'Save' }); + const visible = await button.isVisible(); + expect(visible).toBeTruthy(); + + const type = await button.getAttribute('type'); + expect(type).toBe('submit'); + }); }); }); diff --git a/tests/dashboards/network-analyzer/traffic-monitor.spec.js b/tests/dashboards/network-analyzer/traffic-monitor.spec.js index e371163..babde0d 100644 --- a/tests/dashboards/network-analyzer/traffic-monitor.spec.js +++ b/tests/dashboards/network-analyzer/traffic-monitor.spec.js @@ -6,7 +6,6 @@ test.describe('General - Dashboard - Network Analyzer - Traffic Monitor', () => await page.goto('network-analyzer/traffic-monitor', { waitUntil: 'networkidle' }); - }); test('Title', async ({ page }) => { -- 2.39.5