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.
154 lines
5.3 KiB
154 lines
5.3 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/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'
|
|
]
|
|
]
|
|
];
|
|
}
|
|
}
|