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.
945 lines
28 KiB
945 lines
28 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';
|
||
|
|
||
|
use Facebook\WebDriver\WebDriverBy;
|
||
|
|
||
|
/**
|
||
|
* @backup icon_map
|
||
|
*/
|
||
|
class testFormAdministrationGeneralIconMapping extends CLegacyWebTest {
|
||
|
|
||
|
public function getCreateValidationData() {
|
||
|
return [
|
||
|
// Create icon mapping with empty name
|
||
|
[
|
||
|
[
|
||
|
'error' => 'Invalid parameter "/1/name": cannot be empty.',
|
||
|
'check_db' => false
|
||
|
]
|
||
|
],
|
||
|
// Create with spaces in name
|
||
|
[
|
||
|
[
|
||
|
'name' => ' ',
|
||
|
'error' => 'Invalid parameter "/1/name": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping one',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Create with existing name']
|
||
|
],
|
||
|
'error' => 'Icon map "Icon mapping one" already exists.',
|
||
|
'check_db' => false
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping create with backslash',
|
||
|
'mappings' => [
|
||
|
['expression' => '\\']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/1/expression": invalid regular expression.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Create with empty expression',
|
||
|
'error' => 'Invalid parameter "/1/mappings/1/expression": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping add two equals expressions',
|
||
|
'mappings' => [
|
||
|
['expression' => 'first expression'],
|
||
|
['expression' => 'first expression']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/2": value (inventory_link, expression)=(1, first expression) already exists.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping add empty second expressions',
|
||
|
'mappings' => [
|
||
|
['expression' => 'first expression'],
|
||
|
['expression' => '']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/2/expression": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping add not existen regular expression',
|
||
|
'mappings' => [
|
||
|
['expression' => '@regexpnotexist']
|
||
|
],
|
||
|
'error' => 'Global regular expression "regexpnotexist" does not exist.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping add not existen global regular expression',
|
||
|
'mappings' => [
|
||
|
['expression' => '@']
|
||
|
],
|
||
|
'error' => 'Global regular expression "" does not exist.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping without expressions',
|
||
|
'mappings' => [
|
||
|
['action' => 'remove']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1": the parameter "mappings" is missing.'
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getCreateValidationData
|
||
|
*
|
||
|
* Test validate icon mapping creation.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_CreateValidation($data) {
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.edit');
|
||
|
|
||
|
if (array_key_exists('name', $data)) {
|
||
|
$this->zbxTestInputTypeWait('iconmap_name', $data['name']);
|
||
|
}
|
||
|
|
||
|
// Input new row for Icon mapping
|
||
|
if (array_key_exists('mappings', $data)) {
|
||
|
$this->processExpressionRows($data['mappings']);
|
||
|
}
|
||
|
|
||
|
$this->zbxTestClick('add');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-bad', 'Cannot create icon map');
|
||
|
$this->zbxTestTextPresent($data['error']);
|
||
|
|
||
|
// Check the results in DB
|
||
|
if (!array_key_exists('check_db', $data) || $data['check_db'] === true) {
|
||
|
$this->assertEquals(0, CDBHelper::getCount('SELECT NULL FROM icon_map WHERE name='.zbx_dbstr($data['name'])));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function getCreateData() {
|
||
|
return [
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping testForm create default inventory and icons',
|
||
|
'mappings' => [
|
||
|
['expression' => '/!@#$%^&*()123abc']
|
||
|
],
|
||
|
'check_db' => true,
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping testForm create',
|
||
|
'mappings' => [
|
||
|
['expression' => 'test expression']
|
||
|
],
|
||
|
'inventory' => 'Alias',
|
||
|
'icon' => 'Crypto-router_(96)',
|
||
|
'default_icon' => 'Firewall_(96)',
|
||
|
'check_db' => true,
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'LongNameqwertyuioplkjhgfdsazxcvbnmqwertyuioplkjhgfdsazxcvbnmqwerr',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Create with long name']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Икона карты утф-8',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Выражение утф-8']
|
||
|
],
|
||
|
'inventory' => 'Name',
|
||
|
'icon' => 'House_(48)',
|
||
|
'default_icon' => 'Hub_(24)',
|
||
|
'check_db' => true,
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping add three expressions',
|
||
|
'mappings' => [
|
||
|
['expression' => 'first expression'],
|
||
|
['expression' => 'second expression'],
|
||
|
['expression' => 'third expression']
|
||
|
],
|
||
|
'check_db' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping remove and add one expressions',
|
||
|
'mappings' => [
|
||
|
['action' => 'remove'],
|
||
|
['expression' => 'one expression']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping remove and add two expressions',
|
||
|
'mappings' => [
|
||
|
['action' => 'remove'],
|
||
|
['expression' => 'first expression'],
|
||
|
['expression' => 'second expression']
|
||
|
],
|
||
|
'screenshot' => true
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getCreateData
|
||
|
*
|
||
|
* Test creation of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_Create($data) {
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.edit');
|
||
|
|
||
|
$this->zbxTestInputTypeWait('iconmap_name', $data['name']);
|
||
|
|
||
|
if (array_key_exists('inventory', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap_mappings_new0_inventory_link', $data['inventory']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('icon', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap_mappings_new0_iconid', $data['icon']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('default_icon', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[default_iconid]', $data['default_icon']);
|
||
|
}
|
||
|
|
||
|
// Input new row for Icon mapping.
|
||
|
if (array_key_exists('mappings', $data)) {
|
||
|
$this->processExpressionRows($data['mappings']);
|
||
|
}
|
||
|
|
||
|
// Take a screenshot to test draggable object position of icon mappings.
|
||
|
if (array_key_exists('screenshot', $data)) {
|
||
|
$form = $this->query('id:iconmap')->waitUntilVisible()->one()->asForm();
|
||
|
$this->page->removeFocus();
|
||
|
$this->assertScreenshot($form->query('id:iconmap_list')->waitUntilPresent()->one(), 'Icon mapping');
|
||
|
}
|
||
|
|
||
|
$this->zbxTestClick('add');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Icon map created');
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestCheckHeader('Icon mapping');
|
||
|
|
||
|
// Check the results in DB.
|
||
|
if (array_key_exists('check_db', $data) && $data['check_db'] === true) {
|
||
|
$expressions = [];
|
||
|
|
||
|
foreach ($data['mappings'] as $options) {
|
||
|
$expressions[] = $options['expression'];
|
||
|
}
|
||
|
|
||
|
$sql = 'SELECT null FROM icon_map LEFT JOIN icon_mapping'
|
||
|
.' ON icon_map.iconmapid = icon_mapping.iconmapid WHERE icon_map.name = '.zbx_dbstr($data['name'])
|
||
|
.' AND '.dbConditionString('icon_mapping.expression', $expressions);
|
||
|
|
||
|
$this->assertEquals(count($expressions), CDBHelper::getCount($sql));
|
||
|
}
|
||
|
|
||
|
// Check the results in form
|
||
|
if (array_key_exists('check_form', $data) && $data['check_form'] === true) {
|
||
|
$defaults = [
|
||
|
'inventory' => 'Type',
|
||
|
'icon' => 'Cloud_(24)',
|
||
|
'default_icon' => 'Cloud_(24)'
|
||
|
];
|
||
|
|
||
|
foreach ($defaults as $field => $value) {
|
||
|
if (!array_key_exists($field, $data)) {
|
||
|
$data[$field] = $value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->checkFormFields($data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test cancel creation of icon mapping
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_CancelCreation() {
|
||
|
$sql_hash = 'SELECT * FROM icon_map ORDER BY iconmapid';
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.edit');
|
||
|
$this->zbxTestInputTypeWait('iconmap_name', 'CancelCreation');
|
||
|
$this->zbxTestInputTypeWait('iconmap_mappings_new0_expression', 'CancelCreation');
|
||
|
$this->zbxTestClick('cancel');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestCheckHeader('Icon mapping');
|
||
|
$this->zbxTestTextNotPresent('CancelCreation');
|
||
|
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test update without any modification of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_SimpleUpdate() {
|
||
|
$sql_icon_map = 'SELECT * FROM icon_map ORDER BY iconmapid';
|
||
|
$old_icon_map = CDBHelper::getHash($sql_icon_map);
|
||
|
|
||
|
$sql_expression_hash = 'SELECT * FROM icon_mapping ORDER BY iconmappingid';
|
||
|
$old_expression = CDBHelper::getHash($sql_expression_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
|
||
|
foreach (CDBHelper::getAll('SELECT name FROM icon_map') as $iconmap) {
|
||
|
$this->zbxTestClickLinkText($iconmap['name']);
|
||
|
$this->zbxTestWaitForPageToLoad();
|
||
|
$this->zbxTestClickWait('update');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Icon map updated');
|
||
|
}
|
||
|
|
||
|
$this->assertEquals($old_icon_map, CDBHelper::getHash($sql_icon_map));
|
||
|
$this->assertEquals($old_expression, CDBHelper::getHash($sql_expression_hash));
|
||
|
}
|
||
|
|
||
|
public function getUpdateValidationData() {
|
||
|
return [
|
||
|
// Update with empty name.
|
||
|
[
|
||
|
[
|
||
|
'name' => '',
|
||
|
'error' => 'Invalid parameter "/1/name": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
// Update with existing name.
|
||
|
[
|
||
|
[
|
||
|
'name' => 'Icon mapping one',
|
||
|
'error' => 'Icon map "Icon mapping one" already exists.'
|
||
|
]
|
||
|
],
|
||
|
// Expression with backslash
|
||
|
[
|
||
|
[
|
||
|
'mappings' => [
|
||
|
['expression' => '\\', 'action' => 'update']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/1/expression": invalid regular expression.'
|
||
|
]
|
||
|
],
|
||
|
// Empty expression
|
||
|
[
|
||
|
[
|
||
|
'mappings' => [
|
||
|
['expression' => '', 'action' => 'update']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/1/expression": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
// Not existen regular expression
|
||
|
[
|
||
|
[
|
||
|
'mappings' => [
|
||
|
['expression' => '@regexpnotexist', 'action' => 'update']
|
||
|
],
|
||
|
'error' => 'Global regular expression "regexpnotexist" does not exist.'
|
||
|
]
|
||
|
],
|
||
|
// Remove expression
|
||
|
[
|
||
|
[
|
||
|
'mappings' => [
|
||
|
['action' => 'remove']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
// Add the same second expression as the first
|
||
|
[
|
||
|
[
|
||
|
'inventory' => 'Alias',
|
||
|
'mappings' => [
|
||
|
['expression' => '(1!@#$%^-=2*)']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/2": value (inventory_link, expression)=(4, (1!@#$%^-=2*)) already exists.'
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getUpdateValidationData
|
||
|
*
|
||
|
* Test validate icon mapping updating
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_UpdateValidation($data) {
|
||
|
$update_icon = 'Icon mapping for update';
|
||
|
$sql_hash = 'SELECT icon_map.name, icon_mapping.expression FROM icon_map LEFT JOIN icon_mapping'
|
||
|
.' ON icon_map.iconmapid = icon_mapping.iconmapid WHERE icon_map.name = '.zbx_dbstr($update_icon);
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($update_icon);
|
||
|
$this->zbxTestWaitForPageToLoad();
|
||
|
|
||
|
if (array_key_exists('name', $data)) {
|
||
|
$this->zbxTestWaitUntilElementVisible(WebDriverBy::id('iconmap_name'));
|
||
|
$this->zbxTestInputType('iconmap_name', $data['name']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('mappings', $data)) {
|
||
|
$this->processExpressionRows($data['mappings']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('inventory', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap_mappings_new0_inventory_link', $data['inventory']);
|
||
|
}
|
||
|
|
||
|
$this->zbxTestClick('update');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-bad', 'Cannot update icon map');
|
||
|
$this->zbxTestTextPresent($data['error']);
|
||
|
|
||
|
// Check the results in DB
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
public function getUpdateData() {
|
||
|
return [
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping testForm update expression',
|
||
|
'mappings' => [
|
||
|
['expression' => '/!@#$%^&*()123updated', 'action' => 'update']
|
||
|
],
|
||
|
'check_db' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping testForm update expression',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Test expression updated', 'action' => 'update']
|
||
|
],
|
||
|
'inventory' => 'Serial number B',
|
||
|
'icon' => 'Firewall_(96)',
|
||
|
'default_icon' => 'Crypto-router_(96)',
|
||
|
'check_db' => true,
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping testForm update expression',
|
||
|
'name' => 'LongNameqwertyuioplkjhgfdsazxcvbnmqwertyuioplkjhgfdsaz0123456789',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Update with long name', 'action' => 'update']
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping for update',
|
||
|
'name' => 'Икона карты обновленна утф-8',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Выражение обновленно утф-8', 'action' => 'update']
|
||
|
],
|
||
|
'inventory' => 'Name',
|
||
|
'icon' => 'House_(48)',
|
||
|
'default_icon' => 'Hub_(24)',
|
||
|
'check_db' => true,
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping one',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Updated expression 1', 'action' => 'update'],
|
||
|
['expression' => 'Updated expression 2', 'action' => 'update']
|
||
|
],
|
||
|
'inventory' => 'Name',
|
||
|
'icon' => 'House_(48)',
|
||
|
'default_icon' => 'Hub_(24)',
|
||
|
'check_db' => true,
|
||
|
'check_form' => true
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getUpdateData
|
||
|
*
|
||
|
* Test updating of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_Update($data) {
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($data['old_name']);
|
||
|
$this->zbxTestWaitForPageToLoad();
|
||
|
|
||
|
if (array_key_exists('name', $data)) {
|
||
|
$this->zbxTestInputTypeOverwrite('iconmap_name', $data['name']);
|
||
|
}
|
||
|
else {
|
||
|
$data['name'] = $data['old_name'];
|
||
|
}
|
||
|
|
||
|
// Input new row for Icon mapping
|
||
|
if (array_key_exists('mappings', $data)) {
|
||
|
$this->processExpressionRows($data['mappings']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('inventory', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[mappings][0][inventory_link]', $data['inventory']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('icon', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[mappings][0][iconid]', $data['icon']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('default_icon', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[default_iconid]', $data['default_icon']);
|
||
|
}
|
||
|
|
||
|
$this->zbxTestClick('update');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Icon map updated');
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestCheckHeader('Icon mapping');
|
||
|
|
||
|
if (array_key_exists('check_db', $data)) {
|
||
|
$expressions = [];
|
||
|
|
||
|
foreach ($data['mappings'] as $options) {
|
||
|
$expressions[] = $options['expression'];
|
||
|
}
|
||
|
|
||
|
$result = DBselect("SELECT icon_map.name, icon_mapping.expression FROM icon_map LEFT JOIN icon_mapping "
|
||
|
."ON icon_map.iconmapid = icon_mapping.iconmapid WHERE icon_map.name = ".zbx_dbstr($data['name'])
|
||
|
.' AND '.dbConditionString('icon_mapping.expression', $expressions)
|
||
|
.' ORDER BY icon_mapping.sortorder');
|
||
|
|
||
|
$e = 0;
|
||
|
while ($row = DBfetch($result)) {
|
||
|
$this->assertEquals($row['name'], $data['name']);
|
||
|
|
||
|
$mapping_row = $data['mappings'][$e];
|
||
|
$this->assertEquals($row['expression'], $mapping_row['expression']);
|
||
|
|
||
|
$e++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Check the results in form
|
||
|
if (array_key_exists('check_form', $data)) {
|
||
|
$this->checkFormFields($data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test cancel update of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_CancelUpdating() {
|
||
|
$sql_hash = 'SELECT * FROM icon_map ORDER BY iconmapid';
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
|
||
|
foreach (CDBHelper::getAll('SELECT name FROM icon_map LIMIT 1') as $iconmap) {
|
||
|
$this->zbxTestClickLinkText($iconmap['name']);
|
||
|
$this->zbxTestInputTypeOverwrite('iconmap_name', $iconmap['name'].' (updated)');
|
||
|
$this->zbxTestClick('cancel');
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestCheckHeader('Icon mapping');
|
||
|
$this->zbxTestTextNotPresent($iconmap['name'].' (updated)');
|
||
|
}
|
||
|
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
public function getCloneValidationData() {
|
||
|
return [
|
||
|
[
|
||
|
[
|
||
|
'new_name' => 'Icon mapping one',
|
||
|
'error' => 'Icon map "Icon mapping one" already exists.'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'new_name' => '',
|
||
|
'error' => 'Invalid parameter "/1/name": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
// Icon mapping clone with backslash.
|
||
|
[
|
||
|
[
|
||
|
'new_name' => 'CLONE: Icon mapping update expression with two backslash',
|
||
|
'mappings' => [
|
||
|
['expression' => '\\', 'action' => 'update']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/1/expression": invalid regular expression.'
|
||
|
]
|
||
|
],
|
||
|
// Clone with empty expression.
|
||
|
[
|
||
|
[
|
||
|
'new_name' => 'CLONE: with empty expression',
|
||
|
'mappings' => [
|
||
|
['expression' => '', 'action' => 'update']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/1/expression": cannot be empty.'
|
||
|
]
|
||
|
],
|
||
|
// Clone and remove expressions.
|
||
|
[
|
||
|
[
|
||
|
'new_name' => 'CLONE: with empty mappings',
|
||
|
'mappings' => [
|
||
|
['action' => 'remove'],
|
||
|
['action' => 'remove'],
|
||
|
['action' => 'remove'],
|
||
|
['action' => 'remove']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1": the parameter "mappings" is missing.'
|
||
|
]
|
||
|
],
|
||
|
// Clone and change first expression name as the second expression name.
|
||
|
[
|
||
|
[
|
||
|
'new_name' => 'CLONE: change first expression name as the second expression name',
|
||
|
'mappings' => [
|
||
|
['expression' => 'expression 2 for clone', 'action' => 'update']
|
||
|
],
|
||
|
'error' => 'Invalid parameter "/1/mappings/2": value (inventory_link, expression)=(1, expression 2 for clone) already exists.'
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getCloneValidationData
|
||
|
*
|
||
|
* Test cloning of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_CloneValidation($data) {
|
||
|
$name = 'Icon mapping to check clone functionality';
|
||
|
$sql_hash = 'SELECT icon_map.name, icon_mapping.expression FROM icon_map LEFT JOIN icon_mapping'
|
||
|
.' ON icon_map.iconmapid = icon_mapping.iconmapid WHERE icon_map.name = '.zbx_dbstr($name);
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($name);
|
||
|
$this->zbxTestClickWait('clone');
|
||
|
$this->zbxTestWaitForPageToLoad();
|
||
|
|
||
|
$this->zbxTestInputType('iconmap_name', $data['new_name']);
|
||
|
if (array_key_exists('mappings', $data)) {
|
||
|
$this->processExpressionRows($data['mappings']);
|
||
|
}
|
||
|
|
||
|
$this->zbxTestClick('add');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-bad', 'Cannot create icon map');
|
||
|
$this->zbxTestTextPresent($data['error']);
|
||
|
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
public function getCloneData() {
|
||
|
return [
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping to check clone functionality',
|
||
|
'name' => 'CLONE: Икона карты обновленна утф-8',
|
||
|
'check_db' => '4'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping to check clone functionality',
|
||
|
'name' => 'Clone Icon mapping with expression update',
|
||
|
'mappings' => [
|
||
|
['expression' => '/!@#$%^&*()123updated', 'action' => 'update']
|
||
|
],
|
||
|
'check_db' => '4'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping to check clone functionality',
|
||
|
'name' => 'CLONE: Icon mapping testForm create',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Test expression updated', 'action' => 'update']
|
||
|
],
|
||
|
'inventory' => 'Serial number B',
|
||
|
'icon' => 'Firewall_(96)',
|
||
|
'default_icon' => 'Crypto-router_(96)',
|
||
|
'check_db' => '4',
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping to check clone functionality',
|
||
|
'name' => 'LongNameqwertyuioplkjhg0123456789mqwertyuioplkjhgfdsazxcvbnmqwer',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Update with long name', 'action' => 'update']
|
||
|
],
|
||
|
'check_db' => '4'
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping to check clone functionality',
|
||
|
'name' => 'Икона карты кирилица утф-8',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Выражение обновленно кирилица утф-8', 'action' => 'update']
|
||
|
],
|
||
|
'inventory' => 'Name',
|
||
|
'icon' => 'House_(48)',
|
||
|
'default_icon' => 'Hub_(24)',
|
||
|
'check_db' => '4',
|
||
|
'check_form' => true
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
[
|
||
|
'old_name' => 'Icon mapping to check clone functionality',
|
||
|
'name' => 'Add one more expression',
|
||
|
'mappings' => [
|
||
|
['expression' => 'Выражение обновленно кирилица утф-8', 'action' => 'update'],
|
||
|
['expression' => 'New second expression', 'action' => 'update']
|
||
|
],
|
||
|
'inventory' => 'Name',
|
||
|
'icon' => 'House_(48)',
|
||
|
'default_icon' => 'Hub_(24)',
|
||
|
'check_db' => '4',
|
||
|
'check_form' => true
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider getCloneData
|
||
|
*
|
||
|
* Test cloning of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_Clone($data) {
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($data['old_name']);
|
||
|
$this->zbxTestClickWait('clone');
|
||
|
if (array_key_exists('name', $data)) {
|
||
|
$this->zbxTestInputTypeOverwrite('iconmap_name', $data['name']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('mappings', $data)) {
|
||
|
$this->processExpressionRows($data['mappings']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('inventory', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[mappings][0][inventory_link]', $data['inventory']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('icon', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[mappings][0][iconid]', $data['icon']);
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('default_icon', $data)) {
|
||
|
$this->zbxTestDropdownSelect('iconmap[default_iconid]', $data['default_icon']);
|
||
|
}
|
||
|
|
||
|
$this->zbxTestClick('add');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Icon map created');
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestCheckHeader('Icon mapping');
|
||
|
|
||
|
// Check the results in DB.
|
||
|
if (array_key_exists('check_db', $data)) {
|
||
|
$this->assertEquals($data['check_db'], CDBHelper::getCount('SELECT icon_map.name, icon_mapping.expression FROM icon_map'
|
||
|
.' LEFT JOIN icon_mapping ON icon_map.iconmapid = icon_mapping.iconmapid'
|
||
|
.' WHERE icon_map.name = '.zbx_dbstr($data['name'])));
|
||
|
}
|
||
|
|
||
|
// Check the results in form
|
||
|
if (array_key_exists('check_form', $data)) {
|
||
|
$this->checkFormFields($data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test cancel cloning of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_CancelCloning() {
|
||
|
$sql_hash = 'SELECT * FROM icon_map ORDER BY iconmapid';
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
|
||
|
foreach (CDBHelper::getAll('SELECT name FROM icon_map LIMIT 2') as $iconmap) {
|
||
|
$this->zbxTestClickLinkText($iconmap['name']);
|
||
|
$this->zbxTestInputTypeOverwrite('iconmap_name', $iconmap['name'].' (cloned)');
|
||
|
$this->zbxTestClickWait('clone');
|
||
|
$this->zbxTestClick('cancel');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestCheckHeader('Icon mapping');
|
||
|
$this->zbxTestTextNotPresent($iconmap['name'].' (cloned)');
|
||
|
}
|
||
|
|
||
|
// Check the results in DB
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test deleting of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_Delete() {
|
||
|
$name = 'Icon mapping to check delete functionality';
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($name);
|
||
|
$this->zbxTestClickAndAcceptAlert('delete');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-good', 'Icon map deleted');
|
||
|
|
||
|
// Check the results in DB.
|
||
|
$sql = 'SELECT * FROM icon_map WHERE name='.zbx_dbstr($name);
|
||
|
$this->assertEquals(0, CDBHelper::getCount($sql));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test cancel deleting of icon mapping.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_CancelDelete() {
|
||
|
$name = 'Icon mapping one';
|
||
|
|
||
|
$sql_hash = 'SELECT * FROM icon_map ORDER BY iconmapid';
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($name);
|
||
|
$this->zbxTestClickWait('delete');
|
||
|
$this->zbxTestDismissAlert();
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
|
||
|
// Check the results in DB
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Try delete icon mapping used in map.
|
||
|
*/
|
||
|
public function testFormAdministrationGeneralIconMapping_DeleteUsedInMap() {
|
||
|
$name = 'used_by_map';
|
||
|
|
||
|
$sql_hash = 'SELECT * FROM icon_map WHERE name='.zbx_dbstr($name).' ORDER BY iconmapid';
|
||
|
$old_hash = CDBHelper::getHash($sql_hash);
|
||
|
|
||
|
$this->zbxTestLogin('zabbix.php?action=iconmap.list');
|
||
|
$this->zbxTestClickLinkTextWait($name);
|
||
|
$this->zbxTestClickAndAcceptAlert('delete');
|
||
|
|
||
|
// Check the results in frontend.
|
||
|
$this->zbxTestCheckTitle('Configuration of icon mapping');
|
||
|
$this->zbxTestWaitUntilMessageTextPresent('msg-bad', 'Icon map "'.$name.'" cannot be deleted. Used in map');
|
||
|
|
||
|
// Check the results in DB.
|
||
|
$sql = 'SELECT * FROM icon_map WHERE name='.zbx_dbstr($name);
|
||
|
$this->assertEquals($old_hash, CDBHelper::getHash($sql_hash));
|
||
|
}
|
||
|
|
||
|
private function checkFormFields($data) {
|
||
|
$this->zbxTestClickLinkTextWait($data['name']);
|
||
|
$this->zbxTestAssertElementValue('iconmap_name', $data['name']);
|
||
|
$this->zbxTestAssertElementValue('iconmap_mappings_0_expression', $data['mappings'][0]['expression']);
|
||
|
$this->zbxTestDropdownAssertSelected('iconmap[mappings][0][inventory_link]', $data['inventory']);
|
||
|
$this->zbxTestDropdownAssertSelected('iconmap[mappings][0][iconid]', $data['icon']);
|
||
|
$this->zbxTestDropdownAssertSelected('iconmap[default_iconid]', $data['default_icon']);
|
||
|
}
|
||
|
|
||
|
private function processExpressionRows($rows) {
|
||
|
foreach ($rows as $i => $mapping_row) {
|
||
|
switch (CTestArrayHelper::get($mapping_row, 'action', 'add')) {
|
||
|
case 'add':
|
||
|
if (!$this->zbxTestElementPresentId('iconmap_mappings_new'.$i.'_expression')) {
|
||
|
$this->zbxTestClick('addMapping');
|
||
|
}
|
||
|
$this->zbxTestInputTypeWait('iconmap_mappings_new'.$i.'_expression', $mapping_row['expression']);
|
||
|
break;
|
||
|
|
||
|
case 'update':
|
||
|
if (!$this->zbxTestElementPresentId('iconmap_mappings_'.$i.'_expression')) {
|
||
|
$this->zbxTestClick('addMapping');
|
||
|
$this->zbxTestWaitUntilElementVisible(WebDriverBy::id('iconmap_mappings_'.$i.'_expression'));
|
||
|
}
|
||
|
$this->zbxTestInputType('iconmap_mappings_'.$i.'_expression', $mapping_row['expression']);
|
||
|
break;
|
||
|
|
||
|
case 'remove':
|
||
|
if ($this->zbxTestIsElementPresent('//tr[@id="iconmapidRow_new'.$i.'"]//button[@name="remove"]')) {
|
||
|
$this->zbxTestClickXpathWait('//tr[@id="iconmapidRow_new'.$i.'"]//button[@name="remove"]');
|
||
|
}
|
||
|
else {
|
||
|
$this->zbxTestClickXpathWait('//tr[@id="iconmapidRow_'.$i.'"]//button[@name="remove"]');
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|