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/hosts/testPageHosts.php')
-rw-r--r--ui/tests/selenium/hosts/testPageHosts.php707
1 files changed, 707 insertions, 0 deletions
diff --git a/ui/tests/selenium/hosts/testPageHosts.php b/ui/tests/selenium/hosts/testPageHosts.php
new file mode 100644
index 00000000000..5aea0664dd6
--- /dev/null
+++ b/ui/tests/selenium/hosts/testPageHosts.php
@@ -0,0 +1,707 @@
+<?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';
+require_once dirname(__FILE__).'/../traits/TagTrait.php';
+require_once dirname(__FILE__).'/../traits/TableTrait.php';
+
+/**
+ * @dataSource TagFilter, Proxies
+ *
+ * @backup hosts
+ */
+class testPageHosts extends CLegacyWebTest {
+ public $HostName = 'ЗАББИКС Сервер';
+ public $HostGroup = 'Zabbix servers';
+ public $HostIp = '127.0.0.1';
+ public $HostPort = '10050';
+
+ use TagTrait;
+ use TableTrait;
+
+ 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,proxy_hostid,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 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);
+ $filter = $this->query('name:zbx_filter')->asForm()->one();
+ $filter->query('button:Reset')->one()->click();
+ $filter->getField('Name')->fill($this->HostName);
+ $filter->submit();
+ $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' =>'Form test template',
+ '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);
+ $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();
+ $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();
+ }
+}