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:
authorAndris Zeila <andris.zeila@zabbix.com>2020-07-16 10:28:35 +0300
committerAndris Zeila <andris.zeila@zabbix.com>2020-07-16 10:31:39 +0300
commit3a352fb54d26feae762f2ebb1041aedbe5995d5e (patch)
tree9c53375d78c4990d2620eadf2ca89e2062c01b43 /tests/libs/zbxdbcache
parent8b905d174eee85f86b1a296d8ee840083061c68d (diff)
........S. [ZBXNEXT-6042] optimized trigger, calculated item processing by resolving user macros during configuration cache synchronization
* commit 'ae4645be5080ef59cfd0267bc960d99197f77ed3': .D........ [ZBXNEXT-6042] updated changelog entry ........S. [ZBXNEXT-6042] fixed use of uninitialised variable ........S. [ZBXNEXT-6042] removed unused function .......PS. [ZBXNEXT-6042] removed redundant initialization .......... [ZBXNEXT-6042] added dc_expand_user_macros_in_calcitem() function test suite .......... [ZBXNEXT-6042] renamed test suite to match the renamed function .......... [ZBXNEXT-6042] moved user macro mocks to separae configcache mocking library .......... [ZBXNEXT-6042] merged global and host macro mock code and moved to separate file .......... [ZBXNEXT-6042] add first test cases for dc_expand_user_macros_in_func_params() function ........S. [ZBXNEXT-6042] added user macro resolving in calculated item formulas during configuration cache sync ........S. [ZBXNEXT-6042] fixed internal/external (dc_/zbx_dc_) configuration cache function naming and expression macro expanding without chache locking when polling calculated items ........S. [ZBXNEXT-6042] fixed user macro resolving in simple macro function parameters .D........ [ZBXNEXT-6042] added changelog entry ........S. [ZBXNEXT-6042] removed macro resolving in user parameters during trigger processing because function parameter user macros are already resolved during conifguration cache sync ........S. [ZBXNEXT-6042] added function parameter user macro resolving during configuration cache sync (cherry picked from commit 7bd5435bd09ac8ef954fc1c913b61d70dffc81b2)
Diffstat (limited to 'tests/libs/zbxdbcache')
-rw-r--r--tests/libs/zbxdbcache/Makefile.am40
-rw-r--r--tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.c62
-rw-r--r--tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.yaml174
-rw-r--r--tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.c58
-rw-r--r--tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.yaml (renamed from tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.yaml)0
-rw-r--r--tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.c59
-rw-r--r--tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.yaml147
-rw-r--r--tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.c187
8 files changed, 535 insertions, 192 deletions
diff --git a/tests/libs/zbxdbcache/Makefile.am b/tests/libs/zbxdbcache/Makefile.am
index 519d45d11ee..326bb24073b 100644
--- a/tests/libs/zbxdbcache/Makefile.am
+++ b/tests/libs/zbxdbcache/Makefile.am
@@ -7,7 +7,9 @@ SERVER_tests = \
dc_check_maintenance_period \
is_item_processed_by_server \
dc_item_poller_type_update \
- zbx_dc_expand_user_macros_in_expression
+ dc_expand_user_macros_in_expression \
+ dc_expand_user_macros_in_func_params \
+ dc_expand_user_macros_in_calcitem
endif
noinst_PROGRAMS = $(SERVER_tests)
@@ -148,12 +150,40 @@ dc_item_poller_type_update_LDADD = $(CACHE_LIBS) @SERVER_LIBS@
dc_item_poller_type_update_LDFLAGS = @SERVER_LDFLAGS@
dc_item_poller_type_update_CFLAGS = -I@top_srcdir@/tests -I@top_srcdir@/src/libs/zbxdbcache
-zbx_dc_expand_user_macros_in_expression_CFLAGS = \
+dc_expand_user_macros_in_expression_CFLAGS = \
-I@top_srcdir@/tests \
+ -I@top_srcdir@/tests/mocks/configcache \
-I@top_srcdir@/src/libs/zbxdbcache \
-Wl,--wrap=zbx_hashset_search
-zbx_dc_expand_user_macros_in_expression_SOURCES = zbx_dc_expand_user_macros_in_expression.c
-zbx_dc_expand_user_macros_in_expression_LDADD = $(CACHE_LIBS) @SERVER_LIBS@
-zbx_dc_expand_user_macros_in_expression_LDFLAGS = @SERVER_LDFLAGS@
+dc_expand_user_macros_in_expression_SOURCES = \
+ dc_expand_user_macros_in_expression.c
+dc_expand_user_macros_in_expression_LDADD = \
+ $(top_srcdir)/tests/mocks/configcache/libconfigcachemock.a \
+ $(CACHE_LIBS) @SERVER_LIBS@
+dc_expand_user_macros_in_expression_LDFLAGS = @SERVER_LDFLAGS@
+
+dc_expand_user_macros_in_func_params_CFLAGS = \
+ -I@top_srcdir@/tests \
+ -I@top_srcdir@/tests/mocks/configcache \
+ -I@top_srcdir@/src/libs/zbxdbcache \
+ -Wl,--wrap=zbx_hashset_search
+dc_expand_user_macros_in_func_params_SOURCES = \
+ dc_expand_user_macros_in_func_params.c
+dc_expand_user_macros_in_func_params_LDADD = \
+ $(top_srcdir)/tests/mocks/configcache/libconfigcachemock.a \
+ $(CACHE_LIBS) @SERVER_LIBS@
+dc_expand_user_macros_in_func_params_LDFLAGS = @SERVER_LDFLAGS@
+
+dc_expand_user_macros_in_calcitem_CFLAGS = \
+ -I@top_srcdir@/tests \
+ -I@top_srcdir@/tests/mocks/configcache \
+ -I@top_srcdir@/src/libs/zbxdbcache \
+ -Wl,--wrap=zbx_hashset_search
+dc_expand_user_macros_in_calcitem_SOURCES = \
+ dc_expand_user_macros_in_calcitem.c
+dc_expand_user_macros_in_calcitem_LDADD = \
+ $(top_srcdir)/tests/mocks/configcache/libconfigcachemock.a \
+ $(CACHE_LIBS) @SERVER_LIBS@
+dc_expand_user_macros_in_calcitem_LDFLAGS = @SERVER_LDFLAGS@
endif
diff --git a/tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.c b/tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.c
new file mode 100644
index 00000000000..f10092a8b06
--- /dev/null
+++ b/tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.c
@@ -0,0 +1,62 @@
+/*
+** Zabbix
+** Copyright (C) 2001-2020 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.
+**/
+
+#include "zbxmocktest.h"
+#include "zbxmockdata.h"
+#include "zbxmockassert.h"
+#include "zbxmockutil.h"
+
+#include "zbxserver.h"
+#include "common.h"
+#include "zbxalgo.h"
+#include "dbcache.h"
+#include "mutexs.h"
+
+#define ZBX_DBCONFIG_IMPL
+#include "dbconfig.h"
+
+#include "configcache_mock.h"
+
+/******************************************************************************
+ * *
+ * Function: zbx_mock_test_entry *
+ * *
+ ******************************************************************************/
+void zbx_mock_test_entry(void **state)
+{
+ char *returned_formula;
+ const char *formula, *expected_formula;
+ zbx_uint64_t hostid;
+
+ ZBX_UNUSED(state);
+
+ mock_config_init();
+ mock_config_load_user_macros("in.macros");
+ mock_config_load_hosts("in.hosts");
+
+ formula = zbx_mock_get_parameter_string("in.formula");
+ hostid = zbx_mock_get_parameter_uint64("in.hostid");
+ expected_formula = zbx_mock_get_parameter_string("out.formula");
+ returned_formula = dc_expand_user_macros_in_calcitem(formula, hostid);
+ zbx_mock_assert_str_eq("Expanded parameters", expected_formula, returned_formula);
+
+ zbx_free(returned_formula);
+
+ mock_config_free();
+}
diff --git a/tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.yaml b/tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.yaml
new file mode 100644
index 00000000000..f286db500cd
--- /dev/null
+++ b/tests/libs/zbxdbcache/dc_expand_user_macros_in_calcitem.yaml
@@ -0,0 +1,174 @@
+---
+test case: Expand 'last("hostA:key[{$A}]",{$A}) + last("hostB:key[{$A}]",{$A})' with hostA:{$A}=#1, hostB:{$A}=#2
+in:
+ hosts:
+ - hostid: 1
+ host: hostA
+ - hostid: 2
+ host: hostB
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '#1'
+ - hostid: 2
+ name: '{$A}'
+ value: '#2'
+ hostid: 1
+ formula: 'last("hostA:key[{$A}]",{$A}) + last("hostB:key[{$A}]",{$A})'
+out:
+ formula: 'last("hostA:key[{$A}]",#1) + last("hostB:key[{$A}]",#2)'
+---
+test case: Expand 'last("hostA:key[{$A}]",{$A}) + last("hostB:key[{$A}]",{$A})' with hostA:{$A}='', hostB:{$A}=''
+in:
+ hosts:
+ - hostid: 1
+ host: hostA
+ - hostid: 2
+ host: hostB
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: ''
+ - hostid: 2
+ name: '{$A}'
+ value: ''
+ hostid: 1
+ formula: 'last("hostA:key[{$A}]",{$A}) + last("hostB:key[{$A}]",{$A})'
+out:
+ formula: 'last("hostA:key[{$A}]",) + last("hostB:key[{$A}]",)'
+---
+test case: Expand 'last(host:key)'
+in:
+ hosts: []
+ macros: []
+ hostid: 1
+ formula: 'last(host:key)'
+out:
+ formula: 'last(host:key)'
+---
+test case: Expand 'last("key[{$A}]",{$A})' on hostA with hostA:{$A}='#1', hostB:{$A}='#2'
+in:
+ hosts:
+ - hostid: 1
+ host: hostA
+ - hostid: 2
+ host: hostB
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '#1'
+ - hostid: 2
+ name: '{$A}'
+ value: '#2'
+ hostid: 1
+ formula: 'last("key[{$A}]",{$A})'
+out:
+ formula: 'last("key[{$A}]",#1)'
+---
+test case: Expand 'last("key[{$A}]",{$A})' on hostB with hostA:{$A}='#1', hostB:{$A}='#2'
+in:
+ hosts:
+ - hostid: 1
+ host: hostA
+ - hostid: 2
+ host: hostB
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '#1'
+ - hostid: 2
+ name: '{$A}'
+ value: '#2'
+ hostid: 2
+ formula: 'last("key[{$A}]",{$A})'
+out:
+ formula: 'last("key[{$A}]",#2)'
+---
+test case: Expand '{$A}last(host:key){$B}'
+in:
+ hosts: []
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '11'
+ - hostid: 2
+ name: '{$A}'
+ value: '21'
+ - hostid: 1
+ name: '{$B}'
+ value: '12'
+ - hostid: 2
+ name: '{$B}'
+ value: '22'
+ hostid: 1
+ formula: '{$A}last(host:key){$B}'
+out:
+ formula: '11last(host:key)12'
+---
+test case: Expand '{$A}last(host:key){$B}'
+in:
+ hosts: []
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '11'
+ - hostid: 2
+ name: '{$A}'
+ value: '21'
+ - hostid: 1
+ name: '{$B}'
+ value: '12'
+ - hostid: 2
+ name: '{$B}'
+ value: '22'
+ hostid: 2
+ formula: '{$A}last(host:key){$B}'
+out:
+ formula: '21last(host:key)22'
+---
+test case: Expand '{$X}+last("hostB:key[{$X}]",{$X})+{$Y}+last("key[{$X}]",{$X})+{$Z}'
+in:
+ hosts:
+ - hostid: 1
+ host: hostA
+ - hostid: 2
+ host: hostB
+ macros:
+ - hostid: 1
+ name: '{$X}'
+ value: '1'
+ - hostid: 1
+ name: '{$Y}'
+ value: '2'
+ - hostid: 1
+ name: '{$Z}'
+ value: '3'
+ - hostid: 2
+ name: '{$X}'
+ value: '100'
+ hostid: 1
+ formula: '{$X}+last("hostB:key[{$X}]",{$X})+{$Y}+last("key[{$X}]",{$X})+{$Z}'
+out:
+ formula: '1+last("hostB:key[{$X}]",100)+2+last("key[{$X}]",1)+3'
+---
+test case: Expand '{$A}{$B}last("hostA:key[{$A}]",{$A}${B}){$A}{$B}'
+in:
+ hosts:
+ - hostid: 1
+ host: hostA
+ - hostid: 2
+ host: hostB
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '#'
+ - hostid: 1
+ name: '{$B}'
+ value: '1'
+ hostid: 1
+ formula: '{$A}{$B}last("hostA:key[{$A}]",{$A}{$B}){$A}{$B}'
+out:
+ formula: '"#"1last("hostA:key[{$A}]",#1)"#"1'
+...
+
+
diff --git a/tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.c b/tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.c
new file mode 100644
index 00000000000..77d9bee8658
--- /dev/null
+++ b/tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.c
@@ -0,0 +1,58 @@
+/*
+** Zabbix
+** Copyright (C) 2001-2020 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.
+**/
+
+#include "zbxmocktest.h"
+#include "zbxmockdata.h"
+#include "zbxmockassert.h"
+#include "zbxmockutil.h"
+
+#include "zbxserver.h"
+#include "common.h"
+#include "zbxalgo.h"
+#include "dbcache.h"
+#include "mutexs.h"
+#define ZBX_DBCONFIG_IMPL
+#include "dbconfig.h"
+
+#include "configcache_mock.h"
+
+/******************************************************************************
+ * *
+ * Function: zbx_mock_test_entry *
+ * *
+ ******************************************************************************/
+void zbx_mock_test_entry(void **state)
+{
+ char *returned_expression;
+ const char *expression, *expected_expression;
+
+ ZBX_UNUSED(state);
+
+ mock_config_init();
+ mock_config_load_user_macros("in.macros");
+
+ expression = zbx_mock_get_parameter_string("in.expression");
+ expected_expression = zbx_mock_get_parameter_string("out.expression");
+ returned_expression = dc_expand_user_macros_in_expression(expression, NULL, 0);
+ zbx_mock_assert_str_eq("Expanded expression", expected_expression, returned_expression);
+
+ zbx_free(returned_expression);
+
+ mock_config_free();
+}
diff --git a/tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.yaml b/tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.yaml
index f0d195176fd..f0d195176fd 100644
--- a/tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.yaml
+++ b/tests/libs/zbxdbcache/dc_expand_user_macros_in_expression.yaml
diff --git a/tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.c b/tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.c
new file mode 100644
index 00000000000..db4b1fa0c73
--- /dev/null
+++ b/tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.c
@@ -0,0 +1,59 @@
+/*
+** Zabbix
+** Copyright (C) 2001-2020 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.
+**/
+
+#include "zbxmocktest.h"
+#include "zbxmockdata.h"
+#include "zbxmockassert.h"
+#include "zbxmockutil.h"
+
+#include "zbxserver.h"
+#include "common.h"
+#include "zbxalgo.h"
+#include "dbcache.h"
+#include "mutexs.h"
+
+#define ZBX_DBCONFIG_IMPL
+#include "dbconfig.h"
+
+#include "configcache_mock.h"
+
+/******************************************************************************
+ * *
+ * Function: zbx_mock_test_entry *
+ * *
+ ******************************************************************************/
+void zbx_mock_test_entry(void **state)
+{
+ char *returned_params;
+ const char *params, *expected_params;
+
+ ZBX_UNUSED(state);
+
+ mock_config_init();
+ mock_config_load_user_macros("in.macros");
+
+ params = zbx_mock_get_parameter_string("in.params");
+ expected_params = zbx_mock_get_parameter_string("out.params");
+ returned_params = dc_expand_user_macros_in_func_params(params, 1);
+ zbx_mock_assert_str_eq("Expanded parameters", expected_params, returned_params);
+
+ zbx_free(returned_params);
+
+ mock_config_free();
+}
diff --git a/tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.yaml b/tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.yaml
new file mode 100644
index 00000000000..d234696adbe
--- /dev/null
+++ b/tests/libs/zbxdbcache/dc_expand_user_macros_in_func_params.yaml
@@ -0,0 +1,147 @@
+---
+test case: Expand '{$A}' with {$A}=1
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: 1
+ params: '{$A}'
+out:
+ params: '1'
+---
+test case: Expand '{$A}' with {$A}=(1)
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: (1)
+ params: '{$A}'
+out:
+ params: '"(1)"'
+---
+test case: Expand ''
+in:
+ macros: []
+ params: ''
+out:
+ params: ''
+---
+test case: Expand ' '
+in:
+ macros: []
+ params: ' '
+out:
+ params: ''
+---
+test case: Expand '{$A}'
+in:
+ macros: []
+ params: '{$A}'
+out:
+ params: '{$A}'
+---
+test case: Expand ','
+in:
+ macros: []
+ params: ','
+out:
+ params: ','
+---
+test case: Expand '{$A}' with {$A}="1"
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: '"1"'
+ params: '{$A}'
+out:
+ params: '"\"1\""'
+---
+test case: Expand '"{$A}"' with {$A}=1
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: 1
+ params: '"{$A}"'
+out:
+ params: '"1"'
+---
+test case: Expand '1 ,2 ,3 '
+in:
+ macros: []
+ params: '1 ,2 ,3 '
+out:
+ params: '1 ,2 ,3 '
+---
+test case: Expand '1 , ,3 '
+in:
+ macros: []
+ params: '1 , ,3 '
+out:
+ params: '1 ,,3 '
+---
+test case: Expand ',2 ,3 '
+in:
+ macros: []
+ params: ',2 ,3 '
+out:
+ params: ',2 ,3 '
+---
+test case: Expand '{$A} ,{$B} ,{$C} with {$A}=1, {$B}="2", {$C}=(3)'
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: 1
+ - hostid: 1
+ name: '{$B}'
+ value: '"2"'
+ - hostid: 1
+ name: '{$C}'
+ value: (3)
+ params: '{$A} ,{$B} ,{$C} '
+out:
+ params: '1 ,"\"2\" ","(3) "'
+---
+test case: Expand '{$A}{$B}{$C} with {$A}=1, {$B}="2", {$C}=(3)'
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: 1
+ - hostid: 1
+ name: '{$B}'
+ value: '"2"'
+ - hostid: 1
+ name: '{$C}'
+ value: (3)
+ params: '{$A}{$B}{$C}'
+out:
+ params: '"1\"2\"(3)"'
+---
+test case: Expand '{$A}' with {$A}=1,2,3
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: 1,2,3
+ params: '{$A}'
+out:
+ params: '"1,2,3"'
+---
+test case: Expand '{$A},{$B}' with {$A}='', {$B}=''
+in:
+ macros:
+ - hostid: 1
+ name: '{$A}'
+ value: ''
+ - hostid: 1
+ name: '{$B}'
+ value: ''
+ params: '{$A},{$B}'
+out:
+ params: ','
+...
+
+
diff --git a/tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.c b/tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.c
deleted file mode 100644
index 162c1055352..00000000000
--- a/tests/libs/zbxdbcache/zbx_dc_expand_user_macros_in_expression.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-** Zabbix
-** Copyright (C) 2001-2020 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.
-**/
-
-#include "zbxmocktest.h"
-#include "zbxmockdata.h"
-#include "zbxmockassert.h"
-#include "zbxmockutil.h"
-
-#include "zbxserver.h"
-#include "common.h"
-#include "zbxalgo.h"
-#include "dbcache.h"
-#include "mutexs.h"
-#define ZBX_DBCONFIG_IMPL
-#include "dbconfig.h"
-
-static zbx_vector_ptr_t macros;
-
-void *__wrap_zbx_hashset_search(zbx_hashset_t *hs, const void *data)
-{
- int i;
- const ZBX_DC_GMACRO_M *query = (const ZBX_DC_GMACRO_M *)data;
-
- if (hs != &config->gmacros_m)
- return NULL;
-
- for (i = 0; i < macros.values_num; i++)
- {
- ZBX_DC_GMACRO_M *gm = (ZBX_DC_GMACRO_M *)macros.values[i];
- if (0 == strcmp(gm->macro, query->macro))
- return gm;
- }
-
- return NULL;
-}
-
-static int config_gmacro_context_compare(const void *d1, const void *d2)
-{
- const ZBX_DC_GMACRO *m1 = *(const ZBX_DC_GMACRO **)d1;
- const ZBX_DC_GMACRO *m2 = *(const ZBX_DC_GMACRO **)d2;
-
- /* macros without context have higher priority than macros with */
- if (NULL == m1->context)
- return NULL == m2->context ? 0 : -1;
-
- if (NULL == m2->context)
- return 1;
-
- /* CONDITION_OPERATOR_EQUAL (0) has higher priority than CONDITION_OPERATOR_REGEXP (8) */
- ZBX_RETURN_IF_NOT_EQUAL(m1->context_op, m2->context_op);
-
- return strcmp(m1->context, m2->context);
-}
-
-
-static void init_macros(const char *path)
-{
- zbx_mock_handle_t hmacros, handle;
- zbx_mock_error_t err;
- const char *macro_name, *macro_value;
- int i;
- ZBX_DC_GMACRO_M *gm;
- ZBX_DC_GMACRO *macro;
-
- zbx_vector_ptr_create(&macros);
-
- hmacros = zbx_mock_get_parameter_handle(path);
- while (ZBX_MOCK_END_OF_VECTOR != (err = (zbx_mock_vector_element(hmacros, &handle))))
- {
- char *name = NULL, *context = NULL;
-
- if (ZBX_MOCK_SUCCESS != err)
- {
- fail_msg("Cannot read 'macros' element #%d: %s", macros.values_num,
- zbx_mock_error_string(err));
- }
-
- macro_name = zbx_mock_get_object_member_string(handle, "name");
- macro_value = zbx_mock_get_object_member_string(handle, "value");
-
- if (SUCCEED != zbx_user_macro_parse_dyn(macro_name, &name, &context, NULL, NULL))
- fail_msg("invalid user macro: %s", macro_name);
-
- for (i = 0; i < macros.values_num; i++)
- {
- gm = (ZBX_DC_GMACRO_M *)macros.values[i];
- if (0 == strcmp(gm->macro, name))
- break;
- }
-
- if (i == macros.values_num)
- {
- gm = zbx_malloc(NULL, sizeof(ZBX_DC_GMACRO_M));
- gm->macro = zbx_strdup(NULL, name);
- zbx_vector_ptr_create(&gm->gmacros);
- zbx_vector_ptr_append(&macros, gm);
- }
-
- macro = (ZBX_DC_GMACRO *)zbx_malloc(0, sizeof(ZBX_DC_GMACRO));
- memset(macro, 0, sizeof(ZBX_DC_GMACRO));
- macro->macro = name;
- macro->context = context;
- macro->value = macro_value;
- zbx_vector_ptr_append(&gm->gmacros, macro);
- }
-
- for (i = 0; i < macros.values_num; i++)
- {
- gm = (ZBX_DC_GMACRO_M *)macros.values[i];
- zbx_vector_ptr_sort(&gm->gmacros, config_gmacro_context_compare);
- }
-}
-
-static void free_string(const char *str)
-{
- char *ptr = (char *)str;
- zbx_free(ptr);
-}
-
-static void free_macros()
-{
- ZBX_DC_GMACRO_M *gm;
- ZBX_DC_GMACRO *macro;
- int i, j;
-
- for (i = 0; i < macros.values_num; i++)
- {
- gm = (ZBX_DC_GMACRO_M *)macros.values[i];
- for (j = 0; j < gm->gmacros.values_num; j++)
- {
- macro = (ZBX_DC_GMACRO *)gm->gmacros.values[j];
- free_string(macro->macro);
- free_string(macro->context);
- zbx_free(macro);
- }
- zbx_vector_ptr_destroy(&gm->gmacros);
- free_string(gm->macro);
- zbx_free(gm);
- }
-
- zbx_vector_ptr_destroy(&macros);
-}
-
-/******************************************************************************
- * *
- * Function: zbx_mock_test_entry *
- * *
- ******************************************************************************/
-void zbx_mock_test_entry(void **state)
-{
- char *returned_expression;
- const char *expression, *expected_expression;
- ZBX_DC_CONFIG dc_config = {0};
-
- ZBX_UNUSED(state);
-
- config = &dc_config;
- init_macros("in.macros");
-
- expression = zbx_mock_get_parameter_string("in.expression");
- expected_expression = zbx_mock_get_parameter_string("out.expression");
-
- /* the macro expansion relies on wrapped zbx_hashset_search which returns mocked */
- /* macros when used with global macro index hashset */
- returned_expression = zbx_dc_expand_user_macros_in_expression(expression, NULL, 0);
- zbx_mock_assert_str_eq("Expanded expression", expected_expression, returned_expression);
-
- zbx_free(returned_expression);
-
- free_macros();
-}