You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1193 lines
29 KiB

<?php
/*
** Zabbix
** Copyright (C) 2001-2023 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/CWebTest.php';
require_once dirname(__FILE__).'/../traits/TableTrait.php';
require_once dirname(__FILE__).'/../traits/TagTrait.php';
require_once dirname(__FILE__).'/../../include/helpers/CDataHelper.php';
/**
* @backup profiles
*
* @dataSource TagFilter
*/
class testPageMonitoringHosts extends CWebTest {
use TagTrait;
use TableTrait;
/**
* Id of host that was updated.
*
* @var integer
*/
protected static $hostid;
public function testPageMonitoringHosts_CheckLayout() {
$this->page->login()->open('zabbix.php?action=host.view')->waitUntilReady();
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
$table = $this->query('class:list-table')->asTable()->one();
// Checking Title, Header and Column names.
$this->page->assertTitle('Hosts');
$this->page->assertHeader('Hosts');
$headers = ['Name', 'Interface', 'Availability', 'Tags', 'Status', 'Latest data', 'Problems','Graphs',
'Dashboards', 'Web'];
$this->assertSame($headers, ($this->query('class:list-table')->asTable()->one())->getHeadersText());
// Check filter collapse/expand.
foreach ([true, false] as $status) {
$this->assertTrue($this->query('xpath://ul[@class="ui-sortable-container ui-sortable"]//li[contains(@class, "selected")]')
->one()->isPresent($status)
);
$this->query('xpath://a[@aria-label="Home"]')->one()->click();
}
// Check fields maximum length.
foreach(['tags[0][tag]', 'tags[0][value]'] as $field) {
$this->assertEquals(255, $form->query('xpath:.//input[@name="'.$field.'"]')
->one()->getAttribute('maxlength'));
}
// Check tags maximum length.
foreach(['name', 'ip', 'dns', 'port'] as $field) {
$this->assertEquals(255, $form->query('xpath:.//input[@id="'.$field.'_0"]')
->one()->getAttribute('maxlength'));
}
// Check disabled links.
foreach (['Graphs', 'Dashboards', 'Web'] as $disabled) {
$row = $table->findRow('Name', 'Available host');
$this->assertTrue($row->query('xpath://following::td/span[@class="disabled" and text()="'.$disabled.'"]')->exists());
}
// Check tags on the specific host.
$tags = $table->findRow('Name', 'Host for tags filtering - clone')->getColumn('Tags')->query('class:tag')->all();
$this->assertEquals(['action: clone', 'tag: host'], $tags->asText());
foreach ($tags as $tag) {
$tag->click();
$hint = $this->query('xpath://div[@data-hintboxid]')->asOverlayDialog()->waitUntilPresent()->all()->last();
$this->assertEquals($tag->getText(), $hint->getText());
$hint->close();
}
}
public static function getCheckFilterData() {
return [
[
[
'filter' => [
'Name' => 'Empty host'
],
'expected' => [
'Empty host'
]
]
],
[
[
'filter' => [
'Host groups' => [
'Group to copy all graph'
]
],
'expected' => [
'Host with item to copy all graphs 1',
'Host with item to copy all graphs 2'
]
]
],
[
[
'filter' => [
'IP' => '127.0.0.3'
],
'expected' => [
'Template inheritance test host',
'Test item host'
]
]
],
[
[
'filter' => [
'DNS' => 'zabbixzabbixzabbix.com'
],
'expected' => [
'Available host',
'Not available host',
'Not available host in maintenance',
'Unknown host',
'Unknown host in maintenance'
]
]
],
[
[
'filter' => [
'Port' => '161'
],
'expected' => [
'Test item host',
'Visible host for template linkage'
]
]
],
[
[
'filter' => [
'Severity' => [
'Not classified'
]
],
'expected' => [
'1_Host_to_check_Monitoring_Overview',
'Host for tag permissions'
]
]
],
[
[
'filter' => [
'Severity' => [
'Warning'
]
],
'expected' => [
'1_Host_to_check_Monitoring_Overview',
'ЗАББИКС Сервер'
]
]
],
[
[
'filter' => [
'Severity' => [
'High'
]
],
'expected' => [
'1_Host_to_check_Monitoring_Overview'
]
]
],
[
[
'filter' => [
'Severity' => [
'Information'
]
],
'expected' => [
'1_Host_to_check_Monitoring_Overview'
]
]
],
[
[
'filter' => [
'Severity' => [
'Average'
]
],
'expected' => [
'1_Host_to_check_Monitoring_Overview',
'3_Host_to_check_Monitoring_Overview',
'4_Host_to_check_Monitoring_Overview',
'Host for triggers filtering',
'ЗАББИКС Сервер'
]
]
],
[
[
'filter' => [
'Severity' => 'Disaster'
],
'expected' => [
'1_Host_to_check_Monitoring_Overview'
]
]
],
[
[
'filter' => [
'Status' => 'Disabled',
'Host groups' => ['Zabbix server']
],
'expected' => [
'No data found.'
]
]
],
[
[
'filter' => [
'Name' => 'available',
'Host groups' => [
'Group for Host availability widget'
]
],
'expected' => [
'Available host',
'Not available host'
]
]
],
[
[
'filter' => [
'Name' => 'for',
'Host groups' => [
'Zabbix servers'
],
'IP' => '127.0.5.1'
],
'expected' => [
'Simple form test host'
]
]
],
[
[
'filter' => [
'Name' => 'Unknown',
'Host groups' => [
'Group for Host availability widget'],
'IP' => '127.0.0.1',
'DNS' => 'zabbix.com'
],
'expected' => [
'Unknown host'
]
]
],
[
[
'filter' => [
'Name' => 'maintenance',
'Host groups' => [
'Group in maintenance for Host availability widget'
],
'IP' => '127.0.0.1',
'DNS' => 'zab',
'Port' => '10050'
],
'expected' => [
'Not available host in maintenance',
'Unknown host in maintenance'
]
]
],
[
[
'filter' => [
'Severity' => [
'Not classified',
'Warning',
'High',
'Information',
'Average',
'Disaster'
]
],
'expected' => [
'1_Host_to_check_Monitoring_Overview',
'3_Host_to_check_Monitoring_Overview',
'4_Host_to_check_Monitoring_Overview',
'Host for tag permissions',
'Host for triggers filtering',
'ЗАББИКС Сервер'
]
]
],
[
[
'filter' => [
'Name' => 'Tommy'
],
'expected' => []
]
],
// With name 'maintenance', exists 3 hosts in maintenance status. Unchecking 'Show hosts in maintenance'.
[
[
'filter' => [
'Name' => 'maintenance',
'Show hosts in maintenance' => false
],
'expected' => []
]
],
[
[
'filter' => [
'Name' => 'maintenance'
],
'expected' => [
'Available host in maintenance',
'Not available host in maintenance',
'Unknown host in maintenance'
]
]
]
];
}
/**
* @dataProvider getCheckFilterData
*/
public function testPageMonitoringHosts_CheckFilter($data) {
$this->page->login()->open('zabbix.php?action=host.view&filter_reset=1');
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
$form->fill($data['filter']);
$table = $this->query('class:list-table')->waitUntilPresent()->asTable()->one();
$this->query('button:Apply')->waitUntilClickable()->one()->click();
$table->waitUntilReloaded();
$this->assertTableDataColumn($data['expected']);
$this->query('button:Reset')->waitUntilClickable()->one()->click();
$table->waitUntilReloaded();
}
public static function getTagsFilterData() {
return [
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'test', 'value' => 'test_tag', 'operator' => 'Equals']
]
],
'result' => [
'Host for tags filtering'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'test', 'value' => '', 'operator' => 'Contains']
]
],
'result' => [
'Host for tags filtering'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'test', 'value' => 'test_tag', 'operator' => 'Equals'],
['name' => 'action', 'value' => 'clone', 'operator' => 'Contains']
]
],
'result' => [
'Host for tags filtering',
'Host for tags filtering - clone'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'action', 'value' => 'clone', 'operator' => 'Equals'],
['name' => 'tag', 'value' => 'host', 'operator' => 'Equals']
]
],
'result' => [
'Host for tags filtering - clone',
'Host for tags filtering - update'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'action', 'value' => 'clone', 'operator' => 'Contains'],
['name' => 'tag', 'value' => 'host', 'operator' => 'Contains']
]
],
'result' => [
'Host for tags filtering - clone'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'action', 'value' => 'clone', 'operator' => 'Equals'],
['name' => 'action', 'value' => 'update', 'operator' => 'Equals'],
['name' => 'tag', 'value' => 'TEMPLATE', 'operator' => 'Equals']
]
],
'result' => [
'Host for tags filtering',
'Host for tags filtering - clone',
'Host for tags filtering - update'
]
]
],
// Wrote 'template' in lowercase.
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'tag', 'value' => 'template', 'operator' => 'Equals']
]
],
'result' => []
]
],
// Non-existing tag.
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'Tommy', 'value' => 'train', 'operator' => 'Contains']
]
],
'result' => []
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'test', 'operator' => 'Exists']
]
],
'result' => [
'Host for tags filtering'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'test', 'operator' => 'Exists']
]
],
'result' => [
'Host for tags filtering'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'tag', 'operator' => 'Exists'],
['name' => 'test', 'operator' => 'Exists']
]
],
'result' => [
'Host for tags filtering'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'tag', 'operator' => 'Exists'],
['name' => 'test', 'operator' => 'Exists']
]
],
'result' => [
'Host for tags filtering',
'Host for tags filtering - clone',
'Host for tags filtering - update'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'test', 'operator' => 'Does not exist']
]
],
'result' => [
'Host for tags filtering - clone',
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'test', 'operator' => 'Does not exist']
]
],
'result' => [
'Host for tags filtering - clone',
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'action', 'operator' => 'Does not exist'],
['name' => 'tag', 'operator' => 'Does not exist']
]
],
'result' => [
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'action', 'operator' => 'Does not exist'],
['name' => 'tag', 'operator' => 'Does not exist']
]
],
'result' => [
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag']
]
],
'result' => [
'Host for tags filtering - clone',
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag']
]
],
'result' => [
'Host for tags filtering - clone',
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag'],
['name' => 'action', 'operator' => 'Does not equal', 'value' => 'clone']
]
],
'result' => [
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag'],
['name' => 'action', 'operator' => 'Does not equal', 'value' => 'clone']
]
],
'result' => [
'Host for tags filtering',
'Host for tags filtering - clone',
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host']
]
],
'result' => [
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host']
]
],
'result' => [
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'],
['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host']
]
],
'result' => [
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'Or',
'tags' => [
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'],
['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'host']
]
],
'result' => [
'Host for tags filtering',
'Host for tags filtering - update',
'Simple form test host',
'SLA reports host',
'Template inheritance test host',
'ЗАББИКС Сервер'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'],
['name' => 'tag', 'operator' => 'Equals', 'value' => 'host']
]
],
'result' => [
'Host for tags filtering - update'
]
]
],
[
[
'tag_options' => [
'type' => 'And/Or',
'tags' => [
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'],
['name' => 'tag', 'operator' => 'Exists']
]
],
'result' => [
'Host for tags filtering',
'Host for tags filtering - update'
]
]
]
];
}
/**
* @dataProvider getTagsFilterData
*/
public function testPageMonitoringHosts_TagsFilter($data) {
$this->page->login()->open('zabbix.php?port=10051&action=host.view&groupids%5B%5D=4');
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
$table = $this->query('class:list-table')->waitUntilPresent()->one();
$form->fill(['id:evaltype_0' => $data['tag_options']['type']]);
$this->setTagSelector('id:tags_0');
$this->setTags($data['tag_options']['tags']);
$this->query('button:Apply')->one()->waitUntilClickable()->click();
$table->waitUntilReloaded();
$this->assertTableDataColumn(CTestArrayHelper::get($data, 'result', []));
$this->query('button:Reset')->one()->waitUntilClickable()->click();
$table->waitUntilReloaded();
}
public function testPageMonitoringHosts_ResetButtonCheck() {
$this->page->login()->open('zabbix.php?action=host.view&filter_reset=1');
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
$this->page->waitUntilReady();
$table = $this->query('class:list-table')->asTable()->one();
// Check table contents before filtering.
$start_rows_count = $table->getRows()->count();
$this->assertTableStats($start_rows_count);
$start_contents = $this->getTableColumnData('Name');
// Filter hosts.
$form->fill(['Name' => 'Empty host']);
$this->query('button:Apply')->one()->waitUntilClickable()->click();
$table->waitUntilReloaded();
// Check that filtered count matches expected.
$this->assertEquals(1, $table->getRows()->count());
$this->assertTableStats(1);
// After pressing reset button, check that previous hosts are displayed again.
$this->query('button:Reset')->one()->click();
$table->waitUntilReloaded();
$reset_rows_count = $table->getRows()->count();
$this->assertEquals($start_rows_count, $reset_rows_count);
$this->assertTableStats($reset_rows_count);
$this->assertEquals($start_contents, $this->getTableColumnData('Name'));
}
// Checking that Show suppressed problems filter works.
public function testPageMonitoringHosts_ShowSuppresed() {
$this->page->login()->open('zabbix.php?action=host.view&filter_reset=1');
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
$this->page->waitUntilReady();
$table = $this->query('class:list-table')->asTable()->one();
$form->fill(['Severity' => ['Not classified', 'Information', 'Warning', 'Average', 'High', 'Disaster']]);
$this->query('button:Apply')->one()->waitUntilClickable()->click();
$table->waitUntilReloaded();
foreach ([true, false] as $show) {
$form->query('id:show_suppressed_0')->asCheckbox()->one()->fill($show);
$this->query('button:Apply')->one()->waitUntilClickable()->click();
$table->waitUntilReloaded();
$this->assertTrue($table->findRow('Name', 'Host for suppression')->isPresent($show));
}
$this->query('button:Reset')->one()->click();
}
public static function getEnabledLinksData() {
return [
[
[
'name' => 'Dynamic widgets H1',
'link_name' => 'Graphs',
'page_header' => 'Graphs'
]
],
[
[
'name' => 'Host ZBX6663',
'link_name' => 'Web',
'page_header' => 'Web monitoring'
]
],
[
[
'name' => 'ЗАББИКС Сервер',
'link_name' => 'Dashboards',
'page_header' => 'Host dashboards'
]
],
[
[
'name' => 'Empty host',
'link_name' => 'Problems',
'page_header' => 'Problems'
]
],
[
[
'name' => 'Available host',
'link_name' => 'Latest data',
'page_header' => 'Latest data'
]
]
];
}
/**
* @dataProvider getEnabledLinksData
*
* Check enabled links and that correct host is displayed.
*/
public function testPageMonitoringHosts_EnabledLinks($data) {
$this->page->login()->open('zabbix.php?action=host.view&filter_reset=1');
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
switch ($data['name']) {
case 'Dynamic widgets H1':
case 'Host ZBX6663':
case 'Available host':
$this->selectLink($data['name'], $data['link_name'], $data['page_header']);
$this->page->waitUntilReady();
$filter_form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
$filter_form->checkValue(['Hosts' => $data['name']]);
$this->query('button:Reset')->one()->click();
break;
case 'ЗАББИКС Сервер':
$this->selectLink($data['name'], $data['link_name'], $data['page_header']);
break;
case 'Empty host':
$this->page->waitUntilReady();
$this->query('xpath://td/a[text()="'.$data['name'].'"]/following::td/a[text()="'.$data['link_name'].'"]')
->one()->click();
$this->page->waitUntilReady();
$this->page->assertHeader($data['page_header']);
$form->checkValue(['Hosts' => $data['name']]);
$this->query('button:Reset')->one()->click();
break;
}
}
public static function getHostContextMenuData() {
return [
[
[
'name' => 'ЗАББИКС Сервер',
'disabled' => ['Web'],
'titles' => [
'Dashboards',
'Problems',
'Latest data',
'Graphs',
'Web',
'Inventory',
'Host',
'Items',
'Triggers',
'Discovery',
'Web',
'Detect operating system',
'Ping',
'Traceroute'
]
]
],
[
[
'name' => 'Available host',
'disabled' => ['Web', 'Graphs', 'Dashboards'],
'titles' => [
'Dashboards',
'Problems',
'Latest data',
'Graphs',
'Web',
'Inventory',
'Host',
'Items',
'Triggers',
'Discovery',
'Web',
'Detect operating system',
'Ping',
'Traceroute'
]
]
],
[
[
'name' => 'Dynamic widgets H1',
'disabled' => ['Dashboards', 'Web'],
'titles' => [
'Dashboards',
'Problems',
'Latest data',
'Graphs',
'Web',
'Inventory',
'Host',
'Items',
'Triggers',
'Discovery',
'Web',
'Detect operating system',
'Ping',
'Traceroute'
]
]
],
[
[
'name' => 'Host ZBX6663',
'disabled' => ['Dashboards'],
'titles' => [
'Dashboards',
'Problems',
'Latest data',
'Graphs',
'Web',
'Inventory',
'Host',
'Items',
'Triggers',
'Discovery',
'Web',
'Detect operating system',
'Ping',
'Traceroute'
]
]
]
];
}
/**
* @dataProvider getHostContextMenuData
*
* Click on host name from the table and check displayed popup context.
*/
public function testPageMonitoringHosts_HostContextMenu($data) {
$this->page->login()->open('zabbix.php?action=host.view&filter_reset=1')->waitUntilReady();
$row = $this->query('class:list-table')->asTable()->one()->findRow('Name', $data['name']);
$row->query('link', $data['name'])->one()->click();
$this->page->waitUntilReady();
$popup = CPopupMenuElement::find()->waitUntilVisible()->one();
$this->assertEquals(['VIEW', 'CONFIGURATION', 'SCRIPTS'], $popup->getTitles()->asText());
$this->assertTrue($popup->hasItems($data['titles']));
foreach ($data['disabled'] as $disabled) {
$this->assertTrue($popup->query('xpath://a[@aria-label="View, '.
$disabled.'" and @class="menu-popup-item disabled"]')->one()->isPresent()
);
}
}
/**
* Check number of problems displayed on Hosts and Problems page.
*/
public function testPageMonitoringHosts_CountProblems() {
$this->page->login();
$hosts_names = ['1_Host_to_check_Monitoring_Overview', 'ЗАББИКС Сервер', 'Host for tag permissions', 'Empty host'];
foreach ($hosts_names as $host) {
$this->page->open('zabbix.php?action=host.view&name='.$host)->waitUntilReady();
$table = $this->query('class:list-table')->asTable()->one();
// Get number of problems displayed on icon and it severity level.
if ($host !== 'Empty host') {
$icons = $table->query('xpath:.//*[contains(@class, "problem-icon-list-item")]')->all();
$results = [];
foreach ($icons as $icon) {
$amount = $icon->getText();
$severity = $icon->getAttribute('title');
$results[$severity] = $amount;
}
}
else {
$this->assertEquals('Problems', $table->getRow(0)->getColumn('Problems')->getText());
}
// Navigate to Problems page from Hosts.
$table->getRow(0)->getColumn('Problems')->query('xpath:.//a')->one()->click();
$this->page->waitUntilReady();
$this->page->assertTitle('Problems');
$this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one()->checkValue(['Hosts' => $host]);
// Count problems of each severity and compare it with problems count from Hosts page.
if ($host !== 'Empty host') {
foreach ($results as $severity => $count) {
$problem_count = $table->query('xpath:.//td[contains(@class, "-bg") and text()="'.$severity.'"]')
->all()->count();
$this->assertEquals(strval($problem_count), $count);
}
}
// Check that table is empty and No data found displayed.
else {
$this->assertTableData();
}
}
}
public function prepareUpdateData() {
$response = CDataHelper::call('host.update', ['hostid' => '99013', 'status' => 1]);
$this->assertArrayHasKey('hostids', $response);
self::$hostid = $response['hostids'][0];
}
/**
* @backup hosts
*
* @onBeforeOnce prepareUpdateData
*/
public function testPageMonitoringHosts_TableSorting() {
// Sort by name and status.
$this->page->login()->open('zabbix.php?action=host.view&filter_reset=1')->waitUntilReady();
foreach (['Name', 'Status'] as $listing) {
$query = $this->query('xpath://a[@href and text()="'.$listing.'"]');
$query->one()->click();
$this->page->waitUntilReady();
$after_listing = $this->getTableColumnData($listing);
$query->one()->click();
$this->page->waitUntilReady();
$this->assertEquals(array_reverse($after_listing), $this->getTableColumnData($listing));
}
}
/**
* Clicking on link from the table and then checking page header
*
* @param string $host_name Host name
* @param string $column Column name
* @param string $page_header Page header name
*/
private function selectLink($host_name, $column, $page_header) {
$this->page->waitUntilReady();
$this->query('class:list-table')->asTable()->one()->findRow('Name', $host_name)->query('link', $column)->one()->click();
$this->page->waitUntilReady();
if ($page_header !== null) {
$this->page->assertHeader($page_header);
}
if ($host_name === 'Dynamic widgets H1' && $this->query('xpath://li[@aria-labelledby="ui-id-2"'.
' and @aria-selected="false"]')->exists()) {
$this->query('id:ui-id-2')->one()->click();
}
if ($host_name === 'ЗАББИКС Сервер' && $column === 'Dashboards') {
$this->assertEquals('ЗАББИКС Сервер', $this->query('xpath://ul[@class="breadcrumbs"]/li[2]')->one()->getText());
}
}
public static function getCheckCountersData() {
return [
[
[
'host' => 'Host ZBX6663',
'counters' => [
[
'column' => 'Latest data',
'counter' => 14
],
[
'column' => 'Problems',
'counter' => null
],
[
'column' => 'Graphs',
'counter' => 2
],
[
'column' => 'Web',
'counter' => 2
]
]
]
],
[
[
'host' => 'ЗАББИКС Сервер',
'counters' => [
[
'column' => 'Dashboards',
'counter' => 4
],
[
'column' => 'Problems',
'counter' => "15"
]
]
]
]
];
}
/**
* @dataProvider getCheckCountersData
*/
public function testPageMonitoringHosts_CheckCounters($data) {
$this->page->login()->open('zabbix.php?action=host.view')->waitUntilReady();
$row = $this->query('class:list-table')->asTable()->one()->findRow('Name', $data['host']);
foreach ($data['counters'] as $counter) {
if ($counter['column'] === 'Problems') {
$text = ($counter['counter'] === null) ? $counter['column'] : $counter['counter'];
$this->assertEquals($text, $row->getColumn($counter['column'])->getText());
}
else {
$this->assertEquals($counter['column'].' '.$counter['counter'],
$row->getColumn($counter['column'])->getText()
);
}
}
}
}