Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ui/tests/selenium/reports/testPageAvailabilityReport.php')
-rw-r--r--ui/tests/selenium/reports/testPageAvailabilityReport.php172
1 files changed, 172 insertions, 0 deletions
diff --git a/ui/tests/selenium/reports/testPageAvailabilityReport.php b/ui/tests/selenium/reports/testPageAvailabilityReport.php
new file mode 100644
index 00000000000..5f91672f7a8
--- /dev/null
+++ b/ui/tests/selenium/reports/testPageAvailabilityReport.php
@@ -0,0 +1,172 @@
+<?php
+/*
+** Zabbix
+** Copyright (C) 2001-2022 Zabbix SIA
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+**/
+
+require_once dirname(__FILE__).'/../../include/CLegacyWebTest.php';
+
+use Facebook\WebDriver\WebDriverBy;
+
+/**
+ * @backup events
+ */
+class testPageAvailabilityReport extends CLegacyWebTest {
+
+ /**
+ * SLA calculated events data in format: triggerid, starttime, duration.
+ * Triggers created via import of data/data_test.sql
+ * @var array
+ */
+ public static $SLA_events = [
+ [100001, '01.01.2016 00:00:00', '+1 second'],
+ [100001, '01.01.2017 22:59:00', '+1 hour 59 second'],
+ [100001, '02.01.2017 22:50:00', '+1 hour 11 minutes'],
+ [100002, '01.01.2017 22:59:10', '+1 hour 5 minutes 59 second'],
+ [100002, '10.10.2017 00:00:00', '+1 second'],
+ [100002, '31.12.2017 22:00:00', '+1 hour'],
+ [100003, '31.12.2017 23:00:00', '+1 hour']
+ ];
+
+ /**
+ * Data provider for testPageAvailabilityReportSLA. Array have following schema:
+ * - SLA availability report filter start time
+ * - SLA availability report filter end time
+ * - SLA availability report result table row values. Only 3 first cells of every row are defined.
+ *
+ * @return array
+ */
+ public function dataProviderSLA() {
+ return [
+ ['01.01.2016 00:00:00', '30.01.2016 00:00:00', [
+ ['A trigger', '', '100.0000%'],
+ ['B trigger', '', '100.0000%'],
+ ['C trigger', '', '100.0000%']
+ ]],
+ ['01.01.2016 00:00:00', '20.01.2016 00:00:00', [
+ ['A trigger', '0.0001%', '99.9999%'],
+ ['B trigger', '', '100.0000%'],
+ ['C trigger', '', '100.0000%']
+ ]],
+ ['01.01.2017 00:00:00', '02.01.2017 23:59:00', [
+ ['A trigger', '4.5149%', '95.4851%'],
+ ['B trigger', '2.2919%', '97.7081%'],
+ ['C trigger', '', '100.0000%']
+ ]],
+ ['01.01.2017 00:00:00', '01.01.2018 00:00:00', [
+ ['A trigger', '0.0251%', '99.9749%'],
+ ['B trigger', '0.0240%', '99.9760%'],
+ ['C trigger', '0.0114%', '99.9886%']
+ ]],
+ ['31.12.2017 22:30:00', '01.01.2018 00:30:00', [
+ ['A trigger', '', '100.0000%'],
+ ['B trigger', '25.0000%', '75.0000%'],
+ ['C trigger', '50.0000%', '50.0000%']
+ ]],
+ ['31.12.2017 22:30:00', '01.01.2018 00:30:00', [
+ ['A trigger', '', '100.0000%'],
+ ['B trigger', '25.0000%', '75.0000%'],
+ ['C trigger', '50.0000%', '50.0000%']
+ ]]
+ ];
+ }
+
+ /**
+ * Initialize test data for dataProviderSLA.
+ */
+ public function testInitializeTestData() {
+ // Generate events data for 'SLA host' trigger items.
+ $eventid = get_dbid('events', 'eventid');
+ $start_time = 'INSERT INTO events (eventid, objectid, clock, value) VALUES (%1$d, %2$d, %3$d, '.TRIGGER_VALUE_TRUE.')';
+ $end_time = 'INSERT INTO events (eventid, objectid, clock, value) VALUES (%1$d, %2$d, %3$d, '.TRIGGER_VALUE_FALSE.')';
+
+ foreach (self::$SLA_events as $event) {
+ array_unshift($event, $eventid);
+ // Event start clock.
+ $event[2] = strtotime($event[2]);
+ DBexecute(vsprintf($start_time, $event));
+
+ // Event end clock.
+ $event[0]++;
+ $event[2] = strtotime($event[3], $event[2]);
+ DBexecute(vsprintf($end_time, $event));
+
+ $eventid = $eventid + 2;
+ }
+ }
+
+ /**
+ * @depends testInitializeTestData
+ * @dataProvider dataProviderSLA
+ */
+ public function testPageAvailabilityReportSLA($start_time, $end_time, $sla_item_values) {
+ $args = [
+ 'from' => date('Y-m-d H:i:s', strtotime($start_time)),
+ 'to' => date('Y-m-d H:i:s', strtotime($end_time)),
+ 'filter_hostids' => 50014
+ ];
+
+ $this->zbxTestLogin('report2.php?'.http_build_query($args));
+ $table_rows =$this->webDriver->findElements(WebDriverBy::xpath('//table[@class="list-table"]/tbody/tr'));
+ if (!$table_rows) {
+ $this->fail("Failed to get SLA reports table.");
+ }
+
+ foreach ($table_rows as $row) {
+ $cells = $row->findElements(WebDriverBy::xpath('td'));
+ $cells_values = [];
+
+ foreach ($cells as $cell) {
+ $cells_values[] = $cell->getText();
+ }
+
+ // Check only cells 2,3,4 in every row: Label, Problem state value, Ok state value.
+ $this->assertContains(array_slice($cells_values, 1, 3), $sla_item_values);
+ }
+ }
+
+ public function testPageAvailabilityReport_ByHost_CheckLayout() {
+ $this->zbxTestLogin('report2.php?config=0');
+ $this->zbxTestCheckTitle('Availability report');
+ $this->zbxTestCheckHeader('Availability report');
+ $this->zbxTestTextPresent('Mode');
+ $this->zbxTestTextPresent('Filter');
+ $this->zbxTestTextPresent(['Host', 'Name', 'Problems', 'Ok', 'Graph']);
+ }
+
+// Check that no real host or template names displayed
+ public function testPageAvailabilityReport_ByHost_NoHostNames() {
+ $this->zbxTestLogin('report2.php?config=0');
+ $this->zbxTestCheckTitle('Availability report');
+ $this->zbxTestCheckNoRealHostnames();
+ }
+
+ public function testPageAvailabilityReport_ByTriggerTemplate_CheckLayout() {
+ $this->zbxTestLogin('report2.php?config=1');
+ $this->zbxTestCheckTitle('Availability report');
+ $this->zbxTestCheckHeader('Availability report');
+ $this->zbxTestTextPresent('Mode');
+ $this->zbxTestTextPresent('Filter');
+ $this->zbxTestTextPresent(['Host', 'Name', 'Problems', 'Ok', 'Graph']);
+ }
+
+// Check that no real host or template names displayed
+ public function testPageAvailabilityReport_ByTriggerTemplate_NoHostNames() {
+ $this->zbxTestLogin('report2.php?config=1');
+ $this->zbxTestCheckNoRealHostnames();
+ }
+}