/* ** Copyright (C) 2001-2025 Zabbix SIA ** ** This program is free software: you can redistribute it and/or modify it under the terms of ** the GNU Affero General Public License as published by the Free Software Foundation, version 3. ** ** 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 Affero General Public License for more details. ** ** You should have received a copy of the GNU Affero General Public License along with this program. ** If not, see <https://www.gnu.org/licenses/>. **/ #include "zbxmocktest.h" #include "zbxmockdata.h" #include "zbxmockassert.h" #include "zbxmockhelper.h" #include "zbxmockutil.h" #include "zbxdbhigh.h" #include "../../../src/libs/zbxicmpping/icmpping.c" int __wrap_mkstemp(void); FILE *__wrap_popen(const char *command, const char *type); ssize_t __wrap_write(int fd, const void *buf, size_t n); const char *mock_get_tmpdir(void); const char *mock_get_progname(void); int __wrap_mkstemp(void) { return INT_MAX; } FILE *__wrap_popen(const char *command, const char *type) { const char *str = NULL; size_t f_size; ZBX_UNUSED(type); if (NULL != strstr(command, "-i0")) str = zbx_mock_get_parameter_string("in.fping_out_i0"); else if (NULL != strstr(command, "-i1")) str = zbx_mock_get_parameter_string("in.fping_out_i1"); else if (NULL != strstr(command, "-i10")) str = zbx_mock_get_parameter_string("in.fping_out_i10"); else fail_msg("This should never happen: unexpected command '%s' in %s().", command, __func__); f_size = strlen(str); return fmemopen((void *)str, f_size * sizeof(char), "r"); } ssize_t __wrap_write(int fd, const void *buf, size_t n) { ZBX_UNUSED(fd); ZBX_UNUSED(buf); return n; } const char *mock_get_tmpdir(void) { return ""; } const char *mock_get_progname(void) { return ""; } void zbx_mock_test_entry(void **state) { const int hosts_cnt = 1; int value, ret; zbx_fping_host_t hosts[hosts_cnt]; char error[ZBX_ITEM_ERROR_LEN_MAX]; char status[1]; static zbx_config_icmpping_t mock_config_icmpping = { NULL, NULL, NULL, mock_get_tmpdir, mock_get_progname}; ZBX_UNUSED(state); zbx_init_library_icmpping(&mock_config_icmpping); error[0] = '\0'; status[0] = '\0'; memset(hosts, 0, sizeof(zbx_fping_host_t) * hosts_cnt); hosts[0].addr = (char *)zbx_mock_get_parameter_string("in.target_host_addr"); hosts[0].status = status; ret = get_interval_option("/usr/bin/fping", hosts, hosts_cnt, &value, error, ZBX_ITEM_ERROR_LEN_MAX); zbx_mock_assert_int_eq("get_interval_option() return value", zbx_mock_str_to_return_code("SUCCEED"), ret); zbx_mock_assert_str_eq("error message returned by get_interval_option()", "", error); zbx_mock_assert_int_eq("minimal detected interval", (int)zbx_mock_get_parameter_uint64("out.value"), value); }