diff options
Diffstat (limited to 'tests/libs/zbxsysinfo/common/web_page_get.c')
-rw-r--r-- | tests/libs/zbxsysinfo/common/web_page_get.c | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/tests/libs/zbxsysinfo/common/web_page_get.c b/tests/libs/zbxsysinfo/common/web_page_get.c new file mode 100644 index 00000000000..22811829dbd --- /dev/null +++ b/tests/libs/zbxsysinfo/common/web_page_get.c @@ -0,0 +1,200 @@ +/* +** 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 "zbxmockutil.h" + +#include "zbxcomms.h" +#include "zbxsysinfo.h" +#include "../../../../src/libs/zbxsysinfo/sysinfo.h" +#include "../../../../src/libs/zbxsysinfo/common/http.h" + +#ifndef HAVE_LIBCURL + +#define STR_TEST_TYPE "legacy" +#define STR_FIELD_OUT "out.req" + +static const char *http_req; +static size_t http_len; + +int __wrap_zbx_tcp_connect(zbx_socket_t *s, const char *source_ip, const char *ip, unsigned short port, + int timeout, unsigned int tls_connect, const char *tls_arg1, const char *tls_arg2); +int __wrap_zbx_tcp_send_ext(zbx_socket_t *s, const char *data, size_t len, unsigned char flags, int timeout); +ssize_t __wrap_zbx_tcp_recv_raw_ext(zbx_socket_t *s, int timeout); +void __wrap_zbx_tcp_close(zbx_socket_t *s); + +#else + +#define STR_TEST_TYPE "libcurl" +#define STR_FIELD_OUT "out.url" + +static void *page_data = NULL; +static size_t (*cb_ptr)(void *ptr, size_t size, size_t nmemb, void *userdata); +static char *req_url = NULL; +static int dummy; + +CURL *__wrap_curl_easy_init(void); +CURLcode __wrap_curl_easy_setopt(CURL *easyhandle, int opt, void *val); +CURLcode __wrap_curl_easy_perform(CURL *easyhandle); +void __wrap_curl_easy_cleanup(CURL *easyhandle); + +#endif + +void zbx_mock_test_entry(void **state) +{ + AGENT_REQUEST request; + AGENT_RESULT param_result; + int expected_result, actual_result; + const char *buffer, *init_param, *test_type; + char *rvalue; + + ZBX_UNUSED(state); + + test_type = zbx_mock_get_parameter_string("in.test_type"); + + if (0 != strcmp(test_type, "both") && 0 != strcmp(test_type, STR_TEST_TYPE)) + skip(); + + expected_result = zbx_mock_str_to_return_code(zbx_mock_get_parameter_string("out.return")); + + zbx_init_agent_request(&request); + zbx_init_agent_result(¶m_result); + init_param = zbx_mock_get_parameter_string("in.key"); + + if (SUCCEED != zbx_parse_item_key(init_param, &request)) + fail_msg("Cannot parse item key: %s", init_param); + + if (expected_result != (actual_result = web_page_get(&request, ¶m_result))) + { + fail_msg("Got %s instead of %s as a result.", zbx_sysinfo_ret_string(actual_result), + zbx_sysinfo_ret_string(expected_result)); + } + + if (SYSINFO_RET_FAIL == expected_result) + { + buffer = zbx_mock_get_parameter_string("out.error"); + rvalue = (NULL != ZBX_GET_MSG_RESULT(¶m_result)) ? *ZBX_GET_MSG_RESULT(¶m_result) : NULL; + } + else + { + buffer = zbx_mock_get_parameter_string(STR_FIELD_OUT); + rvalue = (NULL != ZBX_GET_TEXT_RESULT(¶m_result)) ? *ZBX_GET_TEXT_RESULT(¶m_result) : NULL; + } + + if (NULL == rvalue) + fail_msg("Got 'NULL' response."); + +#ifndef HAVE_LIBCURL + if (SYSINFO_RET_OK == expected_result) + rvalue[strlen(rvalue) - 1] = '\0'; /* remove last char from __wrap_zbx_tcp_recv_raw_ext */ +#endif + + if (0 != strcmp(buffer, rvalue)) + fail_msg("Got '%s' instead of '%s' as a value.", rvalue, buffer); + + zbx_free_agent_request(&request); + zbx_free_agent_result(¶m_result); +} + +#ifdef HAVE_LIBCURL +CURL *__wrap_curl_easy_init(void) +{ + return (CURL*)&dummy; +} + +CURLcode __wrap_curl_easy_setopt(CURL *easyhandle, int opt, void *val) +{ + ZBX_UNUSED(easyhandle); + + switch (opt) + { + case CURLOPT_URL: + req_url = zbx_strdup(req_url, (char*)val); + break; + case CURLOPT_WRITEFUNCTION: + *(void **)(&cb_ptr) = val; + break; + case CURLOPT_WRITEDATA: + page_data = val; + break; + } + + return CURLE_OK; +} + +CURLcode __wrap_curl_easy_perform(CURL *easyhandle) +{ + ZBX_UNUSED(easyhandle); + + cb_ptr(req_url, 1, strlen(req_url), page_data); + zbx_free(req_url); + + return CURLE_OK; +} + +void __wrap_curl_easy_cleanup(CURL *easyhandle) +{ + ZBX_UNUSED(easyhandle); + + return; +} +#else +int __wrap_zbx_tcp_connect(zbx_socket_t *s, const char *source_ip, const char *ip, unsigned short port, + int timeout, unsigned int tls_connect, const char *tls_arg1, const char *tls_arg2) +{ + ZBX_UNUSED(s); + ZBX_UNUSED(source_ip); + ZBX_UNUSED(ip); + ZBX_UNUSED(port); + ZBX_UNUSED(timeout); + ZBX_UNUSED(tls_connect); + ZBX_UNUSED(tls_arg1); + ZBX_UNUSED(tls_arg2); + + return SUCCEED; +} + +int __wrap_zbx_tcp_send_ext(zbx_socket_t *s, const char *data, size_t len, unsigned char flags, int timeout) +{ + ZBX_UNUSED(s); + ZBX_UNUSED(flags); + ZBX_UNUSED(timeout); + + http_req = data; + http_len = len; + return SUCCEED; +} + +ssize_t __wrap_zbx_tcp_recv_raw_ext(zbx_socket_t *s, int timeout) +{ + ZBX_UNUSED(s); + ZBX_UNUSED(timeout); + + s->buffer = (char *)http_req; + s->buffer[http_len++] = '*'; /* workaround for zbx_rtrim */ + s->buffer[http_len++] = '\0'; + return http_len; +} + +void __wrap_zbx_tcp_close(zbx_socket_t *s) +{ + ZBX_UNUSED(s); +} +#endif |