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.
324 lines
9.6 KiB
324 lines
9.6 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/CIntegrationTest.php';
|
|
require_once dirname(__FILE__).'/../include/helpers/CDataHelper.php';
|
|
|
|
/**
|
|
* Test suite for graph linking.
|
|
*
|
|
* @required-components server
|
|
* @configurationDataProvider serverConfigurationProvider
|
|
* @hosts test_graph_linking
|
|
* @backup history
|
|
*/
|
|
class testGraphLinking extends CIntegrationTest {
|
|
const HOST_NAME = 'test_graph_linking';
|
|
|
|
const TEMPLATE_NAME_PRE = 'strata_template_name';
|
|
|
|
const ITEM_NAME_PRE = 'strata_item_name';
|
|
const ITEM_KEY_PRE = 'strata_item_key';
|
|
|
|
const GRAPH_HEIGHT = 33;
|
|
const GRAPH_WIDTH = 319;
|
|
const GRAPH_NAME_PRE = 'strata_graph_name';
|
|
const GRAPH_TYPE = 1;
|
|
const GRAPH_PERCENT_LEFT = 1;
|
|
const GRAPH_PERCENT_RIGHT = 100;
|
|
const GRAPH_SHOW_3D = 1;
|
|
const GRAPH_SHOW_LEGEND = 1;
|
|
const GRAPH_SHOW_WORK_PERIOD = 1;
|
|
const GRAPH_SHOW_TRIGGERS = 1;
|
|
const GRAPH_YAXISMAX = 417;
|
|
const GRAPH_YAXISMIN = 18;
|
|
|
|
const GRAPH_YMAX_TYPE = 2;
|
|
const GRAPH_YMIN_TYPE = 1;
|
|
|
|
const GRAPH_ITEM_COLOR = '00AA';
|
|
|
|
const NUMBER_OF_TEMPLATES = 5;
|
|
const NUMBER_OF_GRAPHS_PER_TEMPLATE = 5;
|
|
|
|
private static $templateids = array();
|
|
private static $stringids = array();
|
|
private static $colors = array();
|
|
|
|
public function createTemplates() {
|
|
|
|
for ($i = 0; $i < self::NUMBER_OF_TEMPLATES; $i++) {
|
|
|
|
$response = $this->call('template.create', [
|
|
'host' => self::TEMPLATE_NAME_PRE . "_" . $i,
|
|
'groups' => [
|
|
'groupid' => 1
|
|
]]);
|
|
|
|
$this->assertArrayHasKey('templateids', $response['result']);
|
|
$this->assertArrayHasKey(0, $response['result']['templateids']);
|
|
|
|
array_push(self::$templateids, $response['result']['templateids'][0]);
|
|
}
|
|
}
|
|
|
|
public function setupActions()
|
|
{
|
|
$response = $this->call('action.create', [
|
|
'name' => 'create_host',
|
|
'eventsource' => EVENT_SOURCE_AUTOREGISTRATION,
|
|
'status' => 0,
|
|
'operations' => [
|
|
[
|
|
'operationtype' => OPERATION_TYPE_HOST_ADD
|
|
]
|
|
]
|
|
]);
|
|
$ep = json_encode($response, JSON_PRETTY_PRINT);
|
|
|
|
$this->assertArrayHasKey('actionids', $response['result'], $ep);
|
|
$this->assertEquals(1, count($response['result']['actionids']), $ep);
|
|
|
|
$templateids_for_api_call = [];
|
|
foreach (self::$templateids as $entry) {
|
|
$t = ['templateid' => $entry];
|
|
array_push($templateids_for_api_call, $t);
|
|
}
|
|
$response = $this->call('action.create', [
|
|
'name' => 'link_templates',
|
|
'eventsource' => EVENT_SOURCE_AUTOREGISTRATION,
|
|
'status' => 0,
|
|
'operations' => [
|
|
[
|
|
'operationtype' => OPERATION_TYPE_TEMPLATE_ADD,
|
|
'optemplate' =>
|
|
$templateids_for_api_call
|
|
]
|
|
]
|
|
]);
|
|
$ep = json_encode($response, JSON_PRETTY_PRINT);
|
|
|
|
$this->assertArrayHasKey('actionids', $response['result'], $ep);
|
|
$this->assertEquals(1, count($response['result']['actionids']), $ep);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function prepareData() {
|
|
|
|
$z = 'a';
|
|
for ($i = 0; $i < self::NUMBER_OF_TEMPLATES * self::NUMBER_OF_GRAPHS_PER_TEMPLATE; $i++)
|
|
{
|
|
array_push(self::$stringids, $z);
|
|
array_push(self::$colors, dechex(16 + $i));
|
|
$z++;
|
|
}
|
|
sort(self::$stringids);
|
|
|
|
$this->createTemplates();
|
|
|
|
$itemids = array();
|
|
|
|
for ($i = 0; $i < self::NUMBER_OF_TEMPLATES * self::NUMBER_OF_GRAPHS_PER_TEMPLATE; $i++) {
|
|
$templ_counter = floor($i / self::NUMBER_OF_TEMPLATES);
|
|
$templateid_loc = self::$templateids[$templ_counter];
|
|
$response = $this->call('item.create', [
|
|
'hostid' => $templateid_loc,
|
|
'name' => self::ITEM_NAME_PRE . "_" . self::$stringids[$i],
|
|
'key_' => self::ITEM_KEY_PRE . "_" . self::$stringids[$i],
|
|
'type' => ITEM_TYPE_TRAPPER,
|
|
'value_type' => ITEM_VALUE_TYPE_UINT64
|
|
]);
|
|
|
|
$this->assertArrayHasKey('itemids', $response['result']);
|
|
$this->assertEquals(1, count($response['result']['itemids']));
|
|
$itemid = $response['result']['itemids'][0];
|
|
array_push($itemids, $itemid);
|
|
}
|
|
sort($itemids);
|
|
|
|
for ($i = 0; $i < self::NUMBER_OF_TEMPLATES * self::NUMBER_OF_GRAPHS_PER_TEMPLATE; $i++) {
|
|
|
|
$response = $this->call('graph.create', [
|
|
'height' => self::GRAPH_HEIGHT + $i,
|
|
'width' => self::GRAPH_WIDTH + $i,
|
|
'name' => self::GRAPH_NAME_PRE . '_' . self::$stringids[$i],
|
|
'graphtype' => self::GRAPH_TYPE,
|
|
'percent_left' => self::GRAPH_PERCENT_LEFT + $i,
|
|
'percent_right' => self::GRAPH_PERCENT_RIGHT - $i,
|
|
'show_3d' => self::GRAPH_SHOW_3D,
|
|
'show_legend' => self::GRAPH_SHOW_LEGEND,
|
|
'show_work_period' => self::GRAPH_SHOW_WORK_PERIOD,
|
|
'show_triggers' => self::GRAPH_SHOW_TRIGGERS,
|
|
'yaxismax' => self::GRAPH_YAXISMAX + $i,
|
|
'yaxismin' => self::GRAPH_YAXISMIN + $i,
|
|
'ymax_itemid' => $itemids[$i],
|
|
'ymax_type' => self::GRAPH_YMAX_TYPE,
|
|
'ymin_type' => self::GRAPH_YMIN_TYPE,
|
|
|
|
'gitems' => [
|
|
[
|
|
'itemid' => $itemids[$i],
|
|
'color' => self::GRAPH_ITEM_COLOR . self::$colors[$i]
|
|
]
|
|
]
|
|
]);
|
|
}
|
|
|
|
$this->setupActions();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Component configuration provider for server related tests.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function serverConfigurationProvider() {
|
|
return [
|
|
self::COMPONENT_SERVER => [
|
|
'DebugLevel' => 4,
|
|
'LogFileSize' => 0,
|
|
'LogFile' => self::getLogPath(self::COMPONENT_SERVER),
|
|
'PidFile' => PHPUNIT_COMPONENT_DIR.'zabbix_server.pid',
|
|
'SocketDir' => PHPUNIT_COMPONENT_DIR,
|
|
'ListenPort' => self::getConfigurationValue(self::COMPONENT_SERVER, 'ListenPort', 10051)
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Component configuration provider for agent related tests.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function agentConfigurationProvider() {
|
|
return [
|
|
self::COMPONENT_AGENT => [
|
|
'Hostname' => self::HOST_NAME,
|
|
'ServerActive' =>
|
|
'127.0.0.1:'.self::getConfigurationValue(self::COMPONENT_SERVER, 'ListenPort', 10051),
|
|
'DebugLevel' => 4,
|
|
'LogFileSize' => 0,
|
|
'PidFile' => PHPUNIT_COMPONENT_DIR.'zabbix_agent.pid'
|
|
]
|
|
];
|
|
}
|
|
|
|
public function checkGraphsCreate() {
|
|
$response = $this->callUntilDataIsPresent('host.get', ['filter' => ['host' => self::HOST_NAME]], 10, 1);
|
|
$this->assertArrayHasKey(0, $response['result']);
|
|
$this->assertArrayHasKey('host', $response['result'][0]);
|
|
$hostid = $response['result'][0]['hostid'];
|
|
|
|
$response = $this->callUntilDataIsPresent('item.get', [
|
|
'hostids' => $hostid,
|
|
'search' => ['key_' => self::ITEM_KEY_PRE]
|
|
], 10, 1);
|
|
|
|
$this->assertArrayHasKey(0, $response['result']);
|
|
$item_data = $response['result'];
|
|
|
|
$itemids = array();
|
|
foreach ($item_data as $entry) {
|
|
array_push($itemids, $entry['itemid']);
|
|
}
|
|
sort($itemids);
|
|
|
|
$response = $this->callUntilDataIsPresent('graph.get', [
|
|
'selectTags' => 'extend',
|
|
'filter' => [
|
|
'host' => self::HOST_NAME
|
|
],
|
|
'output' => [
|
|
'graphid',
|
|
'height',
|
|
'width',
|
|
'name',
|
|
'graphtype',
|
|
'percent_left',
|
|
'percent_right',
|
|
'show_3d',
|
|
'show_legend',
|
|
'show_work_period',
|
|
'show_triggers',
|
|
'yaxismax',
|
|
'yaxismin',
|
|
'ymax_itemid',
|
|
'ymax_type',
|
|
'ymin_type',
|
|
'selectGraphItems'
|
|
],
|
|
'selectFunctions' => 'extend',
|
|
'sortfield' => 'name'
|
|
], 10, 2);
|
|
|
|
$this->assertEquals(self::NUMBER_OF_TEMPLATES * self::NUMBER_OF_GRAPHS_PER_TEMPLATE,
|
|
count($response['result']));
|
|
|
|
$i = 0;
|
|
foreach ($response['result'] as $entry) {
|
|
$ep = json_encode($response, JSON_PRETTY_PRINT);
|
|
|
|
$this->assertEquals($entry['height'], self::GRAPH_HEIGHT + $i, $ep);
|
|
$this->assertEquals($entry['width'], self::GRAPH_WIDTH + $i, $ep);
|
|
$this->assertEquals($entry['name'], self::GRAPH_NAME_PRE . '_' . self::$stringids[$i], $ep);
|
|
$this->assertEquals($entry['graphtype'], self::GRAPH_TYPE, $ep);
|
|
$this->assertEquals($entry['percent_left'], self::GRAPH_PERCENT_LEFT + $i, $ep);
|
|
$this->assertEquals($entry['percent_right'], self::GRAPH_PERCENT_RIGHT - $i, $ep);
|
|
$this->assertEquals($entry['show_3d'], self::GRAPH_SHOW_3D, $ep);
|
|
$this->assertEquals($entry['show_legend'], self::GRAPH_SHOW_LEGEND, $ep);
|
|
$this->assertEquals($entry['show_work_period'], self::GRAPH_SHOW_WORK_PERIOD, $ep);
|
|
$this->assertEquals($entry['show_triggers'], self::GRAPH_SHOW_TRIGGERS, $ep);
|
|
$this->assertEquals($entry['yaxismax'], self::GRAPH_YAXISMAX + $i, $ep);
|
|
$this->assertEquals($entry['yaxismin'], self::GRAPH_YAXISMIN + $i, $ep);
|
|
$this->assertEquals($entry['ymax_type'], self::GRAPH_YMAX_TYPE, $ep);
|
|
$this->assertEquals($entry['ymin_type'], self::GRAPH_YMIN_TYPE, $ep);
|
|
|
|
$graph_item_response = $this->call('graphitem.get', [
|
|
'output' => 'extend',
|
|
'graphids' => $entry['graphid']
|
|
]);
|
|
$ep = json_encode($graph_item_response, JSON_PRETTY_PRINT);
|
|
|
|
$this->assertArrayHasKey(0, $graph_item_response['result'], $ep);
|
|
$this->assertArrayHasKey('itemid', $graph_item_response['result'][0], $ep);
|
|
$this->assertEquals($graph_item_response['result'][0]['color'],
|
|
self::GRAPH_ITEM_COLOR . self::$colors[$i], $ep);
|
|
|
|
$i++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test graph linking cases.
|
|
*
|
|
* @configurationDataProvider agentConfigurationProvider
|
|
* @required-components server, agent
|
|
*/
|
|
public function testGraphLinking_checkGraphsCreate() {
|
|
$this->reloadConfigurationCache();
|
|
|
|
$this->checkGraphsCreate();
|
|
}
|
|
}
|