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.
977 lines
28 KiB
977 lines
28 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/CAPITest.php';
|
|
|
|
/**
|
|
* @backup hosts, hstgrp
|
|
*/
|
|
class testConfiguration extends CAPITest {
|
|
|
|
public static function export_fail_data() {
|
|
return [
|
|
// Check format parameter.
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'hosts' => [
|
|
'50009'
|
|
]
|
|
]
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": the parameter "format" is missing.'
|
|
],
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'hosts' => [
|
|
'50009'
|
|
]
|
|
],
|
|
'format' => ''
|
|
],
|
|
'expected_error' => 'Invalid parameter "/format": value must be one of "yaml", "xml", "json", "raw".'
|
|
],
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'hosts' => [
|
|
'50009'
|
|
]
|
|
],
|
|
'format' => 'æų'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/format": value must be one of "yaml", "xml", "json", "raw".'
|
|
],
|
|
// Check unexpected parameter.
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'host_groups' => [
|
|
'50012'
|
|
]
|
|
],
|
|
'format' => 'test',
|
|
'hosts' => '50009'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": unexpected parameter "hosts".'
|
|
],
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'host_groups' => [
|
|
'50009'
|
|
],
|
|
'group' => [
|
|
'50009'
|
|
]
|
|
],
|
|
'format' => 'xml'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/options": unexpected parameter "group".'
|
|
],
|
|
// Check missing options parameter.
|
|
[
|
|
'export' => [
|
|
'format' => 'xml'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": the parameter "options" is missing.'
|
|
],
|
|
// Check prettyprint parameter.
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'groups' => [
|
|
'50012'
|
|
]
|
|
],
|
|
'format' => 'yaml',
|
|
'prettyprint' => 'test'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/prettyprint": a boolean is expected.'
|
|
],
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'groups' => [
|
|
'50012'
|
|
]
|
|
],
|
|
'format' => 'json',
|
|
'prettyprint' => ''
|
|
],
|
|
'expected_error' => 'Invalid parameter "/prettyprint": a boolean is expected.'
|
|
],
|
|
[
|
|
'export' => [
|
|
'options' => [
|
|
'groups' => [
|
|
'50012'
|
|
]
|
|
],
|
|
'format' => 'yaml',
|
|
'prettyprint' => 'æų'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/prettyprint": a boolean is expected.'
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider export_fail_data
|
|
*/
|
|
public function testConfiguration_ExportFail($export, $expected_error) {
|
|
$this->call('configuration.export', $export, $expected_error);
|
|
}
|
|
|
|
public static function export_string_ids() {
|
|
return [
|
|
['host_groups'],
|
|
['template_groups'],
|
|
['hosts'],
|
|
['images'],
|
|
['maps'],
|
|
['templates']
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider export_string_ids
|
|
*/
|
|
public function testConfiguration_ExportIdsNotNumber($options) {
|
|
$formats = ['xml', 'json', 'yaml'];
|
|
|
|
foreach ($formats as $parameter){
|
|
$this->call('configuration.export',
|
|
[
|
|
'options' => [
|
|
$options => [
|
|
$options
|
|
]
|
|
],
|
|
'format' => $parameter
|
|
],
|
|
'Invalid parameter "/options/'.$options.'/1": a number is expected.'
|
|
);
|
|
}
|
|
}
|
|
|
|
public static function export_success_data() {
|
|
return [
|
|
[
|
|
[
|
|
'options' => [
|
|
'host_groups' => []
|
|
],
|
|
'prettyprint' => true
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'host_groups' => ['11111111111111']
|
|
],
|
|
'prettyprint' => true
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'host_groups' => ['50012']
|
|
],
|
|
'prettyprint' => true
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'template_groups' => ['52013']
|
|
],
|
|
'prettyprint' => true
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'hosts' => ['50009']
|
|
],
|
|
'prettyprint' => false
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'host_groups' => ['50012'],
|
|
'hosts' => ['50009']
|
|
]
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'template_groups' => ['52013'],
|
|
'templates' => ['50010']
|
|
]
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'images' => ['1']
|
|
]
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'maps' => ['1']
|
|
]
|
|
]
|
|
],
|
|
[
|
|
[
|
|
'options' => [
|
|
'templates' => ['10069']
|
|
]
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider export_success_data
|
|
*/
|
|
public function testConfiguration_ExportSuccess($data) {
|
|
$formats = ['xml', 'json', 'yaml'];
|
|
|
|
foreach ($formats as $parameter) {
|
|
$this->call('configuration.export', array_merge($data, ['format' => $parameter]));
|
|
}
|
|
}
|
|
|
|
public static function import_fail_data() {
|
|
return [
|
|
// Check format.
|
|
[
|
|
'import' => [
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export>
|
|
<version>3.2</version>
|
|
<date>2016-12-09T07:12:45Z</date>
|
|
<groups>
|
|
<group>
|
|
<name>API import host group</name>
|
|
</group>
|
|
</groups>
|
|
</zabbix_export>'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": the parameter "format" is missing.'
|
|
],
|
|
[
|
|
'import' => [
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": the parameter "format" is missing.'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => '',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/format": value must be one of "yaml", "xml", "json".'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => 'test',
|
|
'rules' => [
|
|
'groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/format": value must be one of "yaml", "xml", "json".'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}',
|
|
'hosts' => '50009'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": unexpected parameter "hosts".'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}',
|
|
'prettyprint' => true
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": unexpected parameter "prettyprint".'
|
|
],
|
|
// Check rules.
|
|
[
|
|
'import' => [
|
|
'format' => 'json',
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": the parameter "rules" is missing.'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'users' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/rules": unexpected parameter "users".'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
],
|
|
'users' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'expected_error' => 'Invalid parameter "/rules": unexpected parameter "users".'
|
|
],
|
|
[
|
|
'import' => [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
]
|
|
],
|
|
'expected_error' => 'Invalid parameter "/": the parameter "source" is missing.'
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider import_fail_data
|
|
*/
|
|
public function testConfiguration_ImportFail($import, $expected_error) {
|
|
$this->call('configuration.import', $import, $expected_error);
|
|
}
|
|
|
|
public static function import_rules_parameters() {
|
|
return [
|
|
[[
|
|
'parameter' => 'discoveryRules',
|
|
'expected' => ['createMissing', 'deleteMissing', 'updateExisting'],
|
|
'unexpected' => []
|
|
]],
|
|
[[
|
|
'parameter' => 'graphs',
|
|
'expected' => ['createMissing', 'deleteMissing', 'updateExisting'],
|
|
'unexpected' => []
|
|
]],
|
|
[[
|
|
'parameter' => 'host_groups',
|
|
'expected' => ['createMissing', 'updateExisting'],
|
|
'unexpected' => ['deleteMissing']
|
|
]],
|
|
[[
|
|
'parameter' => 'template_groups',
|
|
'expected' => ['createMissing', 'updateExisting'],
|
|
'unexpected' => ['deleteMissing']
|
|
]],
|
|
[[
|
|
'parameter' => 'hosts',
|
|
'expected' => ['createMissing', 'updateExisting'],
|
|
'unexpected' => ['deleteMissing']
|
|
]],
|
|
[[
|
|
'parameter' => 'httptests',
|
|
'expected' => ['createMissing', 'deleteMissing', 'updateExisting'],
|
|
'unexpected' => []
|
|
]],
|
|
[[
|
|
'parameter' => 'images',
|
|
'expected' => ['createMissing', 'updateExisting'],
|
|
'unexpected' => ['deleteMissing']
|
|
]],
|
|
[[
|
|
'parameter' => 'items',
|
|
'expected' => ['createMissing', 'deleteMissing', 'updateExisting'],
|
|
'unexpected' => []
|
|
]],
|
|
[[
|
|
'parameter' => 'maps',
|
|
'expected' => ['createMissing', 'updateExisting'],
|
|
'unexpected' => ['deleteMissing']
|
|
]],
|
|
[[
|
|
'parameter' => 'templateLinkage',
|
|
'expected' => ['createMissing', 'deleteMissing'],
|
|
'unexpected' => ['updateExisting']
|
|
]],
|
|
[[
|
|
'parameter' => 'templates',
|
|
'expected' => ['createMissing', 'updateExisting'],
|
|
'unexpected' => ['deleteMissing']
|
|
]],
|
|
[[
|
|
'parameter' => 'templateDashboards',
|
|
'expected' => ['createMissing', 'deleteMissing', 'updateExisting'],
|
|
'unexpected' => []
|
|
]],
|
|
[[
|
|
'parameter' => 'triggers',
|
|
'expected' => ['createMissing', 'deleteMissing', 'updateExisting'],
|
|
'unexpected' => []
|
|
]],
|
|
[[
|
|
'parameter' => 'valueMaps',
|
|
'expected' => ['createMissing', 'updateExisting', 'deleteMissing'],
|
|
'unexpected' => []
|
|
]]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider import_rules_parameters
|
|
*/
|
|
public function testConfiguration_ImportBooleanTypeAndUnexpectedParameters($import) {
|
|
foreach ($import['expected'] as $expected) {
|
|
$this->call('configuration.import', [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
$import['parameter'] => [
|
|
$expected => 'test'
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'Invalid parameter "/rules/'.$import['parameter'].'/'.$expected.'": a boolean is expected.'
|
|
);
|
|
}
|
|
|
|
foreach ($import['unexpected'] as $unexpected) {
|
|
$this->call('configuration.import', [
|
|
'format' => 'json',
|
|
'rules' => [
|
|
$import['parameter'] => [
|
|
$unexpected => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}'
|
|
],
|
|
'Invalid parameter "/rules/'.$import['parameter'].'": unexpected parameter "'.$unexpected.'".'
|
|
);
|
|
}
|
|
}
|
|
|
|
public static function import_source() {
|
|
return [
|
|
[[
|
|
'format' => 'xml',
|
|
'source' => '',
|
|
'error' => 'Cannot read XML: XML is empty.'
|
|
]],
|
|
[[
|
|
'format' => 'xml',
|
|
'source' => 'test',
|
|
'error' => 'Cannot read XML: (4) Start tag expected, \'<\' not found [Line: 1 | Column: 1].'
|
|
]],
|
|
[[
|
|
'format' => 'xml',
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export><date>2016-12-09T07:12:45Z</date></zabbix_export>',
|
|
'error' => 'Invalid tag "/zabbix_export": the tag "version" is missing.'
|
|
]],
|
|
[[
|
|
'format' => 'xml',
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export><version></version><date>2016-12-09T07:12:45Z</date></zabbix_export>',
|
|
'error' => 'Invalid tag "/zabbix_export/version": unsupported version number.'
|
|
]],
|
|
[[
|
|
'format' => 'xml',
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export><version>3.2</version><date>2016-12-09T07:12:45Z</date>' ,
|
|
// Can be different error message text.
|
|
'error_contains' => 'Cannot read XML:'
|
|
]],
|
|
// JSON format.
|
|
[[
|
|
'format' => 'json',
|
|
'source' => '',
|
|
// Can be different error message text 'Cannot read JSON: Syntax error.' or 'Cannot read JSON: No error.'
|
|
'error_contains' => 'Cannot read JSON: '
|
|
]],
|
|
[[
|
|
'format' => 'json',
|
|
'source' => 'test',
|
|
// Can be different error message text 'Cannot read JSON: Syntax error.' or 'Cannot read JSON: boolean expected.'
|
|
'error_contains' => 'Cannot read JSON: '
|
|
]],
|
|
[[
|
|
'format' => 'json',
|
|
'source' => '{"zabbix_export":{"date":"2016-12-09T07:29:55Z"}}',
|
|
'error' => 'Invalid tag "/zabbix_export": the tag "version" is missing.'
|
|
]],
|
|
[[
|
|
'format' => 'json',
|
|
'source' => '{"zabbix_export":{"version":"","date":"2016-12-09T07:29:55Z"}}',
|
|
'error' => 'Invalid tag "/zabbix_export/version": unsupported version number.'
|
|
]],
|
|
[[
|
|
'format' => 'json',
|
|
'source' => '{"export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}}',
|
|
'error' => 'Invalid tag "/": unexpected tag "export".'
|
|
]],
|
|
[[
|
|
'format' => 'json',
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T07:29:55Z"}',
|
|
// Can be different error message text 'Cannot read JSON: Syntax error.' or 'Cannot read JSON: unexpected end of data.'
|
|
'error_contains' => 'Cannot read JSON: '
|
|
]],
|
|
// YAML format.
|
|
// Empty YAML.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => '',
|
|
'error' => 'Cannot read YAML: File is empty.'
|
|
]],
|
|
// Empty YAML.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => '---\r\n...',
|
|
'error' => 'Cannot read YAML: Invalid YAML file contents.'
|
|
]],
|
|
// Non UTF-8.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => 'æų',
|
|
'error' => 'Cannot read YAML: Invalid YAML file contents.'
|
|
]],
|
|
// No "version" tag.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\nzabbix_export:\n date: \"2020-07-27T12:58:01Z\"\n",
|
|
'error' => 'Invalid tag "/zabbix_export": the tag "version" is missing.'
|
|
]],
|
|
// No indentation before tags.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\nzabbix_export: \r\nversion: \"4.0\"\r\ndate: \"2020-08-03T11:38:33Z\"\r\ngroups:\r\nname: \"API host group yaml import\"\r\n...",
|
|
'error' => 'Invalid tag "/": unexpected tag "version".'
|
|
]],
|
|
// Empty "version" value.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\nzabbix_export:\n version: \"\"\n date: \"2020-07-27T12:58:01Z\"\n",
|
|
'error' => 'Invalid tag "/zabbix_export/version": unsupported version number.'
|
|
]],
|
|
// Invalid first tag.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\nexport:\n version: \"4.0\"\n date: \"2020-08-03T11:38:33Z\"\n...\n",
|
|
'error' => 'Invalid tag "/": unexpected tag "export".'
|
|
]],
|
|
// Invalid inner tag.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\nzabbix_export:\r\n version: \"5.2\"\r\n date: \"2020-08-31T14:44:18Z\"\r\n groups:\r\n - tag: 'name'\r\n...",
|
|
'error' => 'Invalid tag "/zabbix_export/groups/group(1)": unexpected tag "tag".'
|
|
]],
|
|
// Unclosed quotes after date value.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => '---\nzabbix_export:\n version: \"4.0\"\n date: \"2020-08-03T11:38:33Z',
|
|
'error' => 'A colon cannot be used in an unquoted mapping value at line 1 (near "---\nzabbix_export:\n version: \"4.0\"\n date: \"2020-08-03T11:38:33Z").'
|
|
]],
|
|
// XML contents in YAML file.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export><version>5.0</version><date>2020-08-03T12:36:11Z</date></zabbix_export>\n',
|
|
'error' => 'Cannot read YAML: Invalid YAML file contents.'
|
|
]],
|
|
// Unquoted version value.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\nzabbix_export: \r\n version: 4.0\r\n date: 2020-08-03T11:38:33Z\r\n...",
|
|
'error' => 'Invalid tag "/zabbix_export/version": a character string is expected.'
|
|
]],
|
|
// No space after colon.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\nzabbix_export: \r\n version:\"4.0\"\r\n date:\"2020-08-03T11:38:33Z\"\r\n...",
|
|
'error' => 'Invalid tag "/zabbix_export": an array is expected.'
|
|
]],
|
|
// Invalid time and date format.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\nzabbix_export:\r\n version: \"4.0\"\r\n date: \"2020-08-03T11:38:33\"\r\n...",
|
|
'error' => 'Invalid tag "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" is expected.'
|
|
]],
|
|
// YAML starts from ... instead of ---.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "...\r\nzabbix_export:\r\n version: \"5.0\"\r\n date: \"2021-08-03T11:38:33Z\"\r\n...",
|
|
'error' => 'Unable to parse at line 1 (near "...").'
|
|
]],
|
|
// No new line before date tag.
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\nzabbix_export:\r\n version: \"5.2\",date: \"2020-08-31T14:44:18Z\"\r\n...",
|
|
'error' => 'Unexpected characters near ",date: "2020-08-31T14:44:18Z"" at line 3 (near "version: "5.2",date: "2020-08-31T14:44:18Z"").'
|
|
]],
|
|
// Excessive intendation before "zabbix_export".
|
|
[[
|
|
'format' => 'yaml',
|
|
'source' => "---\r\n zabbix_export:\r\n version: \"4.0\"\r\n date: \"2020-08-03T12:41:17Z\"\r\n...",
|
|
'error' => 'Mapping values are not allowed in multi-line blocks at line 2 (near " zabbix_export:").'
|
|
]]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider import_source
|
|
*/
|
|
public function testConfiguration_ImportInvalidSource($data) {
|
|
$result = $this->call('configuration.import', [
|
|
'format' => $data['format'],
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => $data['source']
|
|
],
|
|
true
|
|
);
|
|
|
|
// Condition for different error message text.
|
|
if (array_key_exists('error_contains', $data)) {
|
|
$this->assertStringContainsString($data['error_contains'], $result['error']['data']);
|
|
}
|
|
else {
|
|
$this->assertSame($data['error'], $result['error']['data']);
|
|
}
|
|
}
|
|
|
|
public static function import_create() {
|
|
return [
|
|
[
|
|
'format' => 'xml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export>
|
|
<version>3.2</version>
|
|
<date>2016-12-09T07:12:45Z</date>
|
|
<groups>
|
|
<group>
|
|
<name>API host group xml import</name>
|
|
</group>
|
|
</groups>
|
|
</zabbix_export>',
|
|
'sql' => 'select * from hstgrp where name=\'API host group xml import\''
|
|
],
|
|
[
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T12:29:57Z","groups":[{"name":"API host group json import"}]}}',
|
|
'sql' => 'select * from hstgrp where name=\'API host group json import\''
|
|
],
|
|
// Full YAML tags without quotes.
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "---\nzabbix_export:\n version: \"4.0\"\n date: \"2020-08-03T12:41:17Z\"\n groups:\n - name: API host group yaml import\n...\n",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
// Full YAML tags with double quotes.
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "---\n\"zabbix_export\":\n \"version\": \"4.0\"\n \"date\": \"2020-08-03T12:41:17Z\"\n \"groups\":\n - \"name\": \"API host group yaml import\"\n...\n",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
// Pretty YAML (without --- and ...).
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "zabbix_export:\r\n version: \"4.0\"\r\n date: \"2020-08-03T12:41:17Z\"\r\n groups:\r\n - name: API host group yaml import",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
// Pretty YAML (without ... in the end).
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "---\nzabbix_export:\r\n version: \"4.0\"\r\n date: \"2020-08-03T12:41:17Z\"\r\n groups:\r\n - name: API host group yaml import",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
// "Ugly" YAML (with new lines after -).
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "---\r\nzabbix_export:\r\n version: \"4.0\"\r\n date: \"2020-08-03T12:41:17Z\"\r\n groups:\r\n - \r\n name: API host group yaml import\r\n...",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
// JSON contents in YAML file (short, only date and version).
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "{\"zabbix_export\":{\"version\":\"5.0\",\"date\":\"2020-08-03T12:36:39Z\"}}",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
// JSON contents in YAML file (with zabbix tags).
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'host_groups' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "{\"zabbix_export\":{\"version\":\"4.0\",\"date\":\"2020-08-03T12:41:17Z\",\"groups\":[{\"name\":\"API host group yaml import\"}]}}",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import\''
|
|
],
|
|
[
|
|
'format' => 'xml',
|
|
'rules' => [
|
|
'valueMaps' => [
|
|
'createMissing' => true
|
|
],
|
|
'hosts' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?> <zabbix_export> <version>5.4</version> <date>2016-12-12T07:18:00Z</date> <hosts> <host> <host>API xml import host</host> <name>API xml import host</name> <groups> <group> <name>Linux servers</name> </group> </groups> <valuemaps> <valuemap> <name>API valueMap xml import</name> <mappings> <mapping> <value>1</value> <newvalue>Up</newvalue> </mapping> </mappings> </valuemap> </valuemaps> </host> </hosts> </zabbix_export>',
|
|
'sql' => 'select * from valuemap where name=\'API valueMap xml import\'' ],
|
|
[
|
|
'format' => 'json',
|
|
'rules' => [
|
|
'valueMaps' => [
|
|
'createMissing' => true
|
|
],
|
|
'hosts' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => '{ "zabbix_export": { "version": "5.4", "date": "2016-12-12T07:18:00Z", "hosts": [ { "host": "API json import host", "name": "API json import host", "groups": [ { "name": "Linux servers" } ], "valuemaps": [ { "name": "API valueMap json import", "mappings": [ { "value": "1", "newvalue": "Up" } ] } ] } ] } }',
|
|
'sql' => 'select * from valuemap where name=\'API valueMap json import\''
|
|
],
|
|
[
|
|
'format' => 'yaml',
|
|
'rules' => [
|
|
'valueMaps' => [
|
|
'createMissing' => true
|
|
],
|
|
'hosts' => [
|
|
'createMissing' => true
|
|
]
|
|
],
|
|
'source' => "zabbix_export:\n version: '5.4'\n date: '2016-12-12T07:18:00Z'\n hosts:\n -\n host: 'API yaml import host'\n name: 'API yaml import host'\n groups:\n -\n name: 'Linux servers'\n valuemaps:\n -\n name: 'API valueMap yaml import'\n mappings:\n -\n value: '1'\n newvalue: Up",
|
|
'sql' => 'select * from valuemap where name=\'API valueMap yaml import\''
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider import_create
|
|
*/
|
|
public function testConfiguration_ImportCreate($format, $rules, $source, $sql) {
|
|
$result = $this->call('configuration.import', [
|
|
'format' => $format,
|
|
'rules' => $rules,
|
|
'source' => $source
|
|
]
|
|
);
|
|
|
|
$this->assertSame(true, $result['result']);
|
|
$this->assertEquals(1, CDBHelper::getCount($sql));
|
|
}
|
|
|
|
public static function import_users() {
|
|
return [
|
|
// test for host groups
|
|
[
|
|
'format' => 'xml',
|
|
'parameter' => 'host_groups',
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export>
|
|
<version>3.2</version>
|
|
<date>2016-12-09T07:12:45Z</date>
|
|
<groups>
|
|
<group>
|
|
<name>API host group xml import as non Super Admin</name>
|
|
</group>
|
|
</groups>
|
|
</zabbix_export>',
|
|
'sql' => 'select * from hstgrp where name=\'API host group xml import as non Super Admin\'',
|
|
'expected_error' => 'No permissions to call "hostgroup.create".'
|
|
],
|
|
[
|
|
'format' => 'json',
|
|
'parameter' => 'host_groups',
|
|
'source' => '{"zabbix_export":{"version":"3.2","date":"2016-12-09T12:29:57Z","groups":[{"name":"API host group json import as non Super Admin"}]}}',
|
|
'sql' => 'select * from hstgrp where name=\'API host group json import as non Super Admin\'',
|
|
'expected_error' => 'No permissions to call "hostgroup.create".'
|
|
],
|
|
[
|
|
'format' => 'yaml',
|
|
'parameter' => 'host_groups',
|
|
'source' => "---\nzabbix_export:\n version: \"4.0\"\n date: \"2020-08-03T12:41:17Z\"\n groups:\n - name: API host group yaml import as non Super Admin\n...\n",
|
|
'sql' => 'select * from hstgrp where name=\'API host group yaml import as non Super Admin\'',
|
|
'expected_error' => 'No permissions to call "hostgroup.create".'
|
|
],
|
|
// test for template groups
|
|
[
|
|
'format' => 'xml',
|
|
'parameter' => 'template_groups',
|
|
'source' => '<?xml version="1.0" encoding="UTF-8"?>
|
|
<zabbix_export>
|
|
<version>5.4</version>
|
|
<date>2022-04-05T13:50:12Z</date>
|
|
<groups>
|
|
<group>
|
|
<uuid>1b086ec667184dff8015c7f7bb5c5978</uuid>
|
|
<name>API template group xml import as non Super Admin</name>
|
|
</group>
|
|
</groups>
|
|
<templates>
|
|
<template>
|
|
<uuid>17e68f86419d40a18bb3b1d1a876d231</uuid>
|
|
<template>API xml import template as non Super Admin</template>
|
|
<name>API xml import template as non Super Admin</name>
|
|
<groups>
|
|
<group>
|
|
<name>API template group xml import as non Super Admin</name>
|
|
</group>
|
|
</groups>
|
|
</template>
|
|
</templates>
|
|
</zabbix_export>',
|
|
'sql' => 'select * from hstgrp where name=\'API template group xml import as non Super Admin\'',
|
|
'expected_error' => 'No permissions to call "templategroup.create".'
|
|
],
|
|
[
|
|
'format' => 'json',
|
|
'parameter' => 'template_groups',
|
|
'source' => '{"zabbix_export": {"version": "5.4","date": "2022-04-05T13:57:36Z","groups": [{"uuid": "1b086ec667184dff8015c7f7bb5c5978","name": "API template group xml import as non Super Admin"}],"templates": [{"uuid": "17e68f86419d40a18bb3b1d1a876d231","template": "API xml import template as non Super Admin","name": "API xml import template as non Super Admin","groups": [{"name": "API template group xml import as non Super Admin"}]}]}}',
|
|
'sql' => 'select * from hstgrp where name=\'API template group json import as non Super Admin\'',
|
|
'expected_error' => 'No permissions to call "templategroup.create".'
|
|
],
|
|
[
|
|
'format' => 'yaml',
|
|
'parameter' => 'template_groups',
|
|
'source' => "{zabbix_export: {version: '5.4', date: '2022-04-05T13:59:57Z', groups: [{uuid: 1b086ec667184dff8015c7f7bb5c5978, name: API template group xml import as non Super Admin}], templates: [{uuid: 17e68f86419d40a18bb3b1d1a876d231, template: API xml import template as non Super Admin, name: API xml import template as non Super Admin, groups: [{name: API template group xml import as non Super Admin}]}]}}",
|
|
'sql' => 'select * from hstgrp where name=\'API template group yaml import as non Super Admin\'',
|
|
'expected_error' => 'No permissions to call "templategroup.create".'
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider import_users
|
|
*/
|
|
public function testConfiguration_UsersPermissionsToImportCreate($format, $parameter, $source, $sql, $expected_error) {
|
|
$users = ['zabbix-admin', 'zabbix-user'];
|
|
|
|
foreach ($users as $username) {
|
|
$this->authorize($username, 'zabbix');
|
|
$this->call('configuration.import', [
|
|
'format' => $format,
|
|
'rules' => [
|
|
$parameter => [
|
|
'createMissing' => true,
|
|
'updateExisting' => false
|
|
]
|
|
],
|
|
'source' => $source
|
|
],
|
|
$expected_error
|
|
);
|
|
|
|
$this->assertEquals(0, CDBHelper::getCount($sql));
|
|
}
|
|
}
|
|
}
|