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.
831 lines
27 KiB
831 lines
27 KiB
1 year ago
|
<?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/CLegacyWebTest.php';
|
||
|
require_once dirname(__FILE__).'/../traits/TagTrait.php';
|
||
|
require_once dirname(__FILE__).'/../traits/TableTrait.php';
|
||
|
require_once dirname(__FILE__).'/../behaviors/CMessageBehavior.php';
|
||
|
|
||
|
/**
|
||
|
* @dataSource TagFilter, Proxies, WebScenarios
|
||
|
*
|
||
|
* @backup hosts
|
||
|
*
|
||
|
* @onBefore prepareHostsData
|
||
|
*/
|
||
|
class testPageHosts extends CLegacyWebTest {
|
||
|
|
||
|
/**
|
||
|
* Attach MessageBehavior to the test.
|
||
|
*/
|
||
|
public function getBehaviors() {
|
||
|
return [CMessageBehavior::class];
|
||
|
}
|
||
|
|
||
|
public $HostName = 'ЗАББИКС Сервер';
|
||
|
public $HostGroup = 'Zabbix servers';
|
||
|
public $HostIp = '127.0.0.1';
|
||
|
public $HostPort = '10050';
|
||
|
|
||
|
use TagTrait;
|
||
|
use TableTrait;
|
||
|
|
||
|
public static function prepareHostsData() {
|
||
|
CDataHelper::createHosts([
|
||
|
[
|
||
|
'host' => 'Disabled status',
|
||
|
'status' => HOST_STATUS_NOT_MONITORED,
|
||
|
'groups' => [
|
||
|
'groupid' => '6'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'host' => 'Enabled status',
|
||
|
'status' => HOST_STATUS_MONITORED,
|
||
|
'groups' => [
|
||
|
'groupid' => '6'
|
||
|
]
|
||
|
]
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
public static function allHosts() {
|
||
|
return CDBHelper::getDataProvider(
|
||
|
'SELECT h.name,h.hostid,g.name AS group_name'.
|
||
|
' FROM hosts h'.
|
||
|
' LEFT JOIN hosts_groups hg'.
|
||
|
' ON hg.hostid=h.hostid'.
|
||
|
' LEFT JOIN hstgrp g'.
|
||
|
' ON g.groupid=hg.groupid'.
|
||
|
' WHERE h.status IN ('.HOST_STATUS_MONITORED.','.HOST_STATUS_NOT_MONITORED.')'.
|
||
|
" AND NOT h.flags = 2"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_CheckLayout() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestCheckHeader('Hosts');
|
||
|
$filter = $this->query('name:zbx_filter')->asForm()->one();
|
||
|
$filter->query('button:Reset')->one()->click();
|
||
|
$filter->getField('Host groups')->select($this->HostGroup);
|
||
|
$filter->submit();
|
||
|
|
||
|
$this->zbxTestTextPresent($this->HostName);
|
||
|
$this->zbxTestTextPresent('Simple form test host');
|
||
|
$this->zbxTestTextNotPresent('ZBX6648 All Triggers Host');
|
||
|
|
||
|
// Check that proxy field is disabled.
|
||
|
$this->zbxTestAssertElementNotPresentId('filter_proxyids__ms');
|
||
|
$this->zbxTestAssertElementPresentXpath('//div[@id="filter_proxyids_"]/..//button[@disabled]');
|
||
|
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th/a[text()='Name']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Items')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Triggers')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Graphs')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Discovery')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Web')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Interface')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Proxy')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Templates')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th/a[contains(text(),'Status')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Availability')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Agent encryption')]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//thead//th[contains(text(),'Info')]");
|
||
|
|
||
|
$this->zbxTestTextNotPresent('Displaying 0 of 0 found');
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][contains(text(),'Displaying')]");
|
||
|
|
||
|
$this->zbxTestAssertElementPresentXpath("//button[text()='Export'][@disabled]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//button[text()='Mass update'][@disabled]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//button[text()='Enable'][@disabled]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//button[text()='Disable'][@disabled]");
|
||
|
$this->zbxTestAssertElementPresentXpath("//button[text()='Delete'][@disabled]");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider allHosts
|
||
|
*/
|
||
|
public function testPageHosts_SimpleUpdate($host) {
|
||
|
$hostid = $host['hostid'];
|
||
|
$name = $host['name'];
|
||
|
|
||
|
$sqlHosts =
|
||
|
'SELECT hostid,proxyid,host,status,ipmi_authtype,ipmi_privilege,ipmi_username,'.
|
||
|
'ipmi_password,maintenanceid,maintenance_status,maintenance_type,maintenance_from,'.
|
||
|
'name,flags,templateid,description,tls_connect,tls_accept'.
|
||
|
' FROM hosts'.
|
||
|
' WHERE hostid='.$hostid;
|
||
|
$oldHashHosts = CDBHelper::getHash($sqlHosts);
|
||
|
$sqlItems = "select * from items where hostid=$hostid order by itemid";
|
||
|
$oldHashItems = CDBHelper::getHash($sqlItems);
|
||
|
$sqlInterface = "select * from interface where hostid=$hostid order by interfaceid";
|
||
|
$oldHashInterface = CDBHelper::getHash($sqlInterface);
|
||
|
$sqlHostMacro = "select * from hostmacro where hostid=$hostid order by hostmacroid";
|
||
|
$oldHashHostMacro = CDBHelper::getHash($sqlHostMacro);
|
||
|
$sqlHostsGroups = "select * from hosts_groups where hostid=$hostid order by hostgroupid";
|
||
|
$oldHashHostsGroups = CDBHelper::getHash($sqlHostsGroups);
|
||
|
$sqlHostsTemplates = "select * from hosts_templates where hostid=$hostid order by hosttemplateid";
|
||
|
$oldHashHostsTemplates = CDBHelper::getHash($sqlHostsTemplates);
|
||
|
$sqlMaintenancesHosts = "select * from maintenances_hosts where hostid=$hostid order by maintenance_hostid";
|
||
|
$oldHashMaintenancesHosts = CDBHelper::getHash($sqlMaintenancesHosts);
|
||
|
$sqlHostInventory = "select * from host_inventory where hostid=$hostid";
|
||
|
$oldHashHostInventory = CDBHelper::getHash($sqlHostInventory);
|
||
|
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestCheckHeader('Hosts');
|
||
|
|
||
|
$this->zbxTestTextPresent($name);
|
||
|
$this->zbxTestClickLinkText($name);
|
||
|
$form = COverlayDialogElement::find()->asForm()->one()->waitUntilReady();
|
||
|
$form->submit();
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Host updated');
|
||
|
$this->zbxTestTextPresent($name);
|
||
|
|
||
|
$this->assertEquals($oldHashHosts, CDBHelper::getHash($sqlHosts));
|
||
|
$this->assertEquals($oldHashItems, CDBHelper::getHash($sqlItems));
|
||
|
$this->assertEquals($oldHashInterface, CDBHelper::getHash($sqlInterface));
|
||
|
$this->assertEquals($oldHashHostMacro, CDBHelper::getHash($sqlHostMacro));
|
||
|
$this->assertEquals($oldHashHostsGroups, CDBHelper::getHash($sqlHostsGroups));
|
||
|
$this->assertEquals($oldHashHostsTemplates, CDBHelper::getHash($sqlHostsTemplates));
|
||
|
$this->assertEquals($oldHashMaintenancesHosts, CDBHelper::getHash($sqlMaintenancesHosts));
|
||
|
$this->assertEquals($oldHashHostInventory, CDBHelper::getHash($sqlHostInventory));
|
||
|
}
|
||
|
|
||
|
public function getFilterByStatusData() {
|
||
|
return [
|
||
|
// Retrieve only Enabled host from specific host group.
|
||
|
[
|
||
|
[
|
||
|
'filter' => [
|
||
|
'Host groups' => 'Virtual machines',
|
||
|
'Status' => 'Enabled'
|
||
|
],
|
||
|
'expected' => [
|
||
|
'Enabled status'
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
// Apply filtering with no results in output.
|
||
|
[
|
||
|
[
|
||
|
'filter' => [
|
||
|
'Name' => 'Disabled status',
|
||
|
'Status' => 'Enabled'
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
// Retrieve only Disabled Host which is monitored by the server.
|
||
|
[
|
||
|
[
|
||
|
'filter' => [
|
||
|
'Status' => 'Disabled',
|
||
|
'Monitored by' => 'Server'
|
||
|
],
|
||
|
'expected' => [
|
||
|
'Disabled status'
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
// Retrieve Any host with a partial name match.
|
||
|
[
|
||
|
[
|
||
|
'filter' => [
|
||
|
'Name' => 'status',
|
||
|
'Status' => 'Any'
|
||
|
],
|
||
|
'expected' => [
|
||
|
'Disabled status',
|
||
|
'Enabled status'
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getFilterByStatusData
|
||
|
*/
|
||
|
public function testPageHosts_FilterByStatus($data) {
|
||
|
$this->page->login()->open('zabbix.php?action=host.list');
|
||
|
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
|
||
|
|
||
|
// Apply filtering parameters.
|
||
|
$form->fill($data['filter']);
|
||
|
$form->submit();
|
||
|
$this->page->waitUntilReady();
|
||
|
|
||
|
if (array_key_exists('expected', $data)) {
|
||
|
// Using column Name check that only the expected Hosts are returned in the list.
|
||
|
$this->assertTableDataColumn($data['expected']);
|
||
|
}
|
||
|
else {
|
||
|
// Check that 'No data found.' string is returned if no results are expected.
|
||
|
$this->assertTableData();
|
||
|
}
|
||
|
|
||
|
// Reset filter due to not influence further tests.
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_MassDisableAll() {
|
||
|
DBexecute("update hosts set status=".HOST_STATUS_MONITORED." where status=".HOST_STATUS_NOT_MONITORED);
|
||
|
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
|
||
|
$this->zbxTestCheckboxSelect('all_hosts');
|
||
|
$this->zbxTestClickButtonText('Disable');
|
||
|
$this->zbxTestAcceptAlert();
|
||
|
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Hosts disabled');
|
||
|
|
||
|
$sql = "select * from hosts where status=".HOST_STATUS_MONITORED.
|
||
|
" and NOT flags = 2";
|
||
|
$this->assertEquals(0, CDBHelper::getCount($sql), "Chuck Norris: all hosts disabled but DB does not match");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider allHosts
|
||
|
*/
|
||
|
public function testPageHosts_MassDisable($host) {
|
||
|
DBexecute("update hosts set status=".HOST_STATUS_MONITORED." where status=".HOST_STATUS_NOT_MONITORED);
|
||
|
|
||
|
$hostid = $host['hostid'];
|
||
|
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
|
||
|
$this->zbxTestCheckboxSelect('hostids_'.$hostid);
|
||
|
$this->zbxTestClickButtonText('Disable');
|
||
|
$this->zbxTestAcceptAlert();
|
||
|
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Host disabled');
|
||
|
|
||
|
$sql = "select * from hosts where hostid=$hostid and status=".HOST_STATUS_NOT_MONITORED;
|
||
|
$this->assertEquals(1, CDBHelper::getCount($sql), "Chuck Norris: host $hostid disabled but status is wrong in the DB");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider allHosts
|
||
|
*/
|
||
|
public function testPageHosts_MassActivate($host) {
|
||
|
DBexecute("update hosts set status=".HOST_STATUS_NOT_MONITORED." where status=".HOST_STATUS_MONITORED);
|
||
|
|
||
|
$hostid = $host['hostid'];
|
||
|
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
|
||
|
$this->zbxTestCheckboxSelect('hostids_'.$hostid);
|
||
|
$this->zbxTestClickButtonText('Enable');
|
||
|
$this->zbxTestAcceptAlert();
|
||
|
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Host enabled');
|
||
|
|
||
|
$sql = "select * from hosts where hostid=$hostid and status=".HOST_STATUS_MONITORED;
|
||
|
$this->assertEquals(1, CDBHelper::getCount($sql), "Chuck Norris: host $hostid activated but status is wrong in the DB");
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_MassActivateAll() {
|
||
|
DBexecute("update hosts set status=".HOST_STATUS_NOT_MONITORED." where status=".HOST_STATUS_MONITORED);
|
||
|
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
|
||
|
$this->zbxTestCheckboxSelect('all_hosts');
|
||
|
$this->zbxTestClickButtonText('Enable');
|
||
|
$this->zbxTestAcceptAlert();
|
||
|
|
||
|
$this->zbxTestCheckTitle('Configuration of hosts');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Hosts enabled');
|
||
|
|
||
|
$sql = "select host from hosts where status=".HOST_STATUS_NOT_MONITORED.
|
||
|
" and NOT flags = 2";
|
||
|
$this->assertEquals(0, CDBHelper::getCount($sql), "Chuck Norris: all hosts activated but DB does not match");
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_FilterByName() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$table = $this->query('class:list-table')->asTable()->one();
|
||
|
$filter = $this->query('name:zbx_filter')->asForm()->one();
|
||
|
$filter->query('button:Reset')->one()->click();
|
||
|
$filter->getField('Name')->fill($this->HostName);
|
||
|
$filter->submit();
|
||
|
$table->waitUntilReloaded();
|
||
|
$this->zbxTestTextPresent($this->HostName);
|
||
|
$this->zbxTestTextNotPresent('Displaying 0 of 0 found');
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_FilterByTemplates() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$filter = $this->query('name:zbx_filter')->asForm()->one();
|
||
|
$filter->query('button:Reset')->one()->click();
|
||
|
$filter->fill(['Templates' => ['values' =>'Template for web scenario testing', 'context' => 'Templates']]);
|
||
|
$filter->submit();
|
||
|
$this->zbxTestWaitForPageToLoad();
|
||
|
$this->zbxTestAssertElementPresentXpath("//tbody//a[text()='Simple form test host']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][text()='Displaying 1 of 1 found']");
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_FilterByProxy() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$filter = $this->query('name:zbx_filter')->asForm()->one();
|
||
|
$filter->query('button:Reset')->one()->click();
|
||
|
$filter->getField('Host groups')->fill('Zabbix servers');
|
||
|
|
||
|
$this->zbxTestClickXpathWait('//label[text()="Proxy"]');
|
||
|
$this->zbxTestClickButtonText('Apply');
|
||
|
$this->zbxTestAssertElementPresentXpath("//tbody//a[text()='Host_1 with proxy']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//tbody//td[text()='Proxy_1 for filter']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//tbody//a[text()='Host_2 with proxy']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//tbody//td[text()='Proxy_2 for filter']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][text()='Displaying 3 of 3 found']");
|
||
|
$this->zbxTestClickButtonMultiselect('filter_proxyids_');
|
||
|
$this->zbxTestLaunchOverlayDialog('Proxies');
|
||
|
$this->zbxTestClickLinkTextWait('Proxy_1 for filter');
|
||
|
$this->zbxTestClickButtonText('Apply');
|
||
|
$this->zbxTestWaitForPageToLoad();
|
||
|
$this->zbxTestAssertElementPresentXpath("//tbody//a[text()='Host_1 with proxy']");
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][text()='Displaying 1 of 1 found']");
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_FilterNone() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$filter = $this->query('name:zbx_filter')->asForm()->one();
|
||
|
$filter->query('button:Reset')->one()->click();
|
||
|
$filter->getField('Name')->fill('1928379128ksdhksdjfh');
|
||
|
$filter->submit();
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][text()='Displaying 0 of 0 found']");
|
||
|
$filter->invalidate();
|
||
|
$filter->getField('Name')->fill('%');
|
||
|
$filter->submit();
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][text()='Displaying 0 of 0 found']");
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_FilterByAllFields() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$table = $this->query('class:list-table')->asTable()->one();
|
||
|
$filter = $this->query('name:zbx_filter')->asForm()->one();
|
||
|
$filter->query('button:Reset')->one()->click();
|
||
|
$filter->getField('Host groups')->select($this->HostGroup);
|
||
|
$filter->getField('Name')->fill($this->HostName);
|
||
|
$filter->getField('IP')->fill($this->HostIp);
|
||
|
$filter->getField('Port')->fill($this->HostPort);
|
||
|
$filter->submit();
|
||
|
$table->waitUntilReloaded();
|
||
|
$this->zbxTestTextPresent($this->HostName);
|
||
|
$this->zbxTestAssertElementPresentXpath("//div[@class='table-stats'][text()='Displaying 1 of 1 found']");
|
||
|
}
|
||
|
|
||
|
public function testPageHosts_FilterReset() {
|
||
|
$this->zbxTestLogin(self::HOST_LIST_PAGE);
|
||
|
$this->query('button:Reset')->one()->click();
|
||
|
$this->zbxTestTextNotPresent('Displaying 0 of 0 found');
|
||
|
}
|
||
|
|
||
|
public static function getFilterByTagsData() {
|
||
|
return [
|
||
|
// "And" and "And/Or" checks.
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'tag', 'operator' => 'Contains', 'value' => 'host'],
|
||
|
['name' => 'test', 'operator' => 'Contains', 'value' => 'test_tag']
|
||
|
],
|
||
|
'result' => [
|
||
|
[
|
||
|
'Name' => 'Host for tags filtering',
|
||
|
'Tags' => [
|
||
|
'selector' => 'class:tag',
|
||
|
'text' => ['tag: HOST', 'test: test_tag', 'action: simple']
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'tag', 'operator' => 'Contains', 'value' => 'host'],
|
||
|
['name' => 'test', 'operator' => 'Contains', 'value' => 'test_tag']
|
||
|
],
|
||
|
'result' => [
|
||
|
[
|
||
|
'Name' => 'Host for tags filtering',
|
||
|
'Tags' => [
|
||
|
'selector' => 'class:tag',
|
||
|
'text' => ['tag: HOST', 'test: test_tag', 'action: simple']
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'Name' => 'Host for tags filtering - clone',
|
||
|
'Tags' => [
|
||
|
'selector' => 'class:tag',
|
||
|
'text' => ['tag: host', 'action: clone']
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'Name' => 'Host for tags filtering - update',
|
||
|
'Tags' => [
|
||
|
'selector' => 'class:tag',
|
||
|
'text' => ['tag: host', 'action: update']
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
// "Contains" and "Equals" checks.
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'tag', 'operator' => 'Contains', 'value' => 'HOST']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering', 'Templates' => 'Template for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - clone', 'Templates' => ''],
|
||
|
['Name' => 'Host for tags filtering - update', 'Templates' => '']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'tag', 'operator' => 'Equals', 'value' => 'HOST']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Contains']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Equals']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'tag', 'operator' => 'Exists'],
|
||
|
['name' => 'test', 'operator' => 'Exists']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'tag', 'operator' => 'Exists'],
|
||
|
['name' => 'test', 'operator' => 'Exists']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Exists']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Exists']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not exist']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not exist']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not exist'],
|
||
|
['name' => 'tag', 'operator' => 'Does not exist']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not exist'],
|
||
|
['name' => 'tag', 'operator' => 'Does not exist']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not equal', 'value' => 'test_tag']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'test', 'operator' => 'Does not equal']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not equal', 'value' => 'update'],
|
||
|
['name' => 'action', 'operator' => 'Does not equal', 'value' => 'simple']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not equal', 'value' => 'update'],
|
||
|
['name' => 'action', 'operator' => 'Does not equal', 'value' => 'simple']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - clone'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clo'],
|
||
|
['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'ho']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clo'],
|
||
|
['name' => 'tag', 'operator' => 'Does not contain', 'value' => 'ho']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - update'],
|
||
|
['Name' => 'Simple form test host'],
|
||
|
['Name' => 'SLA reports host'],
|
||
|
['Name' => 'Template inheritance test host']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'],
|
||
|
['name' => 'tag', 'operator' => 'Equals', 'value' => 'host']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering - update']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'evaluation_type' => 'And/Or',
|
||
|
'tags' => [
|
||
|
['name' => 'action', 'operator' => 'Does not contain', 'value' => 'clone'],
|
||
|
['name' => 'tag', 'operator' => 'Exists']
|
||
|
],
|
||
|
'result' => [
|
||
|
['Name' => 'Host for tags filtering'],
|
||
|
['Name' => 'Host for tags filtering - update']
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test filtering hosts by tags.
|
||
|
*
|
||
|
* @dataProvider getFilterByTagsData
|
||
|
*/
|
||
|
public function testPageHosts_FilterByTags($data) {
|
||
|
$this->page->login()->open((new CUrl('zabbix.php'))
|
||
|
->setArgument('action', 'host.list')
|
||
|
->setArgument('filter_groups[]', 4)
|
||
|
->setArgument('filter_host', 'host')
|
||
|
->setArgument('filter_port', 10051)
|
||
|
->setArgument('filter_set', 1)
|
||
|
->getUrl()
|
||
|
);
|
||
|
$form = $this->query('name:zbx_filter')->waitUntilPresent()->asForm()->one();
|
||
|
$form->fill(['id:filter_evaltype' => $data['evaluation_type']]);
|
||
|
$this->setTags($data['tags']);
|
||
|
$form->submit();
|
||
|
$this->page->waitUntilReady();
|
||
|
// Check filtered result.
|
||
|
$this->assertTableData(CTestArrayHelper::get($data, 'result', []));
|
||
|
|
||
|
// Reset filter due to not influence further tests.
|
||
|
$form->query('button:Reset')->one()->click();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test the Enable and Disable link in the Host list.
|
||
|
*/
|
||
|
public function testPageHosts_EnableDisableLink() {
|
||
|
$this->page->login()->open('zabbix.php?action=host.list')->waitUntilReady();
|
||
|
$host_row = $this->query('class:list-table')->asTable()->one()->findRow('Name', 'Enabled status');
|
||
|
|
||
|
foreach (['Disabled' => HOST_STATUS_NOT_MONITORED, 'Enabled' => HOST_STATUS_MONITORED] as $status => $id) {
|
||
|
$host_row->getColumn('Status')->click();
|
||
|
$this->assertTrue($this->page->isAlertPresent());
|
||
|
$this->page->acceptAlert();
|
||
|
$this->page->waitUntilReady();
|
||
|
$this->assertMessage(TEST_GOOD, 'Host '.strtolower($status));
|
||
|
$this->assertEquals($status, $host_row->getColumn('Status')->getText());
|
||
|
$this->assertEquals($id, CDBHelper::getValue('SELECT status FROM hosts WHERE host='.zbx_dbstr('Enabled status')));
|
||
|
}
|
||
|
}
|
||
|
}
|