#include "zbxmockassert.h"
static void parse_period(const char *period, int *multiplier, zbx_time_unit_t *base)
*multiplier = atoi(period);
unit = period + strlen(period) - 1;
*base = ZBX_TIME_UNIT_ISOYEAR;
else if (ZBX_TIME_UNIT_UNKNOWN == (*base = zbx_tm_str_to_unit(unit)))
fail_msg("invalid time period '%s'", period);
void zbx_mock_test_entry(void **state)
zbx_timespec_t ts_in, ts_out, ts;
if (0 != setenv("TZ", zbx_mock_get_parameter_string("in.timezone"), 1))
fail_msg("Cannot set 'TZ' environment variable: %s", zbx_strerror(errno));
if (ZBX_MOCK_SUCCESS != zbx_strtime_to_timespec(zbx_mock_get_parameter_string("in.time"), &ts_in))
fail_msg("Invalid input time format");
if (ZBX_MOCK_SUCCESS != zbx_strtime_to_timespec(zbx_mock_get_parameter_string("out.time"), &ts_out))
fail_msg("Invalid output time format");
parse_period(zbx_mock_get_parameter_string("in.param"), &multiplier, &base);
tm = *localtime(&time_tmp);
zbx_tm_sub(&tm, multiplier, base);
if (0 > tm.tm_hour || 23 < tm.tm_hour)
fail_msg("invalid tm_hour:%d", tm.tm_hour);
if (1 > tm.tm_mday || 31 < tm.tm_mday)
fail_msg("invalid tm.tm_mday:%d", tm.tm_mday);
if (0 > tm.tm_mon || 11 < tm.tm_mon)
fail_msg("invalid tm.tm_mon:%d", tm.tm_mon);
if (0 > tm.tm_wday || 6 < tm.tm_wday)
fail_msg("invalid tm.tm_wday:%d", tm.tm_wday);
if (0 > tm.tm_yday || 365 < tm.tm_yday)
fail_msg("invalid tm.tm_yday:%d", tm.tm_yday);
if (-1 == (time_tmp = mktime(&tm)))
fail_msg("invalid time structure");
zbx_mock_assert_timespec_eq("Time subtraction result", &ts_out, &ts);