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.
zabbix/ui/tests/selenium/testTriggerDependencies.php

154 lines
5.3 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__).'/../include/helpers/CDataHelper.php';
require_once dirname(__FILE__).'/behaviors/CMessageBehavior.php';
use Facebook\WebDriver\WebDriverBy;
/**
* @backup trigger_depends, hosts_templates
*
* @onBefore prepareTemplateData
*/
class testTriggerDependencies extends CLegacyWebTest {
/**
* Attach MessageBehavior to the test.
*/
public function getBehaviors() {
return [CMessageBehavior::class];
}
const TEMPLATE_AGENT = 'Apache by Zabbix agent';
const TEMPLATE_FREEBSD = 'FreeBSD by Zabbix agent';
const TEMPLATE_APACHE = 'Apache by HTTP';
protected static $agent_templateid;
protected static $freebsd_templateid;
protected static $apache_templateid;
/**
* Function links Zabbix agent template to FreeBSD by Zabbix agent template.
*/
public static function prepareTemplateData() {
$template_ids = CDBHelper::getAll('SELECT hostid FROM hosts WHERE host IN ('.zbx_dbstr(self::TEMPLATE_AGENT).','.
zbx_dbstr(self::TEMPLATE_FREEBSD).','.zbx_dbstr(self::TEMPLATE_APACHE).') ORDER BY host ASC'
);
self::$apache_templateid = $template_ids[0]['hostid'];
self::$agent_templateid = $template_ids[1]['hostid'];
self::$freebsd_templateid = $template_ids[2]['hostid'];
CDataHelper::call('template.update', [
[
'templateid' => self::$freebsd_templateid,
'templates' => [
[
'templateid' => self::$agent_templateid
]
]
]
]);
}
/**
* @dataProvider getTriggerDependenciesData
*/
public function testTriggerDependenciesFromHost_SimpleTest($data) {
// Get the id of template to be updated based on the template that owns the trigger in dependencies tab.
$ids = [
self::TEMPLATE_AGENT => self::$agent_templateid,
self::TEMPLATE_APACHE => self::$apache_templateid
];
$update_id = ($data['template'] === self::TEMPLATE_APACHE) ? $ids[self::TEMPLATE_APACHE] : $ids[self::TEMPLATE_AGENT];
$this->zbxTestLogin('triggers.php?filter_set=1&context=template&filter_hostids[0]='.$update_id);
$this->zbxTestCheckTitle('Configuration of triggers');
$this->zbxTestClickLinkTextWait($data['trigger']);
$this->zbxTestClickWait('tab_dependenciesTab');
$this->zbxTestClick('add_dep_trigger');
$this->zbxTestLaunchOverlayDialog('Triggers');
$host = COverlayDialogElement::find()->one()->waitUntilReady()->query('class:multiselect-control')->asMultiselect()->one();
$host->fill([
'values' => $data['template'],
'context' => 'Templates'
]);
$this->zbxTestClickLinkTextWait($data['dependency']);
$this->zbxTestWaitUntilElementVisible(WebDriverBy::id('add_dep_trigger'));
$this->zbxTestClickWait('update');
if ($data['expected'] === TEST_BAD) {
$this->assertMessage(TEST_BAD, 'Cannot update trigger', $data['error_message']);
}
else {
$this->assertMessage(TEST_GOOD, 'Trigger updated');
}
}
public function getTriggerDependenciesData() {
return [
[
[
'expected' => TEST_BAD,
'trigger' => 'Apache: Host has been restarted',
'template' => self::TEMPLATE_FREEBSD,
'dependency' => 'FreeBSD: /etc/passwd has been changed on FreeBSD by Zabbix agent',
'error_message' => 'Trigger "Apache: Host has been restarted" cannot depend on the trigger'.
' "FreeBSD: /etc/passwd has been changed on {HOST.NAME}" from the template "FreeBSD by'.
' Zabbix agent", because dependencies on triggers from a child template or host are not allowed.'
]
],
[
[
'expected' => TEST_BAD,
'trigger' => 'Apache: Service is down',
'template' => self::TEMPLATE_APACHE,
'dependency' => 'Apache: Service response time is too high',
'error_message' => 'Trigger "Apache: Service is down" cannot depend on the trigger "Apache: Service response'.
' time is too high", because a circular linkage ("Apache: Service response time is too high" ->'.
' "Apache: Service is down" -> "Apache: Service response time is too high") would occur.'
]
],
[
[
'expected' => TEST_BAD,
'trigger' => 'Apache: Host has been restarted',
'template' => self::TEMPLATE_APACHE,
'dependency' => 'Apache: Host has been restarted',
'error_message' => 'Trigger "Apache: Host has been restarted" cannot depend on the trigger "Apache:'.
' Host has been restarted", because a circular linkage ("Apache: Host has been restarted" ->'.
' "Apache: Host has been restarted") would occur.'
]
],
[
[
'expected' => TEST_GOOD,
'trigger' => 'Apache: Host has been restarted',
'template' => self::TEMPLATE_APACHE,
'dependency' => 'Apache: Service is down'
]
]
];
}
}