[ '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' => ' 3.2 2016-12-09T07:12:45Z API import host group ' ], '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' => ' 2016-12-09T07:12:45Z', 'error' => 'Invalid tag "/zabbix_export": the tag "version" is missing.' ]], [[ 'format' => 'xml', 'source' => ' 2016-12-09T07:12:45Z', 'error' => 'Invalid tag "/zabbix_export/version": unsupported version number.' ]], [[ 'format' => 'xml', 'source' => ' 3.22016-12-09T07:12:45Z' , // 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' => '\n5.02020-08-03T12:36:11Z\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' => ' 3.2 2016-12-09T07:12:45Z API host group xml import ', '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' => ' 5.4 2016-12-12T07:18:00Z API xml import host API xml import host Linux servers API valueMap xml import 1 Up ', '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' => ' 3.2 2016-12-09T07:12:45Z API host group xml import as non Super Admin ', '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' => ' 5.4 2022-04-05T13:50:12Z 1b086ec667184dff8015c7f7bb5c5978 API template group xml import as non Super Admin ', '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)); } } }