diff options
Diffstat (limited to 'ui/tests/selenium/graphs/testFormGraphPrototype.php')
-rw-r--r-- | ui/tests/selenium/graphs/testFormGraphPrototype.php | 727 |
1 files changed, 727 insertions, 0 deletions
diff --git a/ui/tests/selenium/graphs/testFormGraphPrototype.php b/ui/tests/selenium/graphs/testFormGraphPrototype.php new file mode 100644 index 00000000000..66ed6a75791 --- /dev/null +++ b/ui/tests/selenium/graphs/testFormGraphPrototype.php @@ -0,0 +1,727 @@ +<?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__).'/../common/testFormGraphs.php'; + +/** + * @backup graphs + * + * @onBefore prepareGraphPrototypesData + * + * @onAfter clearData + */ +class testFormGraphPrototype extends testFormGraphs { + + protected $prototype = true; + protected $url = 'graphs.php?parent_discoveryid='.self::LLDID.'&context=host'; + + public function prepareGraphPrototypesData() { + self::$update_graph = 'Graph for update'; + + // Create item on given host. + $items = CDataHelper::call('item.create', [ + 'hostid' => self::HOSTID, + 'name' => 'item_graph_ptototype_test', + 'key_' => 'item_graph_ptototype_test', + 'type' => ITEM_TYPE_TRAPPER, + 'value_type' => ITEM_VALUE_TYPE_FLOAT + ]); + $this->assertArrayHasKey('itemids', $items); + self::$itemid = $items['itemids'][0]; + + // Create item prototypes on given host with given LLD. + foreach (self::$items['item_prototypes'] as $name => $fields) { + $item_prototypes_data[] = [ + 'hostid' => self::HOSTID, + 'ruleid' => self::LLDID, + 'name' => $name, + 'key_' => $name.'[{#KEY}]', + 'type' => ITEM_TYPE_TRAPPER, + 'value_type' => $fields['value_type'] + ]; + } + + $item_prototypes = CDataHelper::call('itemprototype.create', $item_prototypes_data); + $this->assertArrayHasKey('itemids', $item_prototypes); + $item_prototype_ids = CDataHelper::getIds('name'); + + foreach (['int', 'float', 'text', 'char'] as $suffix) { + $field = 'graph_prototype_trap_'.$suffix; + self::$items[$field]['itemid'] = $item_prototype_ids[$field]; + } + + // Create graphs with previously created items. + $prepared_graph_prototypes = [ + [ + 'name' => 'Graph for update', + 'itemid' => self::$items['graph_prototype_trap_int']['itemid'] + ], + [ + 'name' => 'Duplicated graph prototype', + 'itemid' => self::$items['graph_prototype_trap_int']['itemid'] + ], + [ + 'name' => 'Graph prototype for delete', + 'itemid' => self::$items['graph_prototype_trap_float']['itemid'] + ], + [ + 'name' => 'Graph prototype for clone', + 'itemid' => self::$items['graph_prototype_trap_int']['itemid'] + ], + [ + 'name' => 'Graph for items change', + 'itemid' => self::$items['graph_prototype_trap_int']['itemid'] + ] + ]; + + $graph_prototypes_data = []; + foreach ($prepared_graph_prototypes as $graph_prototype) { + $graph_prototypes_data[] = [ + 'name' => $graph_prototype['name'], + 'width' => 999, + 'height' => 222, + 'gitems' => [ + [ + 'itemid' => $graph_prototype['itemid'], + 'color'=> '5C6BC0' + ], + [ + 'itemid' => self::$itemid, + 'color'=> '66BB6A' + ] + ] + ]; + } + + CDataHelper::call('graphprototype.create', $graph_prototypes_data); + } + + /** + * @dataProvider getLayoutData + */ + public function testFormGraphPrototype_Layout($data) { + $this->checkGraphFormLayout($data); + } + + public function getGraphPrototypeData() { + return [ + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Empty item prototype {#KEY}' + ], + 'items' => [ + [ + 'item' => 'testFormItem' + ] + ], + 'details' => [ + 'Graph prototype "Empty item prototype {#KEY}" must have at least one item prototype.' + ] + ] + ], + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Empty color in item prototype {#KEY}' + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color' => '' + ] + ], + 'details' => [ + 'Empty color.' + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Normal graph prototype without LLD macro' + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1' + ] + ] + ] + ], + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Duplicated graph prototype' + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1' + ] + ], + 'details' => [ + 'Graph with name "Duplicated graph prototype" already exists in graphs or graph prototypes.' + ] + ] + ], + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Exploded graph prototype duplicated Graph sum type', + 'Graph type' => 'Exploded' + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'min' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype2', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'avg' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype3', + 'color'=> 'FFA001', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'last' + ] + ] + ], + 'details' => [ + 'Cannot add more than one item with type "Graph sum" on graph prototype "Exploded graph prototype'. + ' duplicated Graph sum type".' + ] + ] + ], + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Exploded graph prototype duplicated Graph sum type mixed', + 'Graph type' => 'Exploded' + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'min' + ] + ], + [ + 'item' => 'Response code for step "testFormWeb3" of scenario "testFormWeb3".', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'avg' + ] + ] + ], + 'details' => [ + 'Cannot add more than one item with type "Graph sum" on graph prototype "Exploded graph prototype '. + 'duplicated Graph sum type mixed".' + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Normal graph prototype with items in Y axis values {#KEY}', + 'Width' => 65535, + 'Height' => 65535, + 'Graph type' => CFormElement::RELOADABLE_FILL('Normal'), + 'Show legend' => false, + 'Show working time' => false, + 'Show triggers' => false, + 'id:visible_percent_left' => true, + 'id:visible_percent_right' => true, + 'id:percent_left' => 5.5, + 'id:percent_right' => 99.9, + 'id:ymin_type' => CFormElement::RELOADABLE_FILL('Item'), + 'id:ymax_type' => CFormElement::RELOADABLE_FILL('Item') + ], + 'yaxis_items' => [ + 'min' => 'testFormItemPrototype1', + 'max' => 'testFormItemPrototype2' + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> 'BBDEFB', + 'functions' => [ + 'calc_fnc' => 'min', + 'drawtype' => 'Bold line', + 'yaxisside' => 'Right' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype2', + 'color'=> 'FBC02D', + 'functions' => [ + 'calc_fnc' => 'avg', + 'drawtype' => 'Filled region', + 'yaxisside' => 'Left' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype3', + 'color'=> '7B1FA2', + 'functions' => [ + 'calc_fnc' => 'max', + 'drawtype' => 'Dot', + 'yaxisside' => 'Right' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype4', + 'color'=> 'FFE082', + 'functions' => [ + 'calc_fnc' => 'avg', + 'drawtype' => 'Dashed line', + 'yaxisside' => 'Right' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemReuse', + 'color'=> '7F3700', + 'functions' => [ + 'calc_fnc' => 'avg', + 'drawtype' => 'Gradient line', + 'yaxisside' => 'Left' + ] + ] + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Stacked graph prototype fixed Y axis values', + 'Width' => 20, + 'Height' => 20, + 'Graph type' => CFormElement::RELOADABLE_FILL('Stacked'), + 'Show legend' => true, + 'Show working time' => true, + 'Show triggers' => true, + 'id:ymin_type' => CFormElement::RELOADABLE_FILL('Fixed'), + 'id:ymax_type' => CFormElement::RELOADABLE_FILL('Fixed'), + 'id:yaxismin' => 0.1, + 'id:yaxismax' => 0.99 + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> '00897B', + 'functions' => [ + 'calc_fnc' => 'max', + 'yaxisside' => 'Right' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype2', + 'color'=> 'C3C3C3', + 'functions' => [ + 'calc_fnc' => 'avg', + 'yaxisside' => 'Left' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype3', + 'color'=> '00897B', + 'functions' => [ + 'calc_fnc' => 'min', + 'yaxisside' => 'Right' + ] + ] + ] + ] + ], + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Max equals min value'.($this->prototype ? ' {#KEY}' : NULL), + 'id:ymin_type' => CFormElement::RELOADABLE_FILL('Fixed'), + 'id:ymax_type' => CFormElement::RELOADABLE_FILL('Fixed'), + 'id:yaxismin' => 0.1, + 'id:yaxismax' => 0.1 + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1' + ] + ], + 'details' => [ + 'Y axis MAX value must be greater than Y axis MIN value.' + ] + ] + ], + [ + [ + 'expected' => TEST_BAD, + 'fields' => [ + 'Name' => 'Max less than min'.($this->prototype ? ' {#KEY}' : NULL), + 'id:ymin_type' => CFormElement::RELOADABLE_FILL('Fixed'), + 'id:ymax_type' => CFormElement::RELOADABLE_FILL('Fixed'), + 'id:yaxismin' => 0.2, + 'id:yaxismax' => 0.1 + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1' + ] + ], + 'details' => [ + 'Y axis MAX value must be greater than Y axis MIN value.' + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Pie graph prototype 3D false', + 'Graph type' => CFormElement::RELOADABLE_FILL('Pie'), + 'Show legend' => true, + '3D view' => false + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> 'D2D2D2', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'min' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype2', + 'color'=> 'C0CA33', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'avg' + ] + ] + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Pie graph 3D true', + 'Graph type' => CFormElement::RELOADABLE_FILL('Pie'), + 'Show legend' => false, + '3D view' => true + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype3', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'max' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype4', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'last' + ] + ] + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Exploded graph 3D true, mixed items', + 'Graph type' => CFormElement::RELOADABLE_FILL('Exploded'), + 'Show legend' => false, + '3D view' => true + ], + 'items' => [ + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'min' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype2', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'avg' + ] + ], + [ + 'item' => 'Response code for step "testFormWeb3" of scenario "testFormWeb3".', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'max' + ] + ], + [ + 'item' => 'Response code for step "testFormWeb4" of scenario "testFormWeb4".', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'last' + ] + ] + ] + ] + ], + [ + [ + 'fields' => [ + 'Name' => 'Exploded graph 3D false, mixed items', + 'Graph type' => CFormElement::RELOADABLE_FILL('Exploded'), + 'Show legend' => true, + '3D view' => false + ], + 'items' => [ + [ + 'item' => 'Response code for step "testFormWeb3" of scenario "testFormWeb3".', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'max' + ] + ], + [ + 'item' => 'Response code for step "testFormWeb4" of scenario "testFormWeb4".', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Graph sum', + 'calc_fnc' => 'last' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype1', + 'color'=> 'AB47BC', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'min' + ] + ], + [ + 'prototype' => true, + 'item' => 'testFormItemPrototype2', + 'color'=> 'FFA000', + 'functions' => [ + 'type' => 'Simple', + 'calc_fnc' => 'avg' + ] + ] + ] + ] + ] + ]; + } + + /** + * @dataProvider getCommonGraphData + * @dataProvider getGraphPrototypeData + */ + public function testFormGraphPrototype_Create($data) { + $this->checkGraphForm($data); + } + + /** + * @dataProvider getCommonGraphData + * @dataProvider getGraphPrototypeData + */ + public function testFormGraphPrototype_Update($data) { + $this->checkGraphForm($data, true); + } + + /** + * @dataProvider getCloneData + */ + public function testFormGraphPrototype_Clone($data) { + $this->checkClone($data); + } + + /** + * @dataProvider getNoChangesData + */ + public function testFormGraphPrototype_NoChanges($data) { + $this->checkNoChanges($data); + } + + public static function getItemPrototypeSettingsData() { + return [ + [ + [ + 'change' => [ + 'functions' => [ + 'calc_fnc' => 'avg', + 'drawtype' => 'Gradient line', + 'yaxisside' => 'Right' + ] + ], + 'expected' => [ + 'functions' => [ + 'calc_fnc' => 'avg', + 'drawtype' => 'Gradient line', + 'yaxisside' => 'Right' + ], + 'color' => '66BB6A' + ] + ] + ], + [ + [ + 'change' => [ + 'color' => 'FFBF00' + ], + 'expected' => [ + 'functions' => [ + 'calc_fnc' => 'avg', + 'drawtype' => 'Gradient line', + 'yaxisside' => 'Right' + ], + 'color' => 'FFBF00' + ] + ] + ], + [ + [ + 'change' => [ + 'functions' => [ + 'calc_fnc' => 'max', + 'drawtype' => 'Filled region', + 'yaxisside' => 'Left' + ], + 'color' => 'D7CCC8' + ], + 'expected' => [ + 'functions' => [ + 'calc_fnc' => 'max', + 'drawtype' => 'Filled region', + 'yaxisside' => 'Left' + ], + 'color' => 'D7CCC8' + ] + ] + ] + ]; + } + + /** + * @dataProvider getItemPrototypeSettingsData + */ + public function testFormGraphPrototype_ChangeItemSettings($data) { + $this->changeItemSettings($data); + } + + public function testFormGraphPrototype_Delete() { + $this->checkDelete(); + } + + public static function getTextItemPrototypesData() { + return [ + [ + [ + 'fields' => [ + 'Name' => 'Graph prototype of text items', + 'id:ymin_type' => CFormElement::RELOADABLE_FILL('Item'), + 'id:ymax_type' => CFormElement::RELOADABLE_FILL('Item') + ], + 'yaxis_items' => [ + 'min' => 'graph_prototype_trap_text', + 'max' => 'graph_prototype_trap_char' + ], + 'items' => [ + [ + 'item' => 'graph_prototype_trap_text', + 'item' => 'graph_prototype_trap_char' + ] + ] + ] + ] + ]; + } + + public function testFormGraphPrototype_TextItems() { + $data = [ + 'fields' => [ + 'Name' => 'Graph prototype of text items', + 'id:ymin_type' => CFormElement::RELOADABLE_FILL('Item'), + 'id:ymax_type' => CFormElement::RELOADABLE_FILL('Item') + ], + 'yaxis_items' => [ + 'min' => 'graph_prototype_trap_text', + 'max' => 'graph_prototype_trap_char' + ], + 'items' => [ + [ + 'item' => 'graph_prototype_trap_text', + 'item' => 'graph_prototype_trap_char' + ] + ] + ]; + + $this->checkTextItems($data); + } +} |