Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitrijs Goloscapovs <dmitrijs.goloscapovs@zabbix.com>2022-11-11 15:39:40 +0300
committerDmitrijs Goloscapovs <dmitrijs.goloscapovs@zabbix.com>2022-11-11 15:39:40 +0300
commit3bffc5ccdbb26e7b3226218d5b21f1e107e78ba4 (patch)
tree77ffbfa1b3c6f322a1cf775275cdf37b4986dc51
parent8307c5ed9c3734b8d91e2d339af9a42deca66951 (diff)
parent8fe758308d46958ddee5fc3438054d7883ccfed0 (diff)
.......... [DEV-2329] added int test for server-proxy conf sync
Merge in ZBX/zabbix from feature/DEV-2329-6.3-a to master * commit '8fe758308d46958ddee5fc3438054d7883ccfed0': .......... [DEV-2329] fix .......... [DEV-2329] fi .......... [DEV-2329] fix .......... [DEV-2329] fix .......... [DEV-2329] fix .......... [DEV-2329] fix .......... [DEV-2329] added backup/restore annotation .......... [DEV-2329] added backup/restore annotation .......... [DEV-2329] reordered test .......... [DEV-2329] added backup/restore annotation .......... [DEV-2329] fix .......... [DEV-2329] reverted unnecessary changes .......... [DEV-2329] added data collection test .......... [DEV-2329] added full implementation of proxy-server confsync test .......... [DEV-2329] added full implementation of proxy-server confsync test .......... [DEV-2329] implemented .......... [DEV-2329] experimental impl
-rw-r--r--ui/tests/integration/IntegrationTests.php2
-rw-r--r--ui/tests/integration/data/confsync_proxy_hosts.xml983
-rw-r--r--ui/tests/integration/data/confsync_proxy_hosts_updated.xml995
-rw-r--r--ui/tests/integration/data/confsync_proxy_tmpl.xml682
-rw-r--r--ui/tests/integration/data/confsync_proxy_tmpl_updated.xml718
-rw-r--r--ui/tests/integration/testDataCollection.php86
-rw-r--r--ui/tests/integration/testProxyConfSync.php1673
7 files changed, 5139 insertions, 0 deletions
diff --git a/ui/tests/integration/IntegrationTests.php b/ui/tests/integration/IntegrationTests.php
index d94bb556a23..ab23c3d4639 100644
--- a/ui/tests/integration/IntegrationTests.php
+++ b/ui/tests/integration/IntegrationTests.php
@@ -19,6 +19,7 @@
**/
require_once dirname(__FILE__).'/testInitialConfSync.php';
+require_once dirname(__FILE__).'/testProxyConfSync.php';
require_once dirname(__FILE__).'/testTimescaleDb.php';
require_once dirname(__FILE__).'/testDataCollection.php';
require_once dirname(__FILE__).'/testDiagnosticDataTask.php';
@@ -72,6 +73,7 @@ class IntegrationTests {
$suite->addTestSuite('testUserParametersReload');
$suite->addTestSuite('testTriggerState');
$suite->addTestSuite('testActiveAvailability');
+ $suite->addTestSuite('testProxyConfSync');
$suite->addTestSuite('testInitialConfSync');
return $suite;
diff --git a/ui/tests/integration/data/confsync_proxy_hosts.xml b/ui/tests/integration/data/confsync_proxy_hosts.xml
new file mode 100644
index 00000000000..0ebea8c800d
--- /dev/null
+++ b/ui/tests/integration/data/confsync_proxy_hosts.xml
@@ -0,0 +1,983 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<zabbix_export>
+ <version>6.4</version>
+ <date>2022-09-12T13:52:17Z</date>
+ <host_groups>
+ <host_group>
+ <uuid>c9ad86935aa14454a99f3bb442dccb2c</uuid>
+ <name>HG1</name>
+ </host_group>
+ <host_group>
+ <uuid>9a4a9554205541f1bb119cf1cfa3dfd4</uuid>
+ <name>HG1/Subgroup</name>
+ </host_group>
+ </host_groups>
+ <hosts>
+ <host>
+ <host>Host1</host>
+ <name>Host1</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host2</host>
+ <name>Host2</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <type>SNMP</type>
+ <port>161</port>
+ <details>
+ <community>{$SNMP_COMMUNITY}</community>
+ </details>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host3</host>
+ <name>Host3</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <type>IPMI</type>
+ <port>623</port>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host4</host>
+ <name>Host4</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host5</host>
+ <name>Host5</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostInventory</host>
+ <name>HostInventory</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory>
+ <type>aaaaaaaaaaaaaaaa</type>
+ <type_full>aaaaaaaaaaaaaaaa</type_full>
+ <name>aaaaaaaaaaaaaaaa</name>
+ <alias>aaaaaaaaaaaaaaaa</alias>
+ <os>aaaaaaaaaaaaaaaa</os>
+ <os_full>aaaaaaaaaaaaaaaa</os_full>
+ <os_short>aaaaaaaaaaaaaaaa</os_short>
+ <serialno_a>aaaaaaaaaaaaaaaa</serialno_a>
+ <serialno_b>aaaaaaaaaaaaaaaa</serialno_b>
+ <tag>aaaaaaaaaaaaaaaa</tag>
+ <asset_tag>aaaaaaaaaaaaaaaa</asset_tag>
+ <macaddress_a>aaaaaaaaaaaaaaaa</macaddress_a>
+ <macaddress_b>aaaaaaaaaaaaaaaa</macaddress_b>
+ <hardware>aaaaaaaaaaaaaaaa</hardware>
+ <hardware_full>aaaaaaaaaaaaaaaa</hardware_full>
+ <software>aaaaaaaaaaaaaaaa</software>
+ <software_full>aaaaaaaaaaaaaaaa</software_full>
+ <software_app_a>aaaaaaaaaaaaaaaa</software_app_a>
+ <software_app_b>aaaaaaaaaaaaaaaa</software_app_b>
+ <software_app_c>aaaaaaaaaaaaaaaa</software_app_c>
+ <software_app_d>aaaaaaaaaaaaaaaa</software_app_d>
+ <software_app_e>aaaaaaaaaaaaaaaa</software_app_e>
+ <contact>aaaaaaaaaaaaaaaa</contact>
+ <location>aaaaaaaaaaaaaaaa</location>
+ <location_lat>aaaaaaaaaaaaaaaa</location_lat>
+ <location_lon>aaaaaaaaaaaaaaaa</location_lon>
+ <notes>aaaaaaaaaaaaaaaa</notes>
+ <chassis>aaaaaaaaaaaaaaaa</chassis>
+ <model>aaaaaaaaaaaaaaaa</model>
+ <hw_arch>aaaaaaaaaaaaaaaa</hw_arch>
+ <vendor>aaaaaaaaaaaaaaaa</vendor>
+ <contract_number>aaaaaaaaaaaaaaaa</contract_number>
+ <installer_name>aaaaaaaaaaaaaaaa</installer_name>
+ <deployment_status>aaaaaaaaaaaaaaaa</deployment_status>
+ <url_a>aaaaaaaaaaaaaaaa</url_a>
+ <url_b>aaaaaaaaaaaaaaaa</url_b>
+ <url_c>aaaaaaaaaaaaaaaa</url_c>
+ <host_networks>aaaaaaaaaaaaaaaa</host_networks>
+ <host_netmask>aaaaaaaaaaaaaaaa</host_netmask>
+ <host_router>aaaaaaaaaaaaaaaa</host_router>
+ <oob_ip>aaaaaaaaaaaaaaaa</oob_ip>
+ <oob_netmask>aaaaaaaaaaaaaaaa</oob_netmask>
+ <oob_router>aaaaaaaaaaaaaaaa</oob_router>
+ <date_hw_purchase>aaaaaaaaaaaaaaaa</date_hw_purchase>
+ <date_hw_install>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</date_hw_install>
+ <date_hw_expiry>aaaaaaaaaaaaaaaa</date_hw_expiry>
+ <date_hw_decomm>aaaaaaaaaaaaaaaa</date_hw_decomm>
+ <site_address_a>aaaaaaaaaaaaaaaa</site_address_a>
+ <site_address_b>aaaaaaaaaaaaaaaa</site_address_b>
+ <site_address_c>aaaaaaaaaaaaaaaa</site_address_c>
+ <site_city>aaaaaaaaaaaaaaaa</site_city>
+ <site_state>aaaaaaaaaaaaaaaa</site_state>
+ <site_country>aaaaaaaaaaaaaaaa</site_country>
+ <site_zip>aaaaaaaaaaaaaaaa</site_zip>
+ <site_rack>aaaaaaaaaaaaaaaa</site_rack>
+ <site_notes>aaaaaaaaaaaaaaaa</site_notes>
+ <poc_1_name>aaaaaaaaaaaaaaaa</poc_1_name>
+ <poc_1_email>aaaaaaaaaaaaaaaa</poc_1_email>
+ <poc_1_phone_a>aaaaaaaaaaaaaaaa</poc_1_phone_a>
+ <poc_1_phone_b>aaaaaaaaaaaaaaaa</poc_1_phone_b>
+ <poc_1_cell>aaaaaaaaaaaaaaaa</poc_1_cell>
+ <poc_1_screen>aaaaaaaaaaaaaaaa</poc_1_screen>
+ <poc_1_notes>aaaaaaaaaaaaaaaa</poc_1_notes>
+ <poc_2_name>aaaaaaaaaaaaaaaa</poc_2_name>
+ <poc_2_email>aaaaaaaaaaaaaaaa</poc_2_email>
+ <poc_2_phone_a>aaaaaaaaaaaaaaaa</poc_2_phone_a>
+ <poc_2_phone_b>aaaaaaaaaaaaaaaa</poc_2_phone_b>
+ <poc_2_cell>aaaaaaaaaaaaaaaa</poc_2_cell>
+ <poc_2_screen>aaaaaaaaaaaaaaaa</poc_2_screen>
+ <poc_2_notes>aaaaaaaaaaaaaaaa</poc_2_notes>
+ </inventory>
+ </host>
+ <host>
+ <host>HostInventoryAutomatic</host>
+ <name>HostInventoryAutomatic</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.0.111</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>Hostname</name>
+ <key>agent.hostname</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>NAME</inventory_link>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Chassis</name>
+ <key>system.hw.chassis[model]</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>HARDWARE_FULL</inventory_link>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Uname</name>
+ <key>system.uname</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>OS</inventory_link>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <inventory_mode>AUTOMATIC</inventory_mode>
+ </host>
+ <host>
+ <host>HostMultilevelTmpl</host>
+ <name>HostMultilevelTmpl</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <templates>
+ <template>
+ <name>bbbtmpl</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>HG1/Subgroup</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.0.122</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>ItemWithMultilevelMacros</name>
+ <key>vfs.dir.count[/tmp/{$UU},{$CHLDTMPLMACRO},{$PRNTTMPLMACRO}]</key>
+ <delay>{$PRNTTMPLMACRO}</delay>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithDiscovery</host>
+ <name>HostWithDiscovery</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <discovery_rules>
+ <discovery_rule>
+ <name>DiscoveryRule</name>
+ <type>SCRIPT</type>
+ <key>dcrule</key>
+ <delay>22s</delay>
+ <params>return &quot;&quot;;</params>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#X}</macro>
+ <value>Y</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ <item_prototypes>
+ <item_prototype>
+ <name>ItemProto1</name>
+ <type>CALCULATED</type>
+ <key>proto[{#X}]</key>
+ <params>1</params>
+ <trigger_prototypes>
+ <trigger_prototype>
+ <expression>last(/HostWithDiscovery/proto[{#X}])=1</expression>
+ <name>TriggerPrototype</name>
+ <priority>DISASTER</priority>
+ <manual_close>YES</manual_close>
+ </trigger_prototype>
+ </trigger_prototypes>
+ </item_prototype>
+ </item_prototypes>
+ <host_prototypes>
+ <host_prototype>
+ <host>{#X}.HostPrototype</host>
+ <name>{#X}.HostPrototype</name>
+ <inventory_mode>DISABLED</inventory_mode>
+ <group_links>
+ <group_link>
+ <group>
+ <name>HG1</name>
+ </group>
+ </group_link>
+ </group_links>
+ </host_prototype>
+ </host_prototypes>
+ <lld_macro_paths>
+ <lld_macro_path>
+ <lld_macro>{#X}</lld_macro>
+ <path>$.a</path>
+ </lld_macro_path>
+ </lld_macro_paths>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>a</parameter>
+ <parameter>b</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <overrides>
+ <override>
+ <name>Override</name>
+ <step>1</step>
+ <stop>STOP</stop>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#S}</macro>
+ <value>s</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ <operations>
+ <operation>
+ <operationobject>ITEM_PROTOTYPE</operationobject>
+ <value>991</value>
+ <status>DISABLED</status>
+ <discover>NO_DISCOVER</discover>
+ </operation>
+ </operations>
+ </override>
+ </overrides>
+ </discovery_rule>
+ </discovery_rules>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithItems</host>
+ <name>HostWithItems</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ <interface>
+ <type>SNMP</type>
+ <port>161</port>
+ <details>
+ <community>{$SNMP_COMMUNITY}</community>
+ </details>
+ <interface_ref>if2</interface_ref>
+ </interface>
+ <interface>
+ <type>IPMI</type>
+ <port>623</port>
+ <interface_ref>if3</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>NormalItemPreproc</name>
+ <key>agent.hostmetadata</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>2</parameter>
+ <parameter>3</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Agent ping (active)</name>
+ <type>ZABBIX_ACTIVE</type>
+ <key>agent.ping</key>
+ <tags>
+ <tag>
+ <tag>qw</tag>
+ <value>we</value>
+ </tag>
+ </tags>
+ <triggers>
+ <trigger>
+ <expression>now()&gt;1 and baselinedev(/HostWithItems/agent.ping,1M:now/M,&quot;h&quot;,2)=0</expression>
+ <name>TimeBasedAndOrdFuncTrigger</name>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <name>Agent version (passive)</name>
+ <key>agent.version</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Calculated</name>
+ <type>CALCULATED</type>
+ <key>calc</key>
+ <params>1+1</params>
+ <triggers>
+ <trigger>
+ <expression>last(/HostWithItems/calc)=1</expression>
+ <name>DepTrigger</name>
+ <priority>DISASTER</priority>
+ <manual_close>YES</manual_close>
+ <dependencies>
+ <dependency>
+ <name>SimpleTrigger</name>
+ <expression>last(/HostWithItems/calc)=1</expression>
+ </dependency>
+ </dependencies>
+ </trigger>
+ <trigger>
+ <expression>last(/HostWithItems/calc)=1</expression>
+ <name>SimpleTrigger</name>
+ <event_name>SimpleTriggerEvent</event_name>
+ <priority>WARNING</priority>
+ <manual_close>YES</manual_close>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bbeq</value>
+ </tag>
+ </tags>
+ </trigger>
+ <trigger>
+ <expression>last(/HostWithItems/calc)=2</expression>
+ <name>SimpleTrigger2</name>
+ <event_name>SimpleTriggerEvent2</event_name>
+ <priority>DISASTER</priority>
+ <manual_close>YES</manual_close>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bxisxbe</value>
+ </tag>
+ </tags>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <name>CalculatedAsAggregated</name>
+ <type>CALCULATED</type>
+ <key>calc_as_aggr</key>
+ <params>sum(last_foreach(/*/agent.ping?[group=&quot;HG1&quot;]))</params>
+ </item>
+ <item>
+ <name>CalculatedPreproc</name>
+ <type>CALCULATED</type>
+ <key>calc_preproc</key>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>994</parameter>
+ <parameter>995</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <name>ODBC monitor</name>
+ <type>ODBC</type>
+ <key>db.odbc.select[x,y,z]</key>
+ <params>select null;</params>
+ </item>
+ <item>
+ <name>Dependent item</name>
+ <type>DEPENDENT</type>
+ <key>depitem</key>
+ <delay>0</delay>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnCalcPreproc</name>
+ <type>DEPENDENT</type>
+ <key>depitem_calc_preproc</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>a</parameter>
+ <parameter>b</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnDepCalcItem</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>2</parameter>
+ <parameter>22</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_calc_preproc</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnNormalDepItem</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem_normal</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>bb</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_normalitem</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnInternalItem</name>
+ <type>DEPENDENT</type>
+ <key>depitem_internal</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>992</parameter>
+ <parameter>993</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>zabbix[boottime]</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnNormalItem</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normalitem</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>c</parameter>
+ <parameter>d</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.ping</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnInternalItemPreproc</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normal_preproc</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>4</parameter>
+ <parameter>5</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.version</key>
+ </master_item>
+ </item>
+ <item>
+ <name>External check</name>
+ <type>EXTERNAL</type>
+ <key>extcheck</key>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>HTTP agent</name>
+ <type>HTTP_AGENT</type>
+ <key>httpagent</key>
+ <authtype>BASIC</authtype>
+ <username>qqqqqqqqqqqqq</username>
+ <password>wwwwwwwwww</password>
+ <interface_ref>if1</interface_ref>
+ <url>localhost</url>
+ <query_fields>
+ <query_field>
+ <name>a</name>
+ <value>b</value>
+ </query_field>
+ </query_fields>
+ <posts>test</posts>
+ <headers>
+ <header>
+ <name>x</name>
+ <value>y</value>
+ </header>
+ </headers>
+ <retrieve_mode>BOTH</retrieve_mode>
+ <output_format>JSON</output_format>
+ <allow_traps>YES</allow_traps>
+ </item>
+ <item>
+ <name>Simple check</name>
+ <type>SIMPLE</type>
+ <key>icmpping[127.1.0.1]</key>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>IPMI agent</name>
+ <type>IPMI</type>
+ <key>ipmi.get</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <ipmi_sensor>123</ipmi_sensor>
+ <interface_ref>if3</interface_ref>
+ </item>
+ <item>
+ <name>ItemPreproc</name>
+ <type>CALCULATED</type>
+ <key>preproc</key>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>.*</parameter>
+ <parameter>v</parameter>
+ </parameters>
+ <error_handler>CUSTOM_VALUE</error_handler>
+ <error_handler_params>fail</error_handler_params>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <name>Script</name>
+ <type>SCRIPT</type>
+ <key>script</key>
+ <params>return &quot;1&quot;;</params>
+ <inventory_link>NAME</inventory_link>
+ <parameters>
+ <parameter>
+ <name>aaa</name>
+ <value>bbb</value>
+ </parameter>
+ </parameters>
+ </item>
+ <item>
+ <name>SNMP trap</name>
+ <type>SNMP_TRAP</type>
+ <key>snmptrap.fallback</key>
+ <delay>0</delay>
+ <interface_ref>if2</interface_ref>
+ </item>
+ <item>
+ <name>SNMP agent</name>
+ <type>SNMP_AGENT</type>
+ <snmp_oid>SNMPv2-MIB::sysContact.0</snmp_oid>
+ <key>snmp_test</key>
+ <interface_ref>if2</interface_ref>
+ </item>
+ <item>
+ <name>SSH agent</name>
+ <type>SSH</type>
+ <key>ssh.run[x,localhost]</key>
+ <params>echo</params>
+ <username>password</username>
+ <password>password</password>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Telnet agent</name>
+ <type>TELNET</type>
+ <key>telnet.run[a,localhost]</key>
+ <params>echo</params>
+ <username>username</username>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Zabbix trapper</name>
+ <type>TRAP</type>
+ <key>trap</key>
+ <delay>0</delay>
+ </item>
+ <item>
+ <name>delay_globmacro</name>
+ <key>vfs.file.get[/tmp/{$UU}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Zabbix internal</name>
+ <type>INTERNAL</type>
+ <key>zabbix[boottime]</key>
+ </item>
+ </items>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithMacros</host>
+ <name>HostWithMacros</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.0.123</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>item1</name>
+ <type>CALCULATED</type>
+ <key>itm</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <params>1</params>
+ <triggers>
+ <trigger>
+ <expression>bitlength(last(/HostWithMacros/itm))&gt;bitlength({$HM1})</expression>
+ <name>trigger with macro</name>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <name>ItemWithGlobalAndHostMacro</name>
+ <key>sensor[{$UU},{$HM1}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <value_type>FLOAT</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>ItemWithMacro</name>
+ <key>vfs.file.get[/tmp/{$HM1}]</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <macros>
+ <macro>
+ <macro>{$HM1}</macro>
+ <value>hm1</value>
+ </macro>
+ </macros>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithTags</host>
+ <name>HostWithTags</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <tags>
+ <tag>
+ <tag>aaa</tag>
+ <value>bbb</value>
+ </tag>
+ <tag>
+ <tag>ccc</tag>
+ <value>ddd</value>
+ </tag>
+ <tag>
+ <tag>macro</tag>
+ <value>{$MACRO}</value>
+ </tag>
+ </tags>
+ <macros>
+ <macro>
+ <macro>{$MACRO}</macro>
+ <value>macro</value>
+ </macro>
+ </macros>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithTemplate</host>
+ <name>HostWithTemplate</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <templates>
+ <template>
+ <name>SampleTemplate</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithWebScenario</host>
+ <name>HostWithWebScenario</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <items>
+ <item>
+ <name>DepItemOnWebScenario</name>
+ <type>DEPENDENT</type>
+ <key>dep_webscenario</key>
+ <delay>0</delay>
+ <master_item>
+ <key>web.test.in[WebScenario,,bps]</key>
+ </master_item>
+ </item>
+ </items>
+ <httptests>
+ <httptest>
+ <name>WebScenario</name>
+ <http_proxy>127.0.0.2</http_proxy>
+ <variables>
+ <variable>
+ <name>{a}</name>
+ <value>b</value>
+ </variable>
+ </variables>
+ <headers>
+ <header>
+ <name>c</name>
+ <value>d</value>
+ </header>
+ </headers>
+ <steps>
+ <step>
+ <name>Step1</name>
+ <url>localhost/aaa</url>
+ <query_fields>
+ <query_field>
+ <name>qwe</name>
+ <value>ert</value>
+ </query_field>
+ </query_fields>
+ <posts>asdf=zxcv</posts>
+ <variables>
+ <variable>
+ <name>{A}</name>
+ <value>{A}</value>
+ </variable>
+ </variables>
+ <headers>
+ <header>
+ <name>rtyu</name>
+ <value>ghjk</value>
+ </header>
+ </headers>
+ <retrieve_mode>BOTH</retrieve_mode>
+ <timeout>21s</timeout>
+ <required>pattern</required>
+ <status_codes>201</status_codes>
+ </step>
+ </steps>
+ </httptest>
+ </httptests>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithComprehensiveTemplate</host>
+ <name>HostWithComprehensiveTemplate</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <templates>
+ <template>
+ <name>ComprehensiveTemplate</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>HG1/Subgroup</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.1.1</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ <interface>
+ <type>SNMP</type>
+ <ip>127.0.1.1</ip>
+ <port>161</port>
+ <details>
+ <community>{$SNMP_COMMUNITY}</community>
+ </details>
+ <interface_ref>if2</interface_ref>
+ </interface>
+ <interface>
+ <type>IPMI</type>
+ <ip>127.0.1.1</ip>
+ <port>623</port>
+ <interface_ref>if4</interface_ref>
+ </interface>
+ <interface>
+ <type>JMX</type>
+ <ip>127.0.1.1</ip>
+ <port>12345</port>
+ <interface_ref>if3</interface_ref>
+ </interface>
+ </interfaces>
+ <macros>
+ <macro>
+ <macro>{$HM1}</macro>
+ <value>hm1b</value>
+ </macro>
+ </macros>
+ <inventory_mode>AUTOMATIC</inventory_mode>
+ </host>
+ </hosts>
+</zabbix_export>
diff --git a/ui/tests/integration/data/confsync_proxy_hosts_updated.xml b/ui/tests/integration/data/confsync_proxy_hosts_updated.xml
new file mode 100644
index 00000000000..c6658dab908
--- /dev/null
+++ b/ui/tests/integration/data/confsync_proxy_hosts_updated.xml
@@ -0,0 +1,995 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<zabbix_export>
+ <version>6.4</version>
+ <date>2022-09-12T13:52:17Z</date>
+ <host_groups>
+ <host_group>
+ <uuid>c9ad86935aa14454a99f3bb442dccb2c</uuid>
+ <name>HG1</name>
+ </host_group>
+ <host_group>
+ <uuid>9a4a9554205541f1bb119cf1cfa3dfd4</uuid>
+ <name>HG1/Subgroup</name>
+ </host_group>
+ </host_groups>
+ <hosts>
+ <host>
+ <host>Host1</host>
+ <name>Host1a</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host2</host>
+ <name>Host2a</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <type>SNMP</type>
+ <port>1611</port>
+ <details>
+ <community>public</community>
+ </details>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host3</host>
+ <name>Host3a</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <type>IPMI</type>
+ <port>624</port>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host4</host>
+ <name>Host4a</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>Host5</host>
+ <name>Host5a</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostInventory</host>
+ <name>HostInventorya</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory>
+ <type>bbbbbbbb</type>
+ <type_full>bbbbbbbb</type_full>
+ <name>bbbbbbbb</name>
+ <alias>bbbbbbbb</alias>
+ <os>bbbbbbbb</os>
+ <os_full>bbbbbbbb</os_full>
+ <os_short>bbbbbbbb</os_short>
+ <serialno_a>bbbbbbbb</serialno_a>
+ <serialno_b>bbbbbbbb</serialno_b>
+ <tag>bbbbbbbb</tag>
+ <asset_tag>bbbbbbbb</asset_tag>
+ <macaddress_a>bbbbbbbb</macaddress_a>
+ <macaddress_b>bbbbbbbb</macaddress_b>
+ <hardware>bbbbbbbb</hardware>
+ <hardware_full>bbbbbbbb</hardware_full>
+ <software>bbbbbbbb</software>
+ <software_full>bbbbbbbb</software_full>
+ <software_app_a>bbbbbbbb</software_app_a>
+ <software_app_b>bbbbbbbb</software_app_b>
+ <software_app_c>bbbbbbbb</software_app_c>
+ <software_app_d>bbbbbbbb</software_app_d>
+ <software_app_e>bbbbbbbb</software_app_e>
+ <contact>bbbbbbbb</contact>
+ <location>bbbbbbbb</location>
+ <location_lat>bbbbbbbb</location_lat>
+ <location_lon>bbbbbbbb</location_lon>
+ <notes>bbbbbbbb</notes>
+ <chassis>bbbbbbbb</chassis>
+ <model>bbbbbbbb</model>
+ <hw_arch>bbbbbbbb</hw_arch>
+ <vendor>bbbbbbbb</vendor>
+ <contract_number>bbbbbbbb</contract_number>
+ <installer_name>bbbbbbbb</installer_name>
+ <deployment_status>bbbbbbbb</deployment_status>
+ <url_a>bbbbbbbb</url_a>
+ <url_b>bbbbbbbb</url_b>
+ <url_c>bbbbbbbb</url_c>
+ <host_networks>bbbbbbbb</host_networks>
+ <host_netmask>bbbbbbbb</host_netmask>
+ <host_router>bbbbbbbb</host_router>
+ <oob_ip>bbbbbbbb</oob_ip>
+ <oob_netmask>bbbbbbbb</oob_netmask>
+ <oob_router>bbbbbbbb</oob_router>
+ <date_hw_purchase>bbbbbbbb</date_hw_purchase>
+ <date_hw_install>bbbbbbbbbbbbbbbb</date_hw_install>
+ <date_hw_expiry>bbbbbbbb</date_hw_expiry>
+ <date_hw_decomm>bbbbbbbb</date_hw_decomm>
+ <site_address_a>bbbbbbbb</site_address_a>
+ <site_address_b>bbbbbbbb</site_address_b>
+ <site_address_c>bbbbbbbb</site_address_c>
+ <site_city>bbbbbbbb</site_city>
+ <site_state>bbbbbbbb</site_state>
+ <site_country>bbbbbbbb</site_country>
+ <site_zip>bbbbbbbb</site_zip>
+ <site_rack>bbbbbbbb</site_rack>
+ <site_notes>bbbbbbbb</site_notes>
+ <poc_1_name>bbbbbbbb</poc_1_name>
+ <poc_1_email>bbbbbbbb</poc_1_email>
+ <poc_1_phone_a>bbbbbbbb</poc_1_phone_a>
+ <poc_1_phone_b>bbbbbbbb</poc_1_phone_b>
+ <poc_1_cell>bbbbbbbb</poc_1_cell>
+ <poc_1_screen>bbbbbbbb</poc_1_screen>
+ <poc_1_notes>bbbbbbbb</poc_1_notes>
+ <poc_2_name>bbbbbbbb</poc_2_name>
+ <poc_2_email>bbbbbbbb</poc_2_email>
+ <poc_2_phone_a>bbbbbbbb</poc_2_phone_a>
+ <poc_2_phone_b>bbbbbbbb</poc_2_phone_b>
+ <poc_2_cell>bbbbbbbb</poc_2_cell>
+ <poc_2_screen>bbbbbbbb</poc_2_screen>
+ <poc_2_notes>bbbbbbbb</poc_2_notes>
+ </inventory>
+ </host>
+ <host>
+ <host>HostInventoryAutomatic</host>
+ <name>HostInventoryAutomatica</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.0.230</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>Hostname1</name>
+ <key>agent.hostname</key>
+ <trends>0</trends>
+ <delay>25s</delay>
+ <value_type>CHAR</value_type>
+ <inventory_link>NAME</inventory_link>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Chassis1</name>
+ <key>system.hw.chassis[model]</key>
+ <trends>0</trends>
+ <delay>25s</delay>
+ <value_type>CHAR</value_type>
+ <inventory_link>HARDWARE_FULL</inventory_link>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Uname1</name>
+ <key>system.uname</key>
+ <trends>0</trends>
+ <delay>25s</delay>
+ <value_type>CHAR</value_type>
+ <inventory_link>OS</inventory_link>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostMultilevelTmpl</host>
+ <name>HostMultilevelTmpla</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <templates>
+ <template>
+ <name>bbbtmpl</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>HG1/Subgroup</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.0.152</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>ItemWithMultilevelMacros11</name>
+ <key>vfs.dir.count[/tmp/{$UU},{$CHLDTMPLMACRO},{$PRNTTMPLMACRO}]</key>
+ <delay>{$PRNTTMPLMACRO}</delay>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithDiscovery</host>
+ <name>HostWithDiscoverya</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <discovery_rules>
+ <discovery_rule>
+ <name>DiscoveryRule</name>
+ <type>SCRIPT</type>
+ <key>dcrule</key>
+ <delay>25s</delay>
+ <params>return &quot;&quot;;</params>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#X}</macro>
+ <value>YA</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ <item_prototypes>
+ <item_prototype>
+ <name>ItemProto1</name>
+ <type>CALCULATED</type>
+ <key>proto[{#X}]</key>
+ <params>1</params>
+ <trigger_prototypes>
+ <trigger_prototype>
+ <expression>last(/HostWithDiscovery/proto[{#X}])=2</expression>
+ <name>TriggerPrototype</name>
+ <priority>HIGH</priority>
+ <manual_close>YES</manual_close>
+ </trigger_prototype>
+ </trigger_prototypes>
+ </item_prototype>
+ </item_prototypes>
+ <host_prototypes>
+ <host_prototype>
+ <host>{#X}.HostPrototype</host>
+ <name>{#X}.HostPrototype</name>
+ <inventory_mode>DISABLED</inventory_mode>
+ <group_links>
+ <group_link>
+ <group>
+ <name>HG1</name>
+ </group>
+ </group_link>
+ </group_links>
+ </host_prototype>
+ </host_prototypes>
+ <lld_macro_paths>
+ <lld_macro_path>
+ <lld_macro>{#X}</lld_macro>
+ <path>$.b</path>
+ </lld_macro_path>
+ </lld_macro_paths>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>c</parameter>
+ <parameter>d</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <overrides>
+ <override>
+ <name>Override</name>
+ <step>1</step>
+ <stop>STOP</stop>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#S}</macro>
+ <value>SSS</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ <operations>
+ <operation>
+ <operationobject>ITEM_PROTOTYPE</operationobject>
+ <value>2</value>
+ <status>DISABLED</status>
+ <discover>NO_DISCOVER</discover>
+ </operation>
+ </operations>
+ </override>
+ </overrides>
+ </discovery_rule>
+ </discovery_rules>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithItems</host>
+ <name>HostWithItemsa</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ <interface>
+ <type>SNMP</type>
+ <port>1611</port>
+ <details>
+ <community>{$SNMP_COMMUNITY}</community>
+ </details>
+ <interface_ref>if2</interface_ref>
+ </interface>
+ <interface>
+ <type>IPMI</type>
+ <port>1623</port>
+ <interface_ref>if3</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>NormalItemPreproc11</name>
+ <key>agent.hostmetadata</key>
+ <trends>0</trends>
+ <delay>20s</delay>
+ <value_type>CHAR</value_type>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>4</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Agent ping (active)1</name>
+ <type>ZABBIX_ACTIVE</type>
+ <key>agent.ping</key>
+ <delay>20s</delay>
+ <tags>
+ <tag>
+ <tag>qw</tag>
+ <value>w1e</value>
+ </tag>
+ </tags>
+ <triggers>
+ <trigger>
+ <expression>now()&gt;2 and baselinedev(/HostWithItems/agent.ping,1M:now/M,&quot;h&quot;,3)=0</expression>
+ <name>TimeBasedAndOrdFuncTrigger</name>
+ <priority>HIGH</priority>
+ <description>HIGH</description>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <name>Agent version (1passive)</name>
+ <key>agent.version</key>
+ <delay>20s</delay>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>alculated1</name>
+ <type>CALCULATED</type>
+ <key>calc</key>
+ <params>1+1+1</params>
+ <triggers>
+ <trigger>
+ <expression>last(/HostWithItems/calc)=2</expression>
+ <name>DepTrigger</name>
+ <priority>HIGH</priority>
+ <manual_close>YES</manual_close>
+ <description>HIGH</description>
+ <dependencies>
+ <dependency>
+ <name>SimpleTrigger2</name>
+ <expression>last(/HostWithItems/calc)=22</expression>
+ </dependency>
+ </dependencies>
+ </trigger>
+ <trigger>
+ <expression>last(/HostWithItems/calc)=2</expression>
+ <name>SimpleTrigger</name>
+ <event_name>SimpleTriggerEvent</event_name>
+ <priority>DISASTER</priority>
+ <manual_close>YES</manual_close>
+ <description>HIGH</description>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bbeq1</value>
+ </tag>
+ </tags>
+ </trigger>
+ <trigger>
+ <expression>last(/HostWithItems/calc)=22</expression>
+ <name>SimpleTrigger2</name>
+ <event_name>SimpleTriggerEvent2</event_name>
+ <priority>WARNING</priority>
+ <manual_close>YES</manual_close>
+ <description>HIGH</description>
+ <tags>
+ <tag>
+ <tag>aae1</tag>
+ <value>bxisxbe1</value>
+ </tag>
+ </tags>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <name>CalculatedAsAggregated1</name>
+ <type>CALCULATED</type>
+ <key>calc_as_aggr</key>
+ <params>sum(last_foreach(/*/agent.version?[group=&quot;HG1&quot;]))</params>
+ </item>
+ <item>
+ <name>CalculatedPreproc1</name>
+ <type>CALCULATED</type>
+ <key>calc_preproc</key>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>4</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <name>ODBC monito1r</name>
+ <type>ODBC</type>
+ <key>db.odbc.select[x,y,z]</key>
+ <params>select null from dual;</params>
+ </item>
+ <item>
+ <name>Dependent item1</name>
+ <type>DEPENDENT</type>
+ <key>depitem</key>
+ <delay>10s</delay>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnCalcPreproc1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_calc_preproc</key>
+ <delay>10s</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>ab</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnDepCalcItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem</key>
+ <delay>10s</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>322</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_calc_preproc</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnNormalDepItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem_normal</key>
+ <delay>10s</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>bab</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_normalitem</key>
+ </master_item>
+ </item>
+ <item>
+ <name>Zabbix internal1</name>
+ <type>INTERNAL</type>
+ <key>zabbix[boottime]</key>
+ </item>
+ <item>
+ <name>DepItemOnInternalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_internal</key>
+ <delay>30s</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>1</parameter>
+ <parameter>2a</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>zabbix[boottime]</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnNormalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normalitem</key>
+ <delay>30s</delay>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>cd</parameter>
+ <parameter>dd</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.ping</key>
+ </master_item>
+ </item>
+ <item>
+ <name>DepItemOnInternalItemPreproc1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normal_preproc</key>
+ <delay>10s</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>41</parameter>
+ <parameter>51</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.version</key>
+ </master_item>
+ </item>
+ <item>
+ <name>External check1</name>
+ <type>EXTERNAL</type>
+ <key>extcheck</key>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>HTTP agent1</name>
+ <type>HTTP_AGENT</type>
+ <key>httpagent</key>
+ <authtype>BASIC</authtype>
+ <username>qqqqqqqqqqqqq</username>
+ <password>wwwwwwwwww</password>
+ <interface_ref>if1</interface_ref>
+ <url>localhost</url>
+ <query_fields>
+ <query_field>
+ <name>a</name>
+ <value>ba</value>
+ </query_field>
+ </query_fields>
+ <posts>test</posts>
+ <headers>
+ <header>
+ <name>x</name>
+ <value>yq</value>
+ </header>
+ </headers>
+ <retrieve_mode>BOTH</retrieve_mode>
+ <output_format>JSON</output_format>
+ <allow_traps>YES</allow_traps>
+ </item>
+ <item>
+ <name>Simple chec1k</name>
+ <type>SIMPLE</type>
+ <key>icmpping[127.1.0.1]</key>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>IPMI agent1</name>
+ <type>IPMI</type>
+ <key>ipmi.get</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <ipmi_sensor>1234</ipmi_sensor>
+ <interface_ref>if3</interface_ref>
+ </item>
+ <item>
+ <name>ItemPreproc1</name>
+ <type>CALCULATED</type>
+ <key>preproc</key>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>.*</parameter>
+ <parameter>vvv</parameter>
+ </parameters>
+ <error_handler>CUSTOM_VALUE</error_handler>
+ <error_handler_params>fail</error_handler_params>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <name>Script1</name>
+ <type>SCRIPT</type>
+ <key>script</key>
+ <params>return &quot;1&quot;;</params>
+ <inventory_link>HARDWARE</inventory_link>
+ <parameters>
+ <parameter>
+ <name>aaa</name>
+ <value>bbbf</value>
+ </parameter>
+ </parameters>
+ </item>
+ <item>
+ <name>SNMP trap1</name>
+ <type>SNMP_TRAP</type>
+ <key>snmptrap.fallback</key>
+ <delay>10s</delay>
+ <interface_ref>if2</interface_ref>
+ </item>
+ <item>
+ <name>SNMP agent1</name>
+ <type>SNMP_AGENT</type>
+ <snmp_oid>SNMPv2-MIB::sysContact.0</snmp_oid>
+ <key>snmp_test</key>
+ <interface_ref>if2</interface_ref>
+ </item>
+ <item>
+ <name>SSH agent1</name>
+ <type>SSH</type>
+ <key>ssh.run[x,localhost]</key>
+ <params>echo</params>
+ <username>username</username>
+ <password>password1</password>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Telnet agent1</name>
+ <type>TELNET</type>
+ <key>telnet.run[a,localhost]</key>
+ <params>echo</params>
+ <username>use1rname</username>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>Zabbix trapper1</name>
+ <type>TRAP</type>
+ <key>trap</key>
+ <delay>10s</delay>
+ </item>
+ <item>
+ <name>delay_globmacro11</name>
+ <key>vfs.file.get[/tmp/{$UU}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithMacros</host>
+ <name>HostWithMacrosa</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.0.223</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ </interfaces>
+ <items>
+ <item>
+ <name>item11</name>
+ <type>CALCULATED</type>
+ <key>itm</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <params>1</params>
+ <triggers>
+ <trigger>
+ <expression>bytelength(last(/HostWithMacros/itm))&gt;bytelength({$HM1})</expression>
+ <name>trigger with macro</name>
+ <description>HIGH</description>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <name>ItemWithGlobalAndHostMacro11</name>
+ <key>sensor[{$UU},{$HM1}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <value_type>FLOAT</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ <item>
+ <name>ItemWithMacro1</name>
+ <key>vfs.file.get[/tmp/{$HM1}]</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <interface_ref>if1</interface_ref>
+ </item>
+ </items>
+ <macros>
+ <macro>
+ <macro>{$HM1}</macro>
+ <value>hm1a</value>
+ </macro>
+ </macros>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithTags</host>
+ <name>HostWithTagsa</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <tags>
+ <tag>
+ <tag>aaa</tag>
+ <value>bbba</value>
+ </tag>
+ <tag>
+ <tag>ccc</tag>
+ <value>dadd</value>
+ </tag>
+ <tag>
+ <tag>macro</tag>
+ <value>{$MACRO}</value>
+ </tag>
+ </tags>
+ <macros>
+ <macro>
+ <macro>{$MACRO}</macro>
+ <value>macroa</value>
+ </macro>
+ </macros>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithTemplate</host>
+ <name>HostWithTemplatea</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <templates>
+ <template>
+ <name>SampleTemplate</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithWebScenario</host>
+ <name>HostWithWebScenarioa</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <groups>
+ <group>
+ <name>HG1</name>
+ </group>
+ </groups>
+ <items>
+ <item>
+ <name>DepItemOnWebScenario11</name>
+ <type>DEPENDENT</type>
+ <key>dep_webscenario</key>
+ <delay>20s</delay>
+ <master_item>
+ <key>web.test.in[WebScenario,,bps]</key>
+ </master_item>
+ </item>
+ </items>
+ <httptests>
+ <httptest>
+ <name>WebScenario</name>
+ <http_proxy>127.0.0.33</http_proxy>
+ <variables>
+ <variable>
+ <name>{a}</name>
+ <value>ba</value>
+ </variable>
+ </variables>
+ <headers>
+ <header>
+ <name>c</name>
+ <value>de</value>
+ </header>
+ </headers>
+ <steps>
+ <step>
+ <name>Step1</name>
+ <url>localhost/aaaa</url>
+ <query_fields>
+ <query_field>
+ <name>qwea</name>
+ <value>erta</value>
+ </query_field>
+ </query_fields>
+ <posts>asdf=zxcv</posts>
+ <variables>
+ <variable>
+ <name>{A}</name>
+ <value>{A}</value>
+ </variable>
+ </variables>
+ <headers>
+ <header>
+ <name>rtyau</name>
+ <value>ghajk</value>
+ </header>
+ </headers>
+ <retrieve_mode>BOTH</retrieve_mode>
+ <timeout>22s</timeout>
+ <required>pattern</required>
+ <status_codes>201</status_codes>
+ </step>
+ </steps>
+ </httptest>
+ </httptests>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ <host>
+ <host>HostWithComprehensiveTemplate</host>
+ <name>HostWithComprehensiveTemplate1</name>
+ <proxy>
+ <name>Proxy</name>
+ </proxy>
+ <templates>
+ <template>
+ <name>ComprehensiveTemplate</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>HG1/Subgroup</name>
+ </group>
+ </groups>
+ <interfaces>
+ <interface>
+ <ip>127.0.1.1</ip>
+ <interface_ref>if1</interface_ref>
+ </interface>
+ <interface>
+ <type>SNMP</type>
+ <ip>127.0.1.3</ip>
+ <port>161</port>
+ <details>
+ <community>{$SNMP_COMMUNITY}</community>
+ </details>
+ <interface_ref>if2</interface_ref>
+ </interface>
+ <interface>
+ <type>IPMI</type>
+ <ip>127.0.1.1</ip>
+ <port>623</port>
+ <interface_ref>if4</interface_ref>
+ </interface>
+ <interface>
+ <type>JMX</type>
+ <ip>127.0.1.1</ip>
+ <port>12345</port>
+ <interface_ref>if3</interface_ref>
+ </interface>
+ </interfaces>
+ <macros>
+ <macro>
+ <macro>{$HM1}</macro>
+ <value>hm1b</value>
+ </macro>
+ </macros>
+ <inventory_mode>DISABLED</inventory_mode>
+ </host>
+ </hosts>
+</zabbix_export>
diff --git a/ui/tests/integration/data/confsync_proxy_tmpl.xml b/ui/tests/integration/data/confsync_proxy_tmpl.xml
new file mode 100644
index 00000000000..e7b67fb5c71
--- /dev/null
+++ b/ui/tests/integration/data/confsync_proxy_tmpl.xml
@@ -0,0 +1,682 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<zabbix_export>
+ <version>6.4</version>
+ <date>2022-09-12T13:32:57Z</date>
+ <template_groups>
+ <template_group>
+ <uuid>bb17447fffe04b7784ddbd77b209c05a</uuid>
+ <name>TmplTests</name>
+ </template_group>
+ </template_groups>
+ <templates>
+ <template>
+ <uuid>17ecce4a1f2b4d739586ad1d6e717812</uuid>
+ <template>bbbtmpl</template>
+ <name>bbbtmpl</name>
+ <templates>
+ <template>
+ <name>SampleTemplate</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>TmplTests</name>
+ </group>
+ </groups>
+ <macros>
+ <macro>
+ <macro>{$CHLDTMPLMACRO}</macro>
+ <value>1</value>
+ </macro>
+ </macros>
+ </template>
+ <template>
+ <uuid>501966b8aa284d1caf393a02bb81d535</uuid>
+ <template>SampleTemplate</template>
+ <name>aaatmpl</name>
+ <groups>
+ <group>
+ <name>TmplTests</name>
+ </group>
+ </groups>
+ <items>
+ <item>
+ <uuid>de72d3b5a20f4e82ba3cab29ebd02d4d</uuid>
+ <name>TemplateItem</name>
+ <type>TRAP</type>
+ <key>tmpltrap</key>
+ <delay>0</delay>
+ <triggers>
+ <trigger>
+ <uuid>72c4555ac57c4daf94ccf1d1178d56fb</uuid>
+ <expression>last(/SampleTemplate/tmpltrap)=2</expression>
+ <name>TemplateTrigger</name>
+ <priority>HIGH</priority>
+ <tags>
+ <tag>
+ <tag>eee</tag>
+ <value>fff</value>
+ </tag>
+ </tags>
+ </trigger>
+ </triggers>
+ </item>
+ </items>
+ <discovery_rules>
+ <discovery_rule>
+ <uuid>4537d1d93224423489130a2785f57ae8</uuid>
+ <name>DiscoveryRule</name>
+ <type>SCRIPT</type>
+ <key>discrule</key>
+ <params>return &quot;&quot;;</params>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#LLDMACRO}</macro>
+ <value>W</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ <item_prototypes>
+ <item_prototype>
+ <uuid>f988e57fcdc541668c3c32919d3cfa60</uuid>
+ <name>DepItemProtoDependsOnNormalItem</name>
+ <type>DEPENDENT</type>
+ <key>depitemproto_deponnormal[{#LLDMACRO}]</key>
+ <delay>0</delay>
+ <master_item>
+ <key>tmpltrap</key>
+ </master_item>
+ <trigger_prototypes>
+ <trigger_prototype>
+ <uuid>ebc83aff113846518d3e1c88532274e1</uuid>
+ <expression>last(/SampleTemplate/depitemproto_deponnormal[{#LLDMACRO}])=0</expression>
+ <name>proto_dep {#LLDMACRO}</name>
+ <dependencies>
+ <dependency>
+ <name>proto {#LLDMACRO}</name>
+ <expression>last(/SampleTemplate/depitemproto_deponnormal[{#LLDMACRO}])=1</expression>
+ </dependency>
+ </dependencies>
+ <tags>
+ <tag>
+ <tag>xxx</tag>
+ <value>yyyy</value>
+ </tag>
+ </tags>
+ </trigger_prototype>
+ <trigger_prototype>
+ <uuid>6032b6444698467c8f41587858f089e5</uuid>
+ <expression>last(/SampleTemplate/depitemproto_deponnormal[{#LLDMACRO}])=1</expression>
+ <name>proto {#LLDMACRO}</name>
+ <tags>
+ <tag>
+ <tag>AAA</tag>
+ <value>bbb</value>
+ </tag>
+ <tag>
+ <tag>CCC</tag>
+ <value>ddd</value>
+ </tag>
+ </tags>
+ </trigger_prototype>
+ </trigger_prototypes>
+ </item_prototype>
+ </item_prototypes>
+ <lld_macro_paths>
+ <lld_macro_path>
+ <lld_macro>{#LLDMACRO}</lld_macro>
+ <path>$.macro</path>
+ </lld_macro_path>
+ </lld_macro_paths>
+ <overrides>
+ <override>
+ <name>OverrideA</name>
+ <step>1</step>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#LLDMACRO}</macro>
+ <value>q</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ </override>
+ </overrides>
+ </discovery_rule>
+ </discovery_rules>
+ <httptests>
+ <httptest>
+ <uuid>d3f36682c20947cf910e733d8af93c95</uuid>
+ <name>WebScenTmpl</name>
+ <steps>
+ <step>
+ <name>StepWSTmpl</name>
+ <url>localhost</url>
+ </step>
+ </steps>
+ </httptest>
+ </httptests>
+ <macros>
+ <macro>
+ <macro>{$PRNTTMPLMACRO}</macro>
+ <value>2</value>
+ </macro>
+ </macros>
+ </template>
+ <template>
+ <uuid>efd071ed46cb4eaa84405d6469428910</uuid>
+ <template>ComprehensiveTemplate</template>
+ <name>ComprehensiveTemplate</name>
+ <groups>
+ <group>
+ <name>TmplTests</name>
+ </group>
+ </groups>
+ <items>
+ <item>
+ <uuid>9a1082526795476ab429acd9caafc920</uuid>
+ <name>NormalItemPreproc1</name>
+ <key>agent.hostmetadata</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>4</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>79a3b0eca3764c64abc7c53b83c0ce83</uuid>
+ <name>Hostname1</name>
+ <key>agent.hostname</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>NAME</inventory_link>
+ </item>
+ <item>
+ <uuid>ca3303d4b06a4d05915bf4a6785962cb</uuid>
+ <name>Agent ping (active)1</name>
+ <type>ZABBIX_ACTIVE</type>
+ <key>agent.ping</key>
+ <tags>
+ <tag>
+ <tag>qw</tag>
+ <value>w1e</value>
+ </tag>
+ </tags>
+ <triggers>
+ <trigger>
+ <uuid>02f89248506b4288b90646576e5d3e5f</uuid>
+ <expression>now()&gt;1 and baselinedev(/ComprehensiveTemplate/agent.ping,1M:now/M,&quot;h&quot;,2)=0</expression>
+ <name>TimeBasedAndOrdFuncTrigger1</name>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <uuid>1b74d86537414efe8dee3c05442aff2c</uuid>
+ <name>Agent version (passive)1</name>
+ <key>agent.version</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ </item>
+ <item>
+ <uuid>79a349483aae4d01915d0d307191dd56</uuid>
+ <name>Calculated1</name>
+ <type>CALCULATED</type>
+ <key>calc</key>
+ <params>1+1+1</params>
+ <triggers>
+ <trigger>
+ <uuid>d6edfd2d79874f9db4cfefe3065ea13e</uuid>
+ <expression>last(/ComprehensiveTemplate/calc)=1</expression>
+ <name>DepTrigger1</name>
+ <priority>DISASTER</priority>
+ <manual_close>YES</manual_close>
+ <dependencies>
+ <dependency>
+ <name>SimpleTrigger1</name>
+ <expression>last(/ComprehensiveTemplate/calc)=1</expression>
+ </dependency>
+ </dependencies>
+ </trigger>
+ <trigger>
+ <uuid>a82242bc84594586843847afe5296adb</uuid>
+ <expression>last(/ComprehensiveTemplate/calc)=1</expression>
+ <name>SimpleTrigger1</name>
+ <event_name>SimpleTriggerEvent</event_name>
+ <priority>WARNING</priority>
+ <manual_close>YES</manual_close>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bbeq</value>
+ </tag>
+ </tags>
+ </trigger>
+ <trigger>
+ <uuid>29f384f401b643d7b6889324470783ab</uuid>
+ <expression>last(/ComprehensiveTemplate/calc)=2</expression>
+ <name>SimpleTrigger21</name>
+ <event_name>SimpleTriggerEvent2</event_name>
+ <priority>DISASTER</priority>
+ <manual_close>YES</manual_close>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bxisxbe</value>
+ </tag>
+ </tags>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <uuid>16e297773b8d48958ebd4da74918687c</uuid>
+ <name>CalculatedItemPreprocStepTest1</name>
+ <type>CALCULATED</type>
+ <key>calculateditempreprocsteptest</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <params>1+1</params>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>.*</parameter>
+ <parameter>x</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>1</parameter>
+ <parameter>2</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>TRIM</type>
+ <parameters>
+ <parameter>abc</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>RTRIM</type>
+ <parameters>
+ <parameter>bbb</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>LTRIM</type>
+ <parameters>
+ <parameter>ccc</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>MATCHES_REGEX</type>
+ <parameters>
+ <parameter>.*x</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>DISCARD_UNCHANGED</type>
+ <parameters>
+ <parameter/>
+ </parameters>
+ </step>
+ <step>
+ <type>CSV_TO_JSON</type>
+ <parameters>
+ <parameter/>
+ <parameter/>
+ <parameter>1</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>34693044a4b84f269f829c92b8e6888f</uuid>
+ <name>CalculatedAsAggregated1</name>
+ <type>CALCULATED</type>
+ <key>calc_as_aggr</key>
+ <params>sum(last_foreach(/*/agent.version?[group=&quot;HG1&quot;]))</params>
+ </item>
+ <item>
+ <uuid>489114fec8b44645b96b9c463ea54f22</uuid>
+ <name>CalculatedPreproc1</name>
+ <type>CALCULATED</type>
+ <key>calc_preproc</key>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>4</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>de2c2812f00240ec84359fb3c0165ff6</uuid>
+ <name>ODBC monitor1</name>
+ <type>ODBC</type>
+ <key>db.odbc.select[x,y,z]</key>
+ <params>select null from dual;</params>
+ </item>
+ <item>
+ <uuid>2012d2c4562340d990eebfac680cc1da</uuid>
+ <name>Dependent item1</name>
+ <type>DEPENDENT</type>
+ <key>depitem</key>
+ <delay>0</delay>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>d8def5fedd5a42a7b9a910c805a56899</uuid>
+ <name>DepItemOnCalcPreproc1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_calc_preproc</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>ab</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>10741348d10842d5a2888c7c3ebe4063</uuid>
+ <name>DepItemOnDepCalcItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>322</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_calc_preproc</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>d3e8a08190584da2a79f0c2c665a62ee</uuid>
+ <name>DepItemOnNormalDepItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem_normal</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>bab</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_normalitem</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>fd462776884943c08b6998bff03d5267</uuid>
+ <name>DepItemOnInternalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_internal</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>1</parameter>
+ <parameter>2a</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>zabbix[boottime]</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>a1baaaa5e7af48578a749c5380426ed6</uuid>
+ <name>DepItemOnNormalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normalitem</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>cd</parameter>
+ <parameter>dd</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.ping</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>0a65fd6e155747ad9768e1c48c874264</uuid>
+ <name>DepItemOnInternalItemPreproc1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normal_preproc</key>
+ <delay>0</delay>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>41</parameter>
+ <parameter>51</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.version</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>e2b844f2d30440ef88deff5f3a596e1b</uuid>
+ <name>External check1</name>
+ <type>EXTERNAL</type>
+ <key>extcheck</key>
+ </item>
+ <item>
+ <uuid>2644c18c42864249a4be85871879af30</uuid>
+ <name>HTTP agent1</name>
+ <type>HTTP_AGENT</type>
+ <key>httpagent</key>
+ <authtype>BASIC</authtype>
+ <username>qqqqqqqqqqqqq</username>
+ <password>wwwwwwwwww</password>
+ <url>localhost</url>
+ <query_fields>
+ <query_field>
+ <name>a1</name>
+ <value>ba</value>
+ </query_field>
+ </query_fields>
+ <posts>test</posts>
+ <headers>
+ <header>
+ <name>x1</name>
+ <value>yq</value>
+ </header>
+ </headers>
+ <retrieve_mode>BOTH</retrieve_mode>
+ <output_format>JSON</output_format>
+ <allow_traps>YES</allow_traps>
+ </item>
+ <item>
+ <uuid>352e9f1baba8491f9fcf4e0e8d968f4d</uuid>
+ <name>Simple check1</name>
+ <type>SIMPLE</type>
+ <key>icmpping[127.0.0.1]</key>
+ </item>
+ <item>
+ <uuid>f219f82b5f2f41d0a72f718684476638</uuid>
+ <name>IPMI agent1</name>
+ <type>IPMI</type>
+ <key>ipmi.get</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <ipmi_sensor>1234</ipmi_sensor>
+ </item>
+ <item>
+ <uuid>5184862f271d4f8ebec44ef6526c1da1</uuid>
+ <name>item11</name>
+ <type>CALCULATED</type>
+ <key>itm</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <params>1</params>
+ <triggers>
+ <trigger>
+ <uuid>3d12940891624ea38571bde3202bc728</uuid>
+ <expression>bitlength(last(/ComprehensiveTemplate/itm))&gt;bitlength({$HM1})</expression>
+ <name>trigger with macro1</name>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <uuid>3ce4f0ce210148cdb778a05e00bbdc81</uuid>
+ <name>ItemPreproc1</name>
+ <type>CALCULATED</type>
+ <key>preproc</key>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>.*</parameter>
+ <parameter>vvv</parameter>
+ </parameters>
+ <error_handler>CUSTOM_VALUE</error_handler>
+ <error_handler_params>fail</error_handler_params>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>74db5c8a26b447468c2f2590af135878</uuid>
+ <name>Script1</name>
+ <type>SCRIPT</type>
+ <key>script</key>
+ <params>return &quot;1&quot;;</params>
+ <inventory_link>HARDWARE</inventory_link>
+ <parameters>
+ <parameter>
+ <name>aaa1</name>
+ <value>bbbf</value>
+ </parameter>
+ </parameters>
+ </item>
+ <item>
+ <uuid>d94160c34be4455bba660b1b18c0fb0e</uuid>
+ <name>ItemWithGlobalAndHostMacro1</name>
+ <key>sensor[{$UU},{$HM1}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <value_type>FLOAT</value_type>
+ </item>
+ <item>
+ <uuid>5861cb498c044908a7aa5b225500ba3d</uuid>
+ <name>SNMP trap1</name>
+ <type>SNMP_TRAP</type>
+ <key>snmptrap.fallback</key>
+ <delay>10s</delay>
+ </item>
+ <item>
+ <uuid>0106d4d9fba64066a66fbfe2d2340602</uuid>
+ <name>SNMP agent1</name>
+ <type>SNMP_AGENT</type>
+ <snmp_oid>SNMPv2-MIB::sysContact.0</snmp_oid>
+ <key>snmp_test</key>
+ </item>
+ <item>
+ <uuid>49db5d3e8da84948a543801129a84b99</uuid>
+ <name>SSH agent1</name>
+ <type>SSH</type>
+ <key>ssh.run[x,localhost]</key>
+ <params>echo</params>
+ <username>username</username>
+ <password>password1</password>
+ </item>
+ <item>
+ <uuid>74939b6a93294881ac5ec83d885920c9</uuid>
+ <name>Chassis1</name>
+ <key>system.hw.chassis[model]</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>HARDWARE_FULL</inventory_link>
+ </item>
+ <item>
+ <uuid>8d311f6a4fb44a4ab325600539f8398e</uuid>
+ <name>Uname1</name>
+ <key>system.uname</key>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>OS</inventory_link>
+ </item>
+ <item>
+ <uuid>dca59a5058074e9f96a3d81f973bba75</uuid>
+ <name>Telnet agent1</name>
+ <type>TELNET</type>
+ <key>telnet.run[a,localhost]</key>
+ <params>echo</params>
+ <username>use1rname</username>
+ </item>
+ <item>
+ <uuid>aaaff64eee7e47589a6b6a329a1060a3</uuid>
+ <name>Zabbix trapper1</name>
+ <type>TRAP</type>
+ <key>trap</key>
+ <delay>0</delay>
+ </item>
+ <item>
+ <uuid>a1dfb8d4a8004159979dff4f884f5d89</uuid>
+ <name>ItemWithMultilevelMacros1</name>
+ <key>vfs.dir.count[/tmp/{$UU},{$CHLDTMPLMACRO},{$PRNTTMPLMACRO}]</key>
+ <delay>{$PRNTTMPLMACRO}</delay>
+ </item>
+ <item>
+ <uuid>381db19a280a4c27a1ad86693ea535bc</uuid>
+ <name>ItemWithMacro1</name>
+ <key>vfs.file.get[/tmp/{$HM1}]</key>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ </item>
+ <item>
+ <uuid>ec8e28d9728f4418af7847db9ce17612</uuid>
+ <name>delay_globmacro1</name>
+ <key>vfs.file.get[/tmp/{$UU}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ </item>
+ <item>
+ <uuid>2a562bcf814343afb9c5cc4e9619e307</uuid>
+ <name>Zabbix internal1</name>
+ <type>INTERNAL</type>
+ <key>zabbix[boottime]</key>
+ </item>
+ </items>
+ </template>
+ </templates>
+</zabbix_export>
diff --git a/ui/tests/integration/data/confsync_proxy_tmpl_updated.xml b/ui/tests/integration/data/confsync_proxy_tmpl_updated.xml
new file mode 100644
index 00000000000..9397219894b
--- /dev/null
+++ b/ui/tests/integration/data/confsync_proxy_tmpl_updated.xml
@@ -0,0 +1,718 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<zabbix_export>
+ <version>6.4</version>
+ <date>2022-09-12T13:32:57Z</date>
+ <template_groups>
+ <template_group>
+ <uuid>bb17447fffe04b7784ddbd77b209c05a</uuid>
+ <name>TmplTests</name>
+ </template_group>
+ </template_groups>
+ <templates>
+ <template>
+ <uuid>beae65b7da0a4106bb34b9fc5d39120e</uuid>
+ <template>bbbtmpl</template>
+ <name>bbbtmpl</name>
+ <templates>
+ <template>
+ <name>SampleTemplate</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>TmplTests</name>
+ </group>
+ </groups>
+ <macros>
+ <macro>
+ <macro>{$CHLDTMPLMACRO}</macro>
+ <value>1</value>
+ </macro>
+ </macros>
+ </template>
+ <template>
+ <uuid>02988c606ac84654beb66617b9d7a80c</uuid>
+ <template>SampleTemplate</template>
+ <name>aaatmpl</name>
+ <groups>
+ <group>
+ <name>TmplTests</name>
+ </group>
+ </groups>
+ <items>
+ <item>
+ <uuid>9a443737fdc84f9a8305294ccb8c1ce9</uuid>
+ <name>TemplateItem</name>
+ <type>TRAP</type>
+ <key>tmpltrap</key>
+ <delay>10s</delay>
+ <triggers>
+ <trigger>
+ <uuid>677b5052252d423491ec680c7b1b32e5</uuid>
+ <expression>last(/SampleTemplate/tmpltrap)=3</expression>
+ <name>TemplateTrigger</name>
+ <priority>HIGH</priority>
+ <tags>
+ <tag>
+ <tag>eee</tag>
+ <value>faff</value>
+ </tag>
+ </tags>
+ </trigger>
+ </triggers>
+ </item>
+ </items>
+ <discovery_rules>
+ <discovery_rule>
+ <uuid>0c03a20de6f144d68bd48855e59fb32e</uuid>
+ <name>DiscoveryRule</name>
+ <type>SCRIPT</type>
+ <key>discrule</key>
+ <params>return &quot;&quot;;</params>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#LLDMACRO}</macro>
+ <value>WA</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ <item_prototypes>
+ <item_prototype>
+ <uuid>4d34d26d2480480c862261b1b9e9d99d</uuid>
+ <name>DepItemProtoDependsOnNormalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitemproto_deponnormal[{#LLDMACRO}]</key>
+ <delay>10s</delay>
+ <master_item>
+ <key>tmpltrap</key>
+ </master_item>
+ <trigger_prototypes>
+ <trigger_prototype>
+ <uuid>c64594a285b64df79b137eeaec10e52b</uuid>
+ <expression>last(/SampleTemplate/depitemproto_deponnormal[{#LLDMACRO}])=10</expression>
+ <name>proto_dep {#LLDMACRO}</name>
+ <dependencies>
+ <dependency>
+ <name>proto {#LLDMACRO}</name>
+ <expression>last(/SampleTemplate/depitemproto_deponnormal[{#LLDMACRO}])=110</expression>
+ </dependency>
+ </dependencies>
+ <tags>
+ <tag>
+ <tag>xxx</tag>
+ <value>yyy1y</value>
+ </tag>
+ </tags>
+ </trigger_prototype>
+ <trigger_prototype>
+ <uuid>1f2fbda374544b0cb77869c6f1d88314</uuid>
+ <expression>last(/SampleTemplate/depitemproto_deponnormal[{#LLDMACRO}])=10</expression>
+ <name>proto {#LLDMACRO}</name>
+ <tags>
+ <tag>
+ <tag>AAA</tag>
+ <value>bb1b</value>
+ </tag>
+ <tag>
+ <tag>CCC</tag>
+ <value>dda1d</value>
+ </tag>
+ </tags>
+ </trigger_prototype>
+ </trigger_prototypes>
+ </item_prototype>
+ </item_prototypes>
+ <lld_macro_paths>
+ <lld_macro_path>
+ <lld_macro>{#LLDMACRO}</lld_macro>
+ <path>$.macro</path>
+ </lld_macro_path>
+ </lld_macro_paths>
+ <overrides>
+ <override>
+ <name>OverrideA</name>
+ <step>1</step>
+ <filter>
+ <conditions>
+ <condition>
+ <macro>{#LLDMACRO}</macro>
+ <value>q1</value>
+ <formulaid>A</formulaid>
+ </condition>
+ </conditions>
+ </filter>
+ </override>
+ </overrides>
+ </discovery_rule>
+ </discovery_rules>
+ <httptests>
+ <httptest>
+ <uuid>14b0dc4f96ac43ceafafa7ef817ef4d6</uuid>
+ <name>WebScenTmpl</name>
+ <delay>2m</delay>
+ <steps>
+ <step>
+ <name>StepWSTmpl</name>
+ <url>localhost/zabbix</url>
+ </step>
+ </steps>
+ </httptest>
+ </httptests>
+ <macros>
+ <macro>
+ <macro>{$PRNTTMPLMACRO}</macro>
+ <value>22</value>
+ </macro>
+ </macros>
+ </template>
+ <template>
+ <uuid>efd071ed46cb4eaa84405d6469428910</uuid>
+ <template>ComprehensiveTemplate</template>
+ <name>ComprehensiveTemplate</name>
+ <groups>
+ <group>
+ <name>TmplTests</name>
+ </group>
+ </groups>
+ <items>
+ <item>
+ <uuid>9a1082526795476ab429acd9caafc920</uuid>
+ <name>NormalItemPreproc1</name>
+ <key>agent.hostmetadata</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>4</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>79a3b0eca3764c64abc7c53b83c0ce83</uuid>
+ <name>Hostname1</name>
+ <key>agent.hostname</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>NAME</inventory_link>
+ </item>
+ <item>
+ <uuid>ca3303d4b06a4d05915bf4a6785962cb</uuid>
+ <name>Agent ping (active)1q</name>
+ <type>ZABBIX_ACTIVE</type>
+ <key>agent.ping</key>
+ <delay>23s</delay>
+ <tags>
+ <tag>
+ <tag>qw</tag>
+ <value>w1e</value>
+ </tag>
+ </tags>
+ <triggers>
+ <trigger>
+ <uuid>02f89248506b4288b90646576e5d3e5f</uuid>
+ <expression>now()&gt;1 and baselinedev(/ComprehensiveTemplate/agent.ping,1M:now/M,&quot;h&quot;,2)=22</expression>
+ <name>TimeBasedAndOrdFuncTrigger1</name>
+ <priority>HIGH</priority>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <uuid>1b74d86537414efe8dee3c05442aff2c</uuid>
+ <name>Agent version (passive)1q</name>
+ <key>agent.version</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ </item>
+ <item>
+ <uuid>79a349483aae4d01915d0d307191dd56</uuid>
+ <name>Calculated1q</name>
+ <type>CALCULATED</type>
+ <key>calc</key>
+ <delay>23s</delay>
+ <params>1+1+1</params>
+ <triggers>
+ <trigger>
+ <uuid>d6edfd2d79874f9db4cfefe3065ea13e</uuid>
+ <expression>last(/ComprehensiveTemplate/calc)=1</expression>
+ <name>DepTrigger1</name>
+ <priority>HIGH</priority>
+ <manual_close>YES</manual_close>
+ <dependencies>
+ <dependency>
+ <name>SimpleTrigger1</name>
+ <expression>last(/ComprehensiveTemplate/calc)=1</expression>
+ </dependency>
+ </dependencies>
+ </trigger>
+ <trigger>
+ <uuid>a82242bc84594586843847afe5296adb</uuid>
+ <expression>last(/ComprehensiveTemplate/calc)=1</expression>
+ <name>SimpleTrigger1</name>
+ <event_name>SimpleTriggerEvent</event_name>
+ <priority>HIGH</priority>
+ <manual_close>YES</manual_close>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bbeq</value>
+ </tag>
+ </tags>
+ </trigger>
+ <trigger>
+ <uuid>29f384f401b643d7b6889324470783ab</uuid>
+ <expression>last(/ComprehensiveTemplate/calc)=22</expression>
+ <name>SimpleTrigger21</name>
+ <event_name>SimpleTriggerEvent2</event_name>
+ <priority>HIGH</priority>
+ <manual_close>YES</manual_close>
+ <tags>
+ <tag>
+ <tag>aae</tag>
+ <value>bxisxbe</value>
+ </tag>
+ </tags>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <uuid>16e297773b8d48958ebd4da74918687c</uuid>
+ <name>CalculatedItemPreprocStepTest1</name>
+ <type>CALCULATED</type>
+ <key>calculateditempreprocsteptest</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <params>1+1</params>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>.*</parameter>
+ <parameter>x</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>1</parameter>
+ <parameter>2</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>TRIM</type>
+ <parameters>
+ <parameter>abc</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>RTRIM</type>
+ <parameters>
+ <parameter>bbb</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>LTRIM</type>
+ <parameters>
+ <parameter>ccc</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>MATCHES_REGEX</type>
+ <parameters>
+ <parameter>.*x</parameter>
+ </parameters>
+ </step>
+ <step>
+ <type>DISCARD_UNCHANGED</type>
+ <parameters>
+ <parameter/>
+ </parameters>
+ </step>
+ <step>
+ <type>CSV_TO_JSON</type>
+ <parameters>
+ <parameter/>
+ <parameter/>
+ <parameter>1</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>34693044a4b84f269f829c92b8e6888f</uuid>
+ <name>CalculatedAsAggregated1</name>
+ <type>CALCULATED</type>
+ <key>calc_as_aggr</key>
+ <delay>23s</delay>
+ <params>sum(last_foreach(/*/agent.version?[group=&quot;HG1&quot;]))</params>
+ </item>
+ <item>
+ <uuid>489114fec8b44645b96b9c463ea54f22</uuid>
+ <name>CalculatedPreproc1</name>
+ <type>CALCULATED</type>
+ <key>calc_preproc</key>
+ <delay>23s</delay>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>4</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>de2c2812f00240ec84359fb3c0165ff6</uuid>
+ <name>ODBC monitor1</name>
+ <type>ODBC</type>
+ <key>db.odbc.select[x,y,z]</key>
+ <delay>23s</delay>
+ <params>select null from dual;</params>
+ </item>
+ <item>
+ <uuid>2012d2c4562340d990eebfac680cc1da</uuid>
+ <name>Dependent item1</name>
+ <type>DEPENDENT</type>
+ <key>depitem</key>
+ <delay>0</delay>
+ <inventory_link>TYPE</inventory_link>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>d8def5fedd5a42a7b9a910c805a56899</uuid>
+ <name>DepItemOnCalcPreproc1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_calc_preproc</key>
+ <delay>0</delay>
+ <inventory_link>ALIAS</inventory_link>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>ab</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>calc</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>10741348d10842d5a2888c7c3ebe4063</uuid>
+ <name>DepItemOnDepCalcItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem</key>
+ <delay>0</delay>
+ <inventory_link>TAG</inventory_link>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>3</parameter>
+ <parameter>322</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_calc_preproc</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>d3e8a08190584da2a79f0c2c665a62ee</uuid>
+ <name>DepItemOnNormalDepItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_depitem_normal</key>
+ <delay>0</delay>
+ <inventory_link>SERIALNO_B</inventory_link>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>aa</parameter>
+ <parameter>bab</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>depitem_normalitem</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>fd462776884943c08b6998bff03d5267</uuid>
+ <name>DepItemOnInternalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_internal</key>
+ <delay>0</delay>
+ <inventory_link>MACADDRESS_B</inventory_link>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>1</parameter>
+ <parameter>2a</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>zabbix[boottime]</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>a1baaaa5e7af48578a749c5380426ed6</uuid>
+ <name>DepItemOnNormalItem1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normalitem</key>
+ <delay>0</delay>
+ <inventory_link>SOFTWARE_APP_E</inventory_link>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>cd</parameter>
+ <parameter>dd</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.ping</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>0a65fd6e155747ad9768e1c48c874264</uuid>
+ <name>DepItemOnInternalItemPreproc1</name>
+ <type>DEPENDENT</type>
+ <key>depitem_normal_preproc</key>
+ <delay>0</delay>
+ <inventory_link>SERIALNO_A</inventory_link>
+ <preprocessing>
+ <step>
+ <type>STR_REPLACE</type>
+ <parameters>
+ <parameter>41</parameter>
+ <parameter>51</parameter>
+ </parameters>
+ </step>
+ </preprocessing>
+ <master_item>
+ <key>agent.version</key>
+ </master_item>
+ </item>
+ <item>
+ <uuid>e2b844f2d30440ef88deff5f3a596e1b</uuid>
+ <name>External check1</name>
+ <type>EXTERNAL</type>
+ <key>extcheck</key>
+ <delay>23s</delay>
+ </item>
+ <item>
+ <uuid>2644c18c42864249a4be85871879af30</uuid>
+ <name>HTTP agent1</name>
+ <type>HTTP_AGENT</type>
+ <key>httpagent</key>
+ <delay>23s</delay>
+ <authtype>BASIC</authtype>
+ <username>qqqqqqqqqqqqq</username>
+ <password>wwwwwwwwww</password>
+ <url>localhost</url>
+ <query_fields>
+ <query_field>
+ <name>a1</name>
+ <value>ba</value>
+ </query_field>
+ </query_fields>
+ <posts>test</posts>
+ <headers>
+ <header>
+ <name>x1</name>
+ <value>yq</value>
+ </header>
+ </headers>
+ <retrieve_mode>BOTH</retrieve_mode>
+ <output_format>JSON</output_format>
+ <allow_traps>YES</allow_traps>
+ </item>
+ <item>
+ <uuid>352e9f1baba8491f9fcf4e0e8d968f4d</uuid>
+ <name>Simple check1</name>
+ <type>SIMPLE</type>
+ <key>icmpping[127.0.0.1]</key>
+ <delay>23s</delay>
+ </item>
+ <item>
+ <uuid>f219f82b5f2f41d0a72f718684476638</uuid>
+ <name>IPMI agent1</name>
+ <type>IPMI</type>
+ <key>ipmi.get</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <ipmi_sensor>1234</ipmi_sensor>
+ </item>
+ <item>
+ <uuid>5184862f271d4f8ebec44ef6526c1da1</uuid>
+ <name>item11</name>
+ <type>CALCULATED</type>
+ <key>itm</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ <params>1</params>
+ <triggers>
+ <trigger>
+ <uuid>3d12940891624ea38571bde3202bc728</uuid>
+ <expression>bitlength(last(/ComprehensiveTemplate/itm))&gt;bytelength({$HM1})</expression>
+ <name>trigger with macro1</name>
+ <priority>HIGH</priority>
+ </trigger>
+ </triggers>
+ </item>
+ <item>
+ <uuid>3ce4f0ce210148cdb778a05e00bbdc81</uuid>
+ <name>ItemPreproc1</name>
+ <type>CALCULATED</type>
+ <key>preproc</key>
+ <delay>23s</delay>
+ <params>1</params>
+ <preprocessing>
+ <step>
+ <type>REGEX</type>
+ <parameters>
+ <parameter>.*</parameter>
+ <parameter>vvv</parameter>
+ </parameters>
+ <error_handler>CUSTOM_VALUE</error_handler>
+ <error_handler_params>fail</error_handler_params>
+ </step>
+ </preprocessing>
+ </item>
+ <item>
+ <uuid>74db5c8a26b447468c2f2590af135878</uuid>
+ <name>Script1</name>
+ <type>SCRIPT</type>
+ <key>script</key>
+ <delay>23s</delay>
+ <params>return &quot;1&quot;;</params>
+ <inventory_link>HARDWARE</inventory_link>
+ <parameters>
+ <parameter>
+ <name>aaa1</name>
+ <value>bbbf</value>
+ </parameter>
+ </parameters>
+ </item>
+ <item>
+ <uuid>d94160c34be4455bba660b1b18c0fb0e</uuid>
+ <name>ItemWithGlobalAndHostMacro1</name>
+ <key>sensor[{$UU},{$HM1}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <value_type>FLOAT</value_type>
+ </item>
+ <item>
+ <uuid>5861cb498c044908a7aa5b225500ba3d</uuid>
+ <name>SNMP trap1</name>
+ <type>SNMP_TRAP</type>
+ <key>snmptrap.fallback</key>
+ <delay>0</delay>
+ <units>MB</units>
+ </item>
+ <item>
+ <uuid>0106d4d9fba64066a66fbfe2d2340602</uuid>
+ <name>SNMP agent1</name>
+ <type>SNMP_AGENT</type>
+ <snmp_oid>SNMPv2-MIB::sysContact.0</snmp_oid>
+ <key>snmp_test</key>
+ <delay>23s</delay>
+ </item>
+ <item>
+ <uuid>49db5d3e8da84948a543801129a84b99</uuid>
+ <name>SSH agent1</name>
+ <type>SSH</type>
+ <key>ssh.run[x,localhost]</key>
+ <delay>23s</delay>
+ <params>echo</params>
+ <username>username</username>
+ <password>password1</password>
+ </item>
+ <item>
+ <uuid>74939b6a93294881ac5ec83d885920c9</uuid>
+ <name>Chassis1</name>
+ <key>system.hw.chassis[model]</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>HARDWARE_FULL</inventory_link>
+ </item>
+ <item>
+ <uuid>8d311f6a4fb44a4ab325600539f8398e</uuid>
+ <name>Uname1</name>
+ <key>system.uname</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>CHAR</value_type>
+ <inventory_link>OS</inventory_link>
+ </item>
+ <item>
+ <uuid>dca59a5058074e9f96a3d81f973bba75</uuid>
+ <name>Telnet agent1</name>
+ <type>TELNET</type>
+ <key>telnet.run[a,localhost]</key>
+ <delay>23s</delay>
+ <params>echo</params>
+ <username>use1rname</username>
+ </item>
+ <item>
+ <uuid>aaaff64eee7e47589a6b6a329a1060a3</uuid>
+ <name>Zabbix trapper1</name>
+ <type>TRAP</type>
+ <key>trap</key>
+ <delay>0</delay>
+ <units>MB</units>
+ </item>
+ <item>
+ <uuid>a1dfb8d4a8004159979dff4f884f5d89</uuid>
+ <name>ItemWithMultilevelMacros1</name>
+ <key>vfs.dir.count[/{$UU},{$CHLDTMPLMACRO},{$PRNTTMPLMACRO}]</key>
+ <delay>{$PRNTTMPLMACRO}</delay>
+ <units>MB</units>
+ </item>
+ <item>
+ <uuid>381db19a280a4c27a1ad86693ea535bc</uuid>
+ <name>ItemWithMacro1</name>
+ <key>vfs.file.get[/tmp/{$HM1}]</key>
+ <delay>23s</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ </item>
+ <item>
+ <uuid>ec8e28d9728f4418af7847db9ce17612</uuid>
+ <name>delay_globmacro1</name>
+ <key>vfs.file.get[/{$UU}]</key>
+ <delay>{$GLOBDELAY}</delay>
+ <trends>0</trends>
+ <value_type>TEXT</value_type>
+ </item>
+ <item>
+ <uuid>2a562bcf814343afb9c5cc4e9619e307</uuid>
+ <name>Zabbix internal1</name>
+ <type>INTERNAL</type>
+ <key>zabbix[boottime]</key>
+ <delay>23s</delay>
+ </item>
+ </items>
+ </template>
+ </templates>
+</zabbix_export>
diff --git a/ui/tests/integration/testDataCollection.php b/ui/tests/integration/testDataCollection.php
index b3b1db8e9bc..6f2fcbf9dff 100644
--- a/ui/tests/integration/testDataCollection.php
+++ b/ui/tests/integration/testDataCollection.php
@@ -339,4 +339,90 @@ class testDataCollection extends CIntegrationTest {
$this->assertEquals('proxy_agent', $item['value']);
}
}
+
+ /**
+ * Test incremental pre-processing manager cache refresh.
+ *
+ * @required-components server
+ */
+ public function testDataCollection_preprocManagerCacheRefresh() {
+ $response = $this->call('host.create', [
+ [
+ 'host' => 'trapper_host',
+ 'interfaces' => [
+ 'type' => 1,
+ 'main' => 1,
+ 'useip' => 1,
+ 'ip' => '127.0.0.1',
+ 'dns' => '',
+ 'port' => $this->getConfigurationValue(self::COMPONENT_AGENT, 'ListenPort')
+ ],
+ 'groups' => [['groupid' => 4]],
+ 'status' => HOST_STATUS_MONITORED
+ ]
+ ]);
+ $this->assertArrayHasKey('hostids', $response['result']);
+ $this->assertArrayHasKey(0, $response['result']['hostids']);
+ $hostid = $response['result']['hostids'][0];
+
+ $response = $this->call('item.create', [
+ 'hostid' => $hostid,
+ 'name' => 'trap',
+ 'key_' => 'trap',
+ 'type' => ITEM_TYPE_TRAPPER,
+ 'value_type' => ITEM_VALUE_TYPE_UINT64,
+ 'preprocessing' => [[
+ 'params' => '100',
+ 'type' => 1,
+ 'error_handler' => 1,
+ 'error_handler_params' => ''
+ ]]
+ ]);
+ $this->assertArrayHasKey('itemids', $response['result']);
+ $this->assertEquals(1, count($response['result']['itemids']));
+ $itemid = $response['result']['itemids'][0];
+
+ $this->reloadConfigurationCache(self::COMPONENT_SERVER);
+
+ $this->sendSenderValue('trapper_host', 'trap', 1, self::COMPONENT_SERVER);
+
+ $response = $this->callUntilDataIsPresent('history.get', [
+ 'sortfield' => 'clock',
+ 'sortorder' => 'DESC',
+ 'limit' => 1,
+ 'itemids' => [$itemid]
+ ], 60, 1);
+ $this->assertArrayHasKey('result', $response);
+ $this->assertEquals(1, count($response['result']));
+ $this->assertArrayHasKey('value', $response['result'][0]);
+ $this->assertEquals(100, $response['result'][0]['value']);
+
+ $response = $this->call('item.update', [
+ 'itemid' => $itemid,
+ 'preprocessing' => [[
+ 'params' => '200',
+ 'type' => 1,
+ 'error_handler' => 1,
+ 'error_handler_params' => ''
+ ]]
+ ]);
+ $this->assertArrayHasKey('itemids', $response['result']);
+ $this->assertEquals(1, count($response['result']['itemids']));
+
+ $this->reloadConfigurationCache(self::COMPONENT_SERVER);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, "finished forced reloading of the configuration cache", true, 60, 1);
+
+ $this->sendSenderValue('trapper_host', 'trap', 2, self::COMPONENT_SERVER);
+
+ $response = $this->callUntilDataIsPresent('history.get', [
+ 'sortfield' => 'clock',
+ 'sortorder' => 'DESC',
+ 'limit' => 1,
+ 'itemids' => [$itemid]
+ ], 60, 1);
+ $this->assertArrayHasKey('result', $response);
+ $this->assertEquals(1, count($response['result']));
+ $this->assertArrayHasKey('value', $response['result'][0]);
+ $this->assertEquals(400, $response['result'][0]['value']);
+ }
}
diff --git a/ui/tests/integration/testProxyConfSync.php b/ui/tests/integration/testProxyConfSync.php
new file mode 100644
index 00000000000..364d7f60401
--- /dev/null
+++ b/ui/tests/integration/testProxyConfSync.php
@@ -0,0 +1,1673 @@
+<?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__) . '/../include/CIntegrationTest.php';
+
+/**
+ * Test suite for alerting for services.
+ *
+ * @required-components server, proxy
+ * @configurationDataProvider configurationProvider
+ * @backup config, functions, globalmacro
+ * @backup group_prototype, host_discovery, host_inventory, hostmacro, host_rtdata, hosts, hosts_groups, hosts_templates
+ * @backup hstgrp, interface, item_condition, item_discovery, item_parameter, item_preproc, item_rtdata, items
+ * @backup lld_macro_path, lld_override, lld_override_condition, lld_override_opdiscover, lld_override_operation
+ * @backup lld_override_opstatus
+ */
+class testProxyConfSync extends CIntegrationTest
+{
+ private $expected_initial = [
+ [
+ 'config' =>
+ [
+ 'insert' => '1',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'autoreg' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'autoreghost' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'hosts' =>
+ [
+ 'insert' => '15',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'host_invent' =>
+ [
+ 'insert' => '3',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'templates' =>
+ [
+ 'insert' => '4',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'globmacros' =>
+ [
+ 'insert' => '3',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'hostmacros' =>
+ [
+ 'insert' => '5',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'interfaces' =>
+ [
+ 'insert' => '13',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'items' =>
+ [
+ 'insert' => '76',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'template_items' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'prototype_items' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'item_discovery' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'triggers' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'trigdeps' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'trigtags' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'hosttags' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'itemtags' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'functions' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'expressions' =>
+ [
+ 'insert' => '1',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'actions' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'operations' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'conditions' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'corr' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'corr_cond' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'corr_op' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'hgroups' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'itempproc' =>
+ [
+ 'insert' => '11',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'itemscriptparam' =>
+ [
+ 'insert' => '2',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'maintenance' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'drules' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'httptests' =>
+ [
+ 'insert' => '3',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ]
+ ];
+
+ private $expected_update =
+ [
+ [
+ "config" =>
+ [
+ "insert" =>
+ "1",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "autoreg" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "1",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ 'autoreghost' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ "hosts" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "15",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "host_invent" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "1",
+ "delete" =>
+ "2"
+ ]
+ ],
+ [
+ "templates" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "globmacros" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "3",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "hostmacros" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "2",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "interfaces" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "8",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "items" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "36",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "template_items" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "prototype_items" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "item_discovery" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "triggers" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "trigdeps" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "trigtags" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "hosttags" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "itemtags" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "functions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "expressions" =>
+ [
+ "insert" =>
+ "1",
+ "update" =>
+ "0",
+ "delete" =>
+ "1"
+ ]
+ ],
+ [
+ "actions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "operations" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "conditions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "corr" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "corr_cond" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "corr_op" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "hgroups" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "itempproc" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "6",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "itemscriptparam" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "1",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "maintenance" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "drules" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "httptests" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "1",
+ "delete" =>
+ "0"
+ ]
+ ]
+ ];
+
+ private $expected_delete = [
+ [
+ "config" =>
+ [
+ "insert" =>
+ "1",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "autoreg" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ 'autoreghost' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ "hosts" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "15"
+ ]
+ ],
+ [
+ "host_invent" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "1"
+ ]
+ ],
+ [
+ "templates" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "4"
+ ]
+ ],
+ [
+ "globmacros" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "hostmacros" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "5"
+ ]
+ ],
+ [
+ "interfaces" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "13"
+ ]
+ ],
+ [
+ "items" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "76"
+ ]
+ ],
+ [
+ "template_items" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "prototype_items" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "76"
+ ]
+ ],
+ [
+ "item_discovery" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "triggers" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "trigdeps" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "trigtags" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "hosttags" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "itemtags" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "functions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "expressions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "1"
+ ]
+ ],
+ [
+ "actions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "operations" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "conditions" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "corr" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "corr_cond" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "corr_op" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "hgroups" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ "itempproc" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "11"
+ ]
+ ],
+ [
+ "itemscriptparam" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "2"
+ ]
+ ],
+ [
+ "maintenance" =>
+ [
+ "insert" =>
+ "0",
+ "update" =>
+ "0",
+ "delete" =>
+ "0"
+ ]
+ ],
+ [
+ 'drules' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '0'
+ ]
+ ],
+ [
+ 'httptests' =>
+ [
+ 'insert' => '0',
+ 'update' => '0',
+ 'delete' => '3'
+ ]
+ ]
+ ];
+
+ private static $regexpid;
+ private static $vaultmacroid;
+ private static $secretmacroid;
+
+ /**
+ * @inheritdoc
+ */
+ public function prepareData()
+ {
+ $this->purgeExisting('host', 'hostids');
+ $this->purgeExisting('proxy', 'extend');
+ $this->purgeExisting('template', 'templateids');
+ $this->purgeExisting('item', 'itemids');
+ $this->purgeExisting('trigger', 'triggerids');
+ $this->purgeExisting('regexp', 'extend');
+ $this->purgeHostGroups();
+ $this->purgeGlobalMacros();
+
+ return true;
+ }
+
+ public function createProxy()
+ {
+ $response = $this->call('proxy.create', [
+ 'host' => 'Proxy',
+ 'status' => HOST_STATUS_PROXY_PASSIVE,
+ 'hosts' => [],
+ 'interface' => [
+ "ip" => "127.0.0.1",
+ "dns" => "",
+ "useip" => "1",
+ "port" => PHPUNIT_PORT_PREFIX.self::PROXY_PORT_SUFFIX
+ ]
+ ]);
+ $this->assertArrayHasKey("proxyids", $response['result']);
+ }
+
+ /**
+ * Component configuration provider for server related tests.
+ *
+ * @return array
+ */
+ public function configurationProvider()
+ {
+ return [
+ self::COMPONENT_SERVER => [
+ 'LogFileSize' => 0,
+ 'DebugLevel' => 5,
+ 'Vault' => 'CyberArk',
+ 'VaultURL' => 'https://127.0.0.1:1858'
+ ],
+ self::COMPONENT_PROXY => [
+ 'ProxyMode' => 1,
+ 'DebugLevel' => 5,
+ 'LogFileSize' => 0,
+ 'Hostname' => 'Proxy',
+ 'ListenPort' => PHPUNIT_PORT_PREFIX.self::PROXY_PORT_SUFFIX
+ ],
+ ];
+ }
+
+ private function parseSyncResults()
+ {
+ $log = file_get_contents(self::getLogPath(self::COMPONENT_PROXY));
+ $data = explode("\n", $log);
+
+ $sync_lines = preg_grep('/DCsync_configuration.*\([0-9]+\/[0-9]+\/[0-9]+\)\.$/', $data);
+
+ $sync_lines1 = preg_replace(
+ [
+ "/^\s*[0-9]+:[0-9]+:[0-9]+\.[0-9]+ DCsync_configuration\(\) /",
+ "/\s+/",
+ "/:sql:[0-9]+\.[0-9]+sync:[0-9]+\.[0-9]+sec/",
+ "/:sql:[0-9]+\.[0-9]+sec/"
+ ],
+ "",
+ $sync_lines
+ );
+
+ $sync_lines2 = preg_replace(
+ [
+ "/(\(\))|(\()/",
+ "/\)\.|\./"
+ ],
+ [
+ ":",
+ ""
+ ],
+ $sync_lines1
+ );
+
+ $results = [];
+
+ foreach ($sync_lines2 as $v) {
+ $o = explode(":", $v);
+
+ $subject = $o[0];
+ $operations = explode("/", $o[1]);
+
+ if (count($operations) < 3) {
+ continue;
+ }
+
+ $pair = [
+ $subject => [
+ 'insert' => $operations[0],
+ 'update' => $operations[1],
+ 'delete' => $operations[2]
+ ]
+ ];
+
+ $exists = false;
+
+ foreach ($results as &$existing_obj) {
+ if (array_key_exists($subject, $existing_obj)) {
+ $exists = true;
+ $existing_obj = $pair;
+ break;
+ }
+ }
+
+ if (!$exists)
+ array_push($results, $pair);
+ }
+
+ return $results;
+ }
+
+ private function purgeHostGroups()
+ {
+ $response = $this->call('hostgroup.get', [
+ 'output' => 'extend',
+ 'preservekeys' => true
+ ]);
+ $this->assertArrayHasKey('result', $response);
+
+ $filtered_groups = array_filter($response['result'], function ($obj) {
+ return $obj['name'] != 'Discovered hosts';
+ });
+
+ $ids = array_keys($filtered_groups);
+ if (empty($ids)) {
+ return;
+ }
+
+ $response = $this->call('hostgroup.delete', $ids);
+ }
+
+ private function purgeGlobalMacros()
+ {
+ $response = $this->call('usermacro.get', [
+ 'output' => 'extend',
+ 'globalmacro' => true,
+ 'preservekeys' => true
+ ]);
+ $this->assertArrayHasKey('result', $response);
+
+ $ids = array_keys($response['result']);
+ if (empty($ids)) {
+ return;
+ }
+
+ $response = $this->call('usermacro.deleteglobal', $ids);
+ }
+
+ private function purgeExisting($method, $field_name)
+ {
+ $params = [
+ 'output' => $field_name,
+ 'preservekeys' => true
+ ];
+
+ $response = $this->call($method . '.get', $params);
+ $this->assertArrayHasKey('result', $response);
+
+ $ids = array_keys($response['result']);
+
+ if (empty($ids)) {
+ return;
+ }
+
+ $response = $this->call($method . '.delete', $ids);
+ }
+
+ private function createGlobalMacros()
+ {
+ $response = $this->call('usermacro.createglobal', [
+ 'macro' => '{$GLOBDELAY}',
+ 'value' => '1'
+ ]);
+ $this->assertArrayHasKey('result', $response);
+ $this->assertArrayHasKey('globalmacroids', $response['result']);
+
+ $response = $this->call('usermacro.createglobal', [
+ 'macro' => '{$SECRETMACRO}',
+ 'value' => '1234567890',
+ 'type' => 1
+ ]);
+ $this->assertArrayHasKey('result', $response);
+ $this->assertArrayHasKey('globalmacroids', $response['result']);
+ self::$secretmacroid = $response['result']['globalmacroids'][0];
+
+ $response = $this->call('usermacro.createglobal', [
+ 'macro' => '{$VAULTMACRO}',
+ 'value' => 'secret/zabbix:password',
+ 'type' => 2
+ ]);
+ $this->assertArrayHasKey('result', $response);
+ $this->assertArrayHasKey('globalmacroids', $response['result']);
+ self::$vaultmacroid = $response['result']['globalmacroids'][0];
+ }
+
+ private function updateAutoregistration()
+ {
+ $response = $this->call('autoregistration.update', [
+ 'tls_accept' => '3',
+ 'tls_psk_identity' => 'PSK 001',
+ 'tls_psk' => '12111595725ac58dd977beef14b97461a7c1045b9a1c923453302c5473193478'
+ ]);
+ $this->assertArrayHasKey('result', $response);
+ $this->assertEquals(true, $response['result']);
+ }
+
+ private function updateGlobalMacro()
+ {
+ $response = $this->call('usermacro.get', [
+ 'output' => 'extend',
+ 'globalmacro' => 'true'
+ ]);
+ $this->assertArrayHasKey(0, $response['result']);
+ $this->assertArrayHasKey('globalmacroid', $response['result'][0]);
+
+ $globalmacroid = $response['result'][0]['globalmacroid'];
+
+ $response = $this->call('usermacro.updateglobal', [
+ 'globalmacroid' => $globalmacroid,
+ 'macro' => '{$UU}',
+ 'value' => 'updated'
+ ]);
+ $this->assertArrayHasKey('globalmacroids', $response['result']);
+
+ $response = $this->call('usermacro.updateglobal', [
+ 'globalmacroid' => self::$secretmacroid,
+ 'value' => 'qwerasdfzxcv'
+ ]);
+ $this->assertArrayHasKey('globalmacroids', $response['result']);
+
+ $response = $this->call('usermacro.updateglobal', [
+ 'globalmacroid' => self::$vaultmacroid,
+ 'value' => 'secret/zabbix:ZABBIX123'
+ ]);
+ $this->assertArrayHasKey('globalmacroids', $response['result']);
+ }
+
+ private function importTemplate($filename)
+ {
+ $xml = file_get_contents('integration/data/' . $filename);
+
+ $response = $this->call('configuration.import', [
+ 'format' => 'xml',
+ 'source' => $xml,
+ 'rules' => [
+ 'template_groups' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true
+ ],
+ 'host_groups' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true
+ ],
+ 'templates' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true
+ ],
+ 'valueMaps' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'templateDashboards' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'templateLinkage' =>
+ [
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'items' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'discoveryRules' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'triggers' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'graphs' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'httptests' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ]
+ ]
+ ]);
+ }
+
+ private function importTemplateForUpdate($filename)
+ {
+ $xml = file_get_contents('integration/data/' . $filename);
+
+ $response = $this->call('configuration.import', [
+ 'format' => 'xml',
+ 'source' => $xml,
+ 'rules' => [
+ 'template_groups' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false
+ ],
+ 'host_groups' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false
+ ],
+ 'templates' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false
+ ],
+ 'valueMaps' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'templateDashboards' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'templateLinkage' =>
+ [
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'items' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'discoveryRules' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'triggers' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'graphs' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ],
+ 'httptests' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => false,
+ 'deleteMissing' => false
+ ]
+ ]
+ ]);
+ }
+
+ private function createRegexp()
+ {
+ $response = $this->call('regexp.create', [
+ 'name' => 'global regexp test',
+ 'test_string' => '/boot',
+ 'expressions' => [
+ [
+ 'expression' => '.*',
+ 'expression_type' => EXPRESSION_TYPE_FALSE,
+ 'case_sensitive' => 1
+ ]
+ ]
+ ]);
+ $this->assertArrayHasKey("regexpids", $response['result']);
+ self::$regexpid = $response['result']['regexpids'][0];
+ }
+
+ private function updateRegexp()
+ {
+ $response = $this->call('regexp.update', [
+ 'regexpid' => self::$regexpid,
+ 'test_string' => '/tmp',
+ 'expressions' => [
+ [
+ 'expression' => '.*a',
+ 'expression_type' => EXPRESSION_TYPE_TRUE,
+ 'case_sensitive' => 1
+ ]
+ ]
+ ]);
+ $this->assertArrayHasKey("regexpids", $response['result']);
+ }
+
+ public function loadInitialConfiguration()
+ {
+ $this->createRegexp();
+ $this->createGlobalMacros();
+ $this->importTemplate('confsync_proxy_tmpl.xml');
+
+ $xml = file_get_contents('integration/data/confsync_proxy_hosts.xml');
+
+ $response = $this->call('configuration.import', [
+ 'format' => 'xml',
+ 'source' => $xml,
+ 'rules' => [
+ 'host_groups' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true
+ ],
+ 'hosts' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true
+ ],
+ 'valueMaps' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'templateLinkage' =>
+ [
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'items' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'discoveryRules' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'triggers' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'graphs' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ],
+ 'httptests' =>
+ [
+ 'updateExisting' => true,
+ 'createMissing' => true,
+ 'deleteMissing' => false
+ ]
+
+ ]
+ ]);
+ }
+
+ private function disableAllHosts()
+ {
+ $response = $this->call('host.get', [
+ 'output' => 'hostid',
+ 'preservekeys' => true
+ ]);
+ $this->assertArrayHasKey('result', $response);
+
+ $ids = array_keys($response['result']);
+
+ if (empty($ids)) {
+ return;
+ }
+
+ foreach ($ids as $hostid) {
+ $response = $this->call('host.update', [
+ 'hostid' => $hostid,
+ 'status' => 1
+ ]);
+ }
+ }
+
+ /**
+ * @required-components server, proxy
+ */
+ public function testProxyConfSync_Insert()
+ {
+ self::stopComponent(self::COMPONENT_SERVER);
+ self::clearLog(self::COMPONENT_SERVER);
+ self::stopComponent(self::COMPONENT_PROXY);
+ self::clearLog(self::COMPONENT_PROXY);
+
+ $this->purgeExisting('host', 'hostids');
+ $this->purgeExisting('proxy', 'extend');
+ $this->purgeExisting('template', 'templateids');
+ $this->purgeExisting('item', 'itemids');
+ $this->purgeExisting('trigger', 'triggerids');
+ $this->purgeExisting('regexp', 'extend');
+ $this->purgeHostGroups();
+ $this->purgeGlobalMacros();
+ $this->createProxy();
+
+ self::startComponent(self::COMPONENT_SERVER);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, "End of DCsync_configuration()", true, 30, 1);
+ self::startComponent(self::COMPONENT_PROXY);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'sending configuration data to proxy "Proxy"', true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "received configuration data from server", true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "memory statistics for configuration cache", true, 90, 1);
+
+ self::stopComponent(self::COMPONENT_SERVER);
+ self::clearLog(self::COMPONENT_SERVER);
+ self::stopComponent(self::COMPONENT_PROXY);
+ self::clearLog(self::COMPONENT_PROXY);
+
+ $this->loadInitialConfiguration();
+
+ self::startComponent(self::COMPONENT_SERVER);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, "End of DCsync_configuration()", true, 30, 1);
+ self::startComponent(self::COMPONENT_PROXY);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'sending configuration data to proxy "Proxy"', true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "received configuration data from server", true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "memory statistics for configuration cache", true, 90, 1);
+
+ $got = $this->parseSyncResults();
+ $this->assertEquals($this->expected_initial, $got);
+
+ return true;
+ }
+
+ public function testProxyConfSync_Update()
+ {
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'sending configuration data to proxy "Proxy"', true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "received configuration data from server", true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "memory statistics for configuration cache", true, 90, 1);
+
+ self::stopComponent(self::COMPONENT_SERVER);
+ self::clearLog(self::COMPONENT_SERVER);
+ self::clearLog(self::COMPONENT_PROXY);
+
+ $this->updateRegexp();
+ $this->updateAutoregistration();
+
+ $this->importTemplateForUpdate('confsync_proxy_tmpl_updated.xml');
+ $xml = file_get_contents('integration/data/confsync_proxy_hosts_updated.xml');
+
+ $response = $this->call('configuration.import', [
+ 'format' => 'xml',
+ 'source' => $xml,
+ 'rules' => [
+ 'hosts' => [
+ 'createMissing' => false,
+ 'updateExisting' => true
+ ],
+ 'items' => [
+ 'createMissing' => false,
+ 'updateExisting' => true
+ ],
+ 'host_groups' => [
+ 'createMissing' => false,
+ 'updateExisting' => true
+ ],
+ 'discoveryRules' => [
+ 'createMissing' => false,
+ 'updateExisting' => true,
+ 'deleteMissing' => false
+ ],
+ 'httptests' => [
+ 'createMissing' => false,
+ 'updateExisting' => true,
+ 'deleteMissing' => false
+ ],
+ 'triggers' => [
+ 'createMissing' => true,
+ 'updateExisting' => true,
+ 'deleteMissing' => true
+ ],
+ 'templateLinkage' => [
+ 'createMissing' => false
+ ]
+ ]
+
+ ]);
+
+ $this->updateGlobalMacro();
+ $this->disableAllHosts();
+
+ self::startComponent(self::COMPONENT_SERVER);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, "End of DCsync_configuration()", true, 30, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'sending configuration data to proxy "Proxy"', true, 90, 1);
+
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "received configuration data from server", true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "memory statistics for configuration cache", true, 90, 1);
+
+ $got = $this->parseSyncResults();
+
+ // Count of updated interfaces can vary due to errors being treated as configuration changes
+ foreach ($got as &$obj) {
+ if (array_key_exists('interfaces', $obj)) {
+ if ($obj['interfaces']['update'] > 8)
+ $obj['interfaces']['update'] = 8;
+ }
+ }
+ $this->assertEquals($this->expected_update, $got);
+ return true;
+ }
+
+ public function testProxyConfSync_Delete()
+ {
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'sending configuration data to proxy "Proxy"', true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "received configuration data from server", true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "memory statistics for configuration cache", true, 90, 1);
+
+ self::stopComponent(self::COMPONENT_SERVER);
+ self::clearLog(self::COMPONENT_SERVER);
+ self::clearLog(self::COMPONENT_PROXY);
+
+ $this->purgeExisting('maintenance', 'maintenanceids');
+ $this->purgeExisting('host', 'hostids');
+ $this->purgeExisting('template', 'templateids');
+ $this->purgeExisting('correlation', 'correlationids');
+ $this->purgeExisting('regexp', 'extend');
+ $this->purgeExisting('item', 'itemids');
+ $this->purgeHostGroups();
+
+ self::startComponent(self::COMPONENT_SERVER);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, "End of DCsync_configuration()", true, 30, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'sending configuration data to proxy "Proxy"', true, 90, 1);
+
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "received configuration data from server", true, 90, 1);
+ $this->waitForLogLineToBePresent(self::COMPONENT_PROXY, "memory statistics for configuration cache", true, 90, 1);
+
+ $got = $this->parseSyncResults();
+ $this->assertEquals($this->expected_delete, $got);
+
+ return true;
+ }
+}