diff options
author | Artjoms Rimdjonoks <artjoms.rimdjonoks@zabbix.com> | 2022-01-12 18:37:21 +0300 |
---|---|---|
committer | Artjoms Rimdjonoks <artjoms.rimdjonoks@zabbix.com> | 2022-01-12 18:40:55 +0300 |
commit | c0944244a0f6ff627f08eba63276500def99bc09 (patch) | |
tree | 8b34d07f01077da395a84e9224b4afb9b5a3c933 /tests | |
parent | 9138ba74b5692ee468955b2622485dc8cb3ec4c3 (diff) |
.......... [DEV-2062] removed duplicates from vc tests
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libs/zbxdbcache/Makefile.am | 3 | ||||
-rw-r--r-- | tests/libs/zbxdbcache/zbx_vc_add_values.c | 146 | ||||
-rw-r--r-- | tests/libs/zbxdbcache/zbx_vc_common.c | 175 | ||||
-rw-r--r-- | tests/libs/zbxdbcache/zbx_vc_common.h | 35 | ||||
-rw-r--r-- | tests/libs/zbxdbcache/zbx_vc_get_value.c | 157 | ||||
-rw-r--r-- | tests/libs/zbxdbcache/zbx_vc_get_values.c | 150 |
6 files changed, 286 insertions, 380 deletions
diff --git a/tests/libs/zbxdbcache/Makefile.am b/tests/libs/zbxdbcache/Makefile.am index 2eadda645b8..bf2ae2c9bc4 100644 --- a/tests/libs/zbxdbcache/Makefile.am +++ b/tests/libs/zbxdbcache/Makefile.am @@ -98,6 +98,7 @@ COMMON_WRAP_FUNCS = \ -Wl,--wrap=time zbx_vc_get_values_SOURCES = \ + zbx_vc_common.c \ zbx_vc_get_values.c \ @top_srcdir@/src/libs/zbxdbcache/valuecache.c \ @top_srcdir@/src/libs/zbxhistory/history.c \ @@ -113,6 +114,7 @@ zbx_vc_get_values_CFLAGS = \ -I@top_srcdir@/tests zbx_vc_add_values_SOURCES = \ + zbx_vc_common.c \ zbx_vc_add_values.c \ @top_srcdir@/src/libs/zbxdbcache/valuecache.c \ @top_srcdir@/src/libs/zbxhistory/history.c \ @@ -128,6 +130,7 @@ zbx_vc_add_values_CFLAGS = \ -I@top_srcdir@/tests zbx_vc_get_value_SOURCES = \ + zbx_vc_common.c \ zbx_vc_get_value.c \ @top_srcdir@/src/libs/zbxdbcache/valuecache.c \ @top_srcdir@/src/libs/zbxhistory/history.c \ diff --git a/tests/libs/zbxdbcache/zbx_vc_add_values.c b/tests/libs/zbxdbcache/zbx_vc_add_values.c index 9a22562ae09..cc4e1a4f48d 100644 --- a/tests/libs/zbxdbcache/zbx_vc_add_values.c +++ b/tests/libs/zbxdbcache/zbx_vc_add_values.c @@ -29,138 +29,30 @@ extern zbx_uint64_t CONFIG_VALUE_CACHE_SIZE; -void zbx_mock_test_entry(void **state) -{ - int err, seconds, count, item_status, item_active_range, item_db_cached_from, - item_values_total, cache_mode, ret_flush; - zbx_vector_history_record_t expected, returned; - const char *data; - char *error; - zbx_mock_handle_t handle, hitem, hitems, hstatus; - zbx_mock_error_t mock_err; - zbx_uint64_t itemid, cache_hits, cache_misses; - unsigned char value_type; - zbx_vector_ptr_t history; - zbx_timespec_t ts; - - ZBX_UNUSED(state); - - /* set small cache size to force smaller cache free request size (5% of cache size) */ - CONFIG_VALUE_CACHE_SIZE = ZBX_KIBIBYTE; - - err = zbx_locks_create(&error); - zbx_mock_assert_result_eq("Lock initialization failed", SUCCEED, err); - - err = zbx_vc_init(&error); - zbx_mock_assert_result_eq("Value cache initialization failed", SUCCEED, err); - - zbx_vc_enable(); - - zbx_vcmock_ds_init(); - zbx_history_record_vector_create(&expected); - zbx_history_record_vector_create(&returned); - - /* precache values */ - if (ZBX_MOCK_SUCCESS == zbx_mock_parameter("in.precache", &handle)) - { - while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(handle, &hitem)))) - { - zbx_vcmock_set_time(hitem, "time"); - zbx_vcmock_set_mode(hitem, "cache mode"); - zbx_vcmock_set_cache_size(hitem, "cache size"); - - zbx_vcmock_get_request_params(hitem, &itemid, &value_type, &seconds, &count, &ts); - zbx_vc_precache_values(itemid, value_type, seconds, count, &ts); - } - } +#include "zbx_vc_common.h" +void zbx_vc_test_add_values_setup(zbx_mock_handle_t *handle, zbx_vector_ptr_t *history, int *err, const char **data, + int *ret_flush) +{ /* execute request */ - handle = zbx_mock_get_parameter_handle("in.test"); - zbx_vcmock_set_time(handle, "time"); - zbx_vcmock_set_mode(handle, "cache mode"); - zbx_vcmock_set_cache_size(handle, "cache size"); - - zbx_vector_ptr_create(&history); - zbx_vcmock_get_dc_history(zbx_mock_get_object_member_handle(handle, "values"), &history); - - err = zbx_vc_add_values(&history, &ret_flush); - data = zbx_mock_get_parameter_string("out.return"); - zbx_mock_assert_int_eq("zbx_vc_add_values()", zbx_mock_str_to_return_code(data), err); - - zbx_vector_ptr_clear_ext(&history, zbx_vcmock_free_dc_history); - zbx_vector_ptr_destroy(&history); - - /* validate cache contents */ - - hitems = zbx_mock_get_parameter_handle("out.cache.items"); - - while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(hitems, &hitem)))) - { - if (ZBX_MOCK_NOT_A_VECTOR == mock_err) - fail_msg("out.cache.items parameter is not a vector"); - - data = zbx_mock_get_object_member_string(hitem, "itemid"); - if (SUCCEED != is_uint64(data, &itemid)) - fail_msg("Invalid itemid \"%s\"", data); - - err = zbx_vc_get_item_state(itemid, &item_status, &item_active_range, &item_values_total, - &item_db_cached_from); + *handle = zbx_mock_get_parameter_handle("in.test"); + zbx_vcmock_set_time(*handle, "time"); + zbx_vcmock_set_mode(*handle, "cache mode"); + zbx_vcmock_set_cache_size(*handle, "cache size"); - mock_err = zbx_mock_object_member(hitem, "status", &hstatus); + zbx_vector_ptr_create(history); + zbx_vcmock_get_dc_history(zbx_mock_get_object_member_handle(*handle, "values"), history); - if (ZBX_MOCK_SUCCESS == mock_err) - { - zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", SUCCEED, err); + *err = zbx_vc_add_values(history, ret_flush); + *data = zbx_mock_get_parameter_string("out.return"); + zbx_mock_assert_int_eq("zbx_vc_add_values()", zbx_mock_str_to_return_code(*data), *err); - if (ZBX_MOCK_SUCCESS != (mock_err = zbx_mock_string(hstatus, &data))) - fail_msg("Cannot read item status: %s", zbx_mock_error_string(mock_err)); - - zbx_mock_assert_int_eq("item.status", zbx_vcmock_str_to_item_status(data), item_status); - - data = zbx_mock_get_object_member_string(hitem, "active_range"); - zbx_mock_assert_int_eq("item.active_range", atoi(data), item_active_range); - - data = zbx_mock_get_object_member_string(hitem, "values_total"); - zbx_mock_assert_int_eq("item.values_total", atoi(data), item_values_total); - - if (ZBX_MOCK_SUCCESS != (mock_err = zbx_strtime_to_timespec( - zbx_mock_get_object_member_string(hitem, "db_cached_from"), &ts))) - { - fail_msg("Cannot read out.item.db_cached_from timestamp: %s", - zbx_mock_error_string(mock_err)); - } - - zbx_mock_assert_time_eq("item.db_cached_from", ts.sec, item_db_cached_from); - - value_type = zbx_mock_str_to_value_type(zbx_mock_get_object_member_string(hitem, "value type")); - - zbx_vcmock_read_values(zbx_mock_get_object_member_handle(hitem, "data"), value_type, &expected); - zbx_vc_get_cached_values(itemid, value_type, &returned); - - zbx_vcmock_check_records("Cached values", value_type, &expected, &returned); - - zbx_history_record_vector_clean(&expected, value_type); - zbx_history_record_vector_clean(&returned, value_type); - } - else - zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", FAIL, err); - } - - /* validate cache state */ - - zbx_vc_get_cache_state(&cache_mode, &cache_hits, &cache_misses); - zbx_mock_assert_int_eq("cache.mode", zbx_vcmock_str_to_cache_mode(zbx_mock_get_parameter_string("out.cache.mode")), - cache_mode); - - /* cleanup */ - - zbx_vector_history_record_destroy(&returned); - zbx_vector_history_record_destroy(&expected); - - zbx_vcmock_ds_destroy(); - - zbx_vc_reset(); - zbx_vc_destroy(); + zbx_vector_ptr_clear_ext(history, zbx_vcmock_free_dc_history); + zbx_vector_ptr_destroy(history); +} +void zbx_mock_test_entry(void **state) +{ + zbx_vc_common_test_func(state, zbx_vc_test_add_values_setup, NULL, NULL, NULL); } diff --git a/tests/libs/zbxdbcache/zbx_vc_common.c b/tests/libs/zbxdbcache/zbx_vc_common.c new file mode 100644 index 00000000000..74de4a03cfc --- /dev/null +++ b/tests/libs/zbxdbcache/zbx_vc_common.c @@ -0,0 +1,175 @@ +/* +** 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. +**/ + +#include "zbxmocktest.h" +#include "zbxmockdata.h" +#include "zbxmockassert.h" +#include "zbxmockutil.h" + +#include "common.h" +#include "valuecache.h" +#include "valuecache_test.h" +#include "mocks/valuecache/valuecache_mock.h" + +extern zbx_uint64_t CONFIG_VALUE_CACHE_SIZE; + +void zbx_vc_common_test_func(void **state, + void (*zbx_vc_test_add_values_setup)(zbx_mock_handle_t *handle, + zbx_vector_ptr_t *history, int *err, const char **data, int *ret_flush), + void (*zbx_vc_test_get_value_setup)(zbx_mock_handle_t *handle, zbx_uint64_t *itemid, + unsigned char *value_type, zbx_timespec_t *ts, int *err, + zbx_vector_history_record_t *expected, + zbx_vector_history_record_t *returned), + void (*zbx_vc_test_check_result)(zbx_uint64_t *cache_hits, zbx_uint64_t *cache_misses), + void (*zbx_vc_test_get_values_setup)(zbx_mock_handle_t *handle, zbx_uint64_t *itemid, + unsigned char *value_type, zbx_timespec_t *ts, int *err, + zbx_vector_history_record_t *expected, + zbx_vector_history_record_t *returned, int *seconds, int *count)) +{ + int err, seconds, count, item_status, item_active_range, item_db_cached_from, + item_values_total, cache_mode, ret_flush; + zbx_vector_history_record_t expected, returned; + const char *data; + char *error; + zbx_mock_handle_t handle, hitem, hitems, hstatus; + zbx_mock_error_t mock_err; + zbx_uint64_t itemid, cache_hits, cache_misses; + unsigned char value_type; + zbx_vector_ptr_t history; + zbx_timespec_t ts; + + ZBX_UNUSED(state); + + /* set small cache size to force smaller cache free request size (5% of cache size) */ + CONFIG_VALUE_CACHE_SIZE = ZBX_KIBIBYTE; + + err = zbx_locks_create(&error); + zbx_mock_assert_result_eq("Lock initialization failed", SUCCEED, err); + + err = zbx_vc_init(&error); + zbx_mock_assert_result_eq("Value cache initialization failed", SUCCEED, err); + + zbx_vc_enable(); + + zbx_vcmock_ds_init(); + zbx_history_record_vector_create(&expected); + zbx_history_record_vector_create(&returned); + + /* precache values */ + if (ZBX_MOCK_SUCCESS == zbx_mock_parameter("in.precache", &handle)) + { + while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(handle, &hitem)))) + { + zbx_vcmock_set_time(hitem, "time"); + zbx_vcmock_set_mode(hitem, "cache mode"); + zbx_vcmock_set_cache_size(hitem, "cache size"); + + zbx_vcmock_get_request_params(hitem, &itemid, &value_type, &seconds, &count, &ts); + zbx_vc_precache_values(itemid, value_type, seconds, count, &ts); + } + } + + if (NULL != zbx_vc_test_add_values_setup) + { + zbx_vc_test_add_values_setup(&handle, &history, &err, &data, &ret_flush); + } + else if (NULL != zbx_vc_test_get_value_setup) + { + zbx_vc_test_get_value_setup(&handle, &itemid, &value_type, &ts, &err, &expected, &returned); + } + else if (NULL != zbx_vc_test_get_values_setup) + { + zbx_vc_test_get_values_setup(&handle, &itemid, &value_type, &ts, &err, &expected, &returned, &seconds, + &count); + } + + hitems = zbx_mock_get_parameter_handle("out.cache.items"); + + while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(hitems, &hitem)))) + { + if (ZBX_MOCK_NOT_A_VECTOR == mock_err) + fail_msg("out.cache.items parameter is not a vector"); + + data = zbx_mock_get_object_member_string(hitem, "itemid"); + if (SUCCEED != is_uint64(data, &itemid)) + fail_msg("Invalid itemid \"%s\"", data); + + err = zbx_vc_get_item_state(itemid, &item_status, &item_active_range, &item_values_total, + &item_db_cached_from); + + mock_err = zbx_mock_object_member(hitem, "status", &hstatus); + + if (ZBX_MOCK_SUCCESS == mock_err) + { + zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", SUCCEED, err); + + if (ZBX_MOCK_SUCCESS != (mock_err = zbx_mock_string(hstatus, &data))) + fail_msg("Cannot read item status: %s", zbx_mock_error_string(mock_err)); + + zbx_mock_assert_int_eq("item.status", zbx_vcmock_str_to_item_status(data), item_status); + + data = zbx_mock_get_object_member_string(hitem, "active_range"); + zbx_mock_assert_int_eq("item.active_range", atoi(data), item_active_range); + + data = zbx_mock_get_object_member_string(hitem, "values_total"); + zbx_mock_assert_int_eq("item.values_total", atoi(data), item_values_total); + + if (ZBX_MOCK_SUCCESS != (mock_err = zbx_strtime_to_timespec( + zbx_mock_get_object_member_string(hitem, "db_cached_from"), &ts))) + { + fail_msg("Cannot read out.item.db_cached_from timestamp: %s", + zbx_mock_error_string(mock_err)); + } + + zbx_mock_assert_time_eq("item.db_cached_from", ts.sec, item_db_cached_from); + + value_type = zbx_mock_str_to_value_type(zbx_mock_get_object_member_string(hitem, "value type")); + + zbx_vcmock_read_values(zbx_mock_get_object_member_handle(hitem, "data"), value_type, &expected); + zbx_vc_get_cached_values(itemid, value_type, &returned); + + zbx_vcmock_check_records("Cached values", value_type, &expected, &returned); + + zbx_history_record_vector_clean(&expected, value_type); + zbx_history_record_vector_clean(&returned, value_type); + } + else + zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", FAIL, err); + } + + /* validate cache state */ + + zbx_vc_get_cache_state(&cache_mode, &cache_hits, &cache_misses); + zbx_mock_assert_int_eq("cache.mode", + zbx_vcmock_str_to_cache_mode(zbx_mock_get_parameter_string("out.cache.mode")), cache_mode); + + if (NULL != zbx_vc_test_check_result) + zbx_vc_test_check_result(&cache_hits, &cache_misses); + + /* cleanup */ + + zbx_vector_history_record_destroy(&returned); + zbx_vector_history_record_destroy(&expected); + + zbx_vcmock_ds_destroy(); + + zbx_vc_reset(); + zbx_vc_destroy(); + +} diff --git a/tests/libs/zbxdbcache/zbx_vc_common.h b/tests/libs/zbxdbcache/zbx_vc_common.h new file mode 100644 index 00000000000..21b054b4863 --- /dev/null +++ b/tests/libs/zbxdbcache/zbx_vc_common.h @@ -0,0 +1,35 @@ +/* +** 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. +**/ + +#ifndef VC_COMMON_H +#define VC_COMMON_H + +void zbx_vc_common_test_func(void **state, + void (*zbx_vc_test_add_values_setup)(zbx_mock_handle_t *handle, + zbx_vector_ptr_t *history, int *err, const char **data, int *ret_flush), + void (*zbx_vc_test_get_value_setup)(zbx_mock_handle_t *handle, zbx_uint64_t *itemid, + unsigned char *value_type, zbx_timespec_t *ts, int *err, + zbx_vector_history_record_t *expected, + zbx_vector_history_record_t *returned), + void (*zbx_vc_test_check_result)(zbx_uint64_t *cache_hits, zbx_uint64_t *cache_misses), + void (*zbx_vc_test_get_values_setup)(zbx_mock_handle_t *handle, zbx_uint64_t *itemid, + unsigned char *value_type, zbx_timespec_t *ts, int *err, + zbx_vector_history_record_t *expected, + zbx_vector_history_record_t *returned, int *seconds, int *count)); +#endif diff --git a/tests/libs/zbxdbcache/zbx_vc_get_value.c b/tests/libs/zbxdbcache/zbx_vc_get_value.c index 35d4af0f242..878dadf00cb 100644 --- a/tests/libs/zbxdbcache/zbx_vc_get_value.c +++ b/tests/libs/zbxdbcache/zbx_vc_get_value.c @@ -27,156 +27,57 @@ #include "valuecache_test.h" #include "mocks/valuecache/valuecache_mock.h" +#include "zbx_vc_common.h" + extern zbx_uint64_t CONFIG_VALUE_CACHE_SIZE; -void zbx_mock_test_entry(void **state) +void zbx_vc_test_get_value_setup(zbx_mock_handle_t *handle, zbx_uint64_t *itemid, unsigned char *value_type, + zbx_timespec_t *ts, int *err, zbx_vector_history_record_t *expected, + zbx_vector_history_record_t *returned) { - char *error = NULL; - const char *data; - int err, seconds, count, item_status, item_active_range, item_db_cached_from, - item_values_total, cache_mode; - zbx_vector_history_record_t expected, returned; - zbx_timespec_t ts; - zbx_uint64_t itemid, cache_hits, cache_misses, expected_hits, expected_misses; - unsigned char value_type; - zbx_mock_handle_t handle, hitems, hitem, hstatus; - zbx_mock_error_t mock_err; - - ZBX_UNUSED(state); - - /* set small cache size to force smaller cache free request size (5% of cache size) */ - CONFIG_VALUE_CACHE_SIZE = ZBX_KIBIBYTE; - - err = zbx_locks_create(&error); - zbx_mock_assert_result_eq("Lock initialization failed", SUCCEED, err); - - err = zbx_vc_init(&error); - zbx_mock_assert_result_eq("Value cache initialization failed", SUCCEED, err); - - zbx_vc_enable(); - - zbx_vcmock_ds_init(); - zbx_history_record_vector_create(&expected); - zbx_history_record_vector_create(&returned); - - /* precache values */ - if (ZBX_MOCK_SUCCESS == zbx_mock_parameter("in.precache", &handle)) - { - while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(handle, &hitem)))) - { - zbx_vcmock_set_time(hitem, "time"); - zbx_vcmock_set_mode(hitem, "cache mode"); - zbx_vcmock_set_cache_size(hitem, "cache size"); - - zbx_vcmock_get_request_params(hitem, &itemid, &value_type, &seconds, &count, &ts); - zbx_vc_precache_values(itemid, value_type, seconds, count, &ts); - } - } - /* perform request */ - handle = zbx_mock_get_parameter_handle("in.test"); - zbx_vcmock_set_time(handle, "time"); - zbx_vcmock_set_mode(handle, "cache mode"); + *handle = zbx_mock_get_parameter_handle("in.test"); + zbx_vcmock_set_time(*handle, "time"); + zbx_vcmock_set_mode(*handle, "cache mode"); - if (FAIL == is_uint64(zbx_mock_get_object_member_string(handle, "itemid"), &itemid)) + if (FAIL == is_uint64(zbx_mock_get_object_member_string(*handle, "itemid"), itemid)) fail_msg("Invalid itemid value"); - value_type = zbx_mock_str_to_value_type(zbx_mock_get_object_member_string(handle, "value type")); - zbx_strtime_to_timespec(zbx_mock_get_object_member_string(handle, "end"), &ts); + *value_type = zbx_mock_str_to_value_type(zbx_mock_get_object_member_string(*handle, "value type")); + zbx_strtime_to_timespec(zbx_mock_get_object_member_string(*handle, "end"), ts); - zbx_vector_history_record_reserve(&returned, 1); - err = zbx_vc_get_value(itemid, value_type, &ts, &returned.values[0]); + zbx_vector_history_record_reserve(returned, 1); + *err = zbx_vc_get_value(*itemid, *value_type, ts, &(*returned).values[0]); zbx_vc_flush_stats(); - returned.values_num = 1; - zbx_mock_assert_result_eq("zbx_vc_get_values() return value", SUCCEED, err); + returned->values_num = 1; + zbx_mock_assert_result_eq("zbx_vc_get_values() return value", SUCCEED, *err); /* validate results */ - zbx_vcmock_read_values(zbx_mock_get_parameter_handle("out.values"), value_type, &expected); - zbx_vcmock_check_records("Returned values", value_type, &expected, &returned); - - zbx_history_record_vector_clean(&returned, value_type); - zbx_history_record_vector_clean(&expected, value_type); - - /* validate cache contents */ - - hitems = zbx_mock_get_parameter_handle("out.cache.items"); - - while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(hitems, &hitem)))) - { - if (ZBX_MOCK_NOT_A_VECTOR == mock_err) - fail_msg("out.cache.items parameter is not a vector"); - - data = zbx_mock_get_object_member_string(hitem, "itemid"); - if (SUCCEED != is_uint64(data, &itemid)) - fail_msg("Invalid itemid \"%s\"", data); - - err = zbx_vc_get_item_state(itemid, &item_status, &item_active_range, &item_values_total, - &item_db_cached_from); - - mock_err = zbx_mock_object_member(hitem, "status", &hstatus); - - if (ZBX_MOCK_SUCCESS == mock_err) - { - zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", SUCCEED, err); - - if (ZBX_MOCK_SUCCESS != (mock_err = zbx_mock_string(hstatus, &data))) - fail_msg("Cannot read item status: %s", zbx_mock_error_string(mock_err)); - - zbx_mock_assert_int_eq("item.status", zbx_vcmock_str_to_item_status(data), item_status); - - data = zbx_mock_get_object_member_string(hitem, "active_range"); - zbx_mock_assert_int_eq("item.active_range", atoi(data), item_active_range); + zbx_vcmock_read_values(zbx_mock_get_parameter_handle("out.values"), *value_type, expected); + zbx_vcmock_check_records("Returned values", *value_type, expected, returned); - data = zbx_mock_get_object_member_string(hitem, "values_total"); - zbx_mock_assert_int_eq("item.values_total", atoi(data), item_values_total); - - if (ZBX_MOCK_SUCCESS != (mock_err = zbx_strtime_to_timespec( - zbx_mock_get_object_member_string(hitem, "db_cached_from"), &ts))) - { - fail_msg("Cannot read out.item.db_cached_from timestamp: %s", - zbx_mock_error_string(mock_err)); - } - - zbx_mock_assert_time_eq("item.db_cached_from", ts.sec, item_db_cached_from); - - value_type = zbx_mock_str_to_value_type(zbx_mock_get_object_member_string(hitem, "value type")); - - zbx_vcmock_read_values(zbx_mock_get_object_member_handle(hitem, "data"), value_type, &expected); - zbx_vc_get_cached_values(itemid, value_type, &returned); - - zbx_vcmock_check_records("Cached values", value_type, &expected, &returned); - - zbx_history_record_vector_clean(&expected, value_type); - zbx_history_record_vector_clean(&returned, value_type); - } - else - zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", FAIL, err); - } + zbx_history_record_vector_clean(returned, *value_type); + zbx_history_record_vector_clean(expected, *value_type); +} - /* validate cache state */ - zbx_vc_get_cache_state(&cache_mode, &cache_hits, &cache_misses); - zbx_mock_assert_int_eq("cache.mode", zbx_vcmock_str_to_cache_mode(zbx_mock_get_parameter_string("out.cache.mode")), - cache_mode); +void zbx_vc_test_check_result(zbx_uint64_t *cache_hits, zbx_uint64_t *cache_misses) +{ + zbx_uint64_t expected_hits, expected_misses; if (FAIL == is_uint64(zbx_mock_get_parameter_string("out.cache.hits"), &expected_hits)) fail_msg("Invalid out.cache.hits value"); - zbx_mock_assert_uint64_eq("cache.hits", expected_hits, cache_hits); + zbx_mock_assert_uint64_eq("cache.hits", expected_hits, *cache_hits); if (FAIL == is_uint64(zbx_mock_get_parameter_string("out.cache.misses"), &expected_misses)) fail_msg("Invalid out.cache.misses value"); - zbx_mock_assert_uint64_eq("cache.misses", expected_misses, cache_misses); - - /* cleanup */ - - zbx_vector_history_record_destroy(&returned); - zbx_vector_history_record_destroy(&expected); - - zbx_vcmock_ds_destroy(); + zbx_mock_assert_uint64_eq("cache.misses", expected_misses, *cache_misses); +} - zbx_vc_reset(); - zbx_vc_destroy(); +void zbx_mock_test_entry(void **state) +{ + zbx_vc_common_test_func(state, NULL, zbx_vc_test_get_value_setup, zbx_vc_test_check_result, NULL); } diff --git a/tests/libs/zbxdbcache/zbx_vc_get_values.c b/tests/libs/zbxdbcache/zbx_vc_get_values.c index c90ca2de676..dbb93588a6d 100644 --- a/tests/libs/zbxdbcache/zbx_vc_get_values.c +++ b/tests/libs/zbxdbcache/zbx_vc_get_values.c @@ -27,149 +27,49 @@ #include "valuecache_test.h" #include "mocks/valuecache/valuecache_mock.h" +#include "zbx_vc_common.h" + extern zbx_uint64_t CONFIG_VALUE_CACHE_SIZE; -void zbx_mock_test_entry(void **state) +void zbx_vc_test_get_values_setup(zbx_mock_handle_t *handle, zbx_uint64_t *itemid, unsigned char *value_type, + zbx_timespec_t *ts, int *err, zbx_vector_history_record_t *expected, + zbx_vector_history_record_t *returned, int *seconds, int *count) { - char *error = NULL; - const char *data; - int err, seconds, count, item_status, item_active_range, item_db_cached_from, - item_values_total, cache_mode; - zbx_vector_history_record_t expected, returned; - zbx_timespec_t ts; - zbx_uint64_t itemid, cache_hits, cache_misses, expected_hits, expected_misses; - unsigned char value_type; - zbx_mock_handle_t handle, hitems, hitem, hstatus; - zbx_mock_error_t mock_err; - - ZBX_UNUSED(state); - - /* set small cache size to force smaller cache free request size (5% of cache size) */ - CONFIG_VALUE_CACHE_SIZE = ZBX_KIBIBYTE; - - err = zbx_locks_create(&error); - zbx_mock_assert_result_eq("Lock initialization failed", SUCCEED, err); - - err = zbx_vc_init(&error); - zbx_mock_assert_result_eq("Value cache initialization failed", SUCCEED, err); - - zbx_vc_enable(); - - zbx_vcmock_ds_init(); - zbx_history_record_vector_create(&expected); - zbx_history_record_vector_create(&returned); - - /* precache values */ - if (ZBX_MOCK_SUCCESS == zbx_mock_parameter("in.precache", &handle)) - { - while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(handle, &hitem)))) - { - zbx_vcmock_set_time(hitem, "time"); - zbx_vcmock_set_mode(hitem, "cache mode"); - zbx_vcmock_set_cache_size(hitem, "cache size"); - - zbx_vcmock_get_request_params(hitem, &itemid, &value_type, &seconds, &count, &ts); - zbx_vc_precache_values(itemid, value_type, seconds, count, &ts); - } - } - /* perform request */ - handle = zbx_mock_get_parameter_handle("in.test"); - zbx_vcmock_set_time(handle, "time"); - zbx_vcmock_set_mode(handle, "cache mode"); + *handle = zbx_mock_get_parameter_handle("in.test"); + zbx_vcmock_set_time(*handle, "time"); + zbx_vcmock_set_mode(*handle, "cache mode"); - zbx_vcmock_get_request_params(handle, &itemid, &value_type, &seconds, &count, &ts); - err = zbx_vc_get_values(itemid, value_type, &returned, seconds, count, &ts); + zbx_vcmock_get_request_params(*handle, itemid, value_type, seconds, count, ts); + *err = zbx_vc_get_values(*itemid, *value_type, returned, *seconds, *count, ts); zbx_vc_flush_stats(); - zbx_mock_assert_result_eq("zbx_vc_get_values() return value", SUCCEED, err); + zbx_mock_assert_result_eq("zbx_vc_get_values() return value", SUCCEED, *err); /* validate results */ - zbx_vcmock_read_values(zbx_mock_get_parameter_handle("out.values"), value_type, &expected); - zbx_vcmock_check_records("Returned values", value_type, &expected, &returned); - - zbx_history_record_vector_clean(&returned, value_type); - zbx_history_record_vector_clean(&expected, value_type); - - /* validate cache contents */ - - hitems = zbx_mock_get_parameter_handle("out.cache.items"); - - while (ZBX_MOCK_END_OF_VECTOR != (mock_err = (zbx_mock_vector_element(hitems, &hitem)))) - { - if (ZBX_MOCK_NOT_A_VECTOR == mock_err) - fail_msg("out.cache.items parameter is not a vector"); - - data = zbx_mock_get_object_member_string(hitem, "itemid"); - if (SUCCEED != is_uint64(data, &itemid)) - fail_msg("Invalid itemid \"%s\"", data); - - err = zbx_vc_get_item_state(itemid, &item_status, &item_active_range, &item_values_total, - &item_db_cached_from); - - mock_err = zbx_mock_object_member(hitem, "status", &hstatus); - - if (ZBX_MOCK_SUCCESS == mock_err) - { - zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", SUCCEED, err); + zbx_vcmock_read_values(zbx_mock_get_parameter_handle("out.values"), *value_type, expected); + zbx_vcmock_check_records("Returned values", *value_type, expected, returned); - if (ZBX_MOCK_SUCCESS != (mock_err = zbx_mock_string(hstatus, &data))) - fail_msg("Cannot read item status: %s", zbx_mock_error_string(mock_err)); - - zbx_mock_assert_int_eq("item.status", zbx_vcmock_str_to_item_status(data), item_status); - - data = zbx_mock_get_object_member_string(hitem, "active_range"); - zbx_mock_assert_int_eq("item.active_range", atoi(data), item_active_range); - - data = zbx_mock_get_object_member_string(hitem, "values_total"); - zbx_mock_assert_int_eq("item.values_total", atoi(data), item_values_total); - - if (ZBX_MOCK_SUCCESS != (mock_err = zbx_strtime_to_timespec( - zbx_mock_get_object_member_string(hitem, "db_cached_from"), &ts))) - { - fail_msg("Cannot read out.item.db_cached_from timestamp: %s", - zbx_mock_error_string(mock_err)); - } - - zbx_mock_assert_time_eq("item.db_cached_from", ts.sec, item_db_cached_from); - - value_type = zbx_mock_str_to_value_type(zbx_mock_get_object_member_string(hitem, "value type")); - - zbx_vcmock_read_values(zbx_mock_get_object_member_handle(hitem, "data"), value_type, &expected); - zbx_vc_get_cached_values(itemid, value_type, &returned); - - zbx_vcmock_check_records("Cached values", value_type, &expected, &returned); - - zbx_history_record_vector_clean(&expected, value_type); - zbx_history_record_vector_clean(&returned, value_type); - } - else - zbx_mock_assert_result_eq("zbx_vc_get_item_state() return value", FAIL, err); - } - - /* validate cache state */ + zbx_history_record_vector_clean(returned, *value_type); + zbx_history_record_vector_clean(expected, *value_type); +} - zbx_vc_get_cache_state(&cache_mode, &cache_hits, &cache_misses); - zbx_mock_assert_int_eq("cache.mode", zbx_vcmock_str_to_cache_mode(zbx_mock_get_parameter_string("out.cache.mode")), - cache_mode); +void zbx_vc_test_check_result(zbx_uint64_t *cache_hits, zbx_uint64_t *cache_misses) +{ + zbx_uint64_t expected_hits, expected_misses; if (FAIL == is_uint64(zbx_mock_get_parameter_string("out.cache.hits"), &expected_hits)) fail_msg("Invalid out.cache.hits value"); - zbx_mock_assert_uint64_eq("cache.hits", expected_hits, cache_hits); + zbx_mock_assert_uint64_eq("cache.hits", expected_hits, *cache_hits); if (FAIL == is_uint64(zbx_mock_get_parameter_string("out.cache.misses"), &expected_misses)) fail_msg("Invalid out.cache.misses value"); - zbx_mock_assert_uint64_eq("cache.misses", expected_misses, cache_misses); - - /* cleanup */ - - zbx_vector_history_record_destroy(&returned); - zbx_vector_history_record_destroy(&expected); - - zbx_vcmock_ds_destroy(); + zbx_mock_assert_uint64_eq("cache.misses", expected_misses, *cache_misses); +} - zbx_vc_reset(); - zbx_vc_destroy(); +void zbx_mock_test_entry(void **state) +{ + zbx_vc_common_test_func(state, NULL, NULL, zbx_vc_test_check_result, zbx_vc_test_get_values_setup); } |