diff options
Diffstat (limited to 'tests/libntp/msyslog.c')
-rw-r--r-- | tests/libntp/msyslog.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/tests/libntp/msyslog.c b/tests/libntp/msyslog.c new file mode 100644 index 000000000000..23ec40110557 --- /dev/null +++ b/tests/libntp/msyslog.c @@ -0,0 +1,136 @@ +#include "config.h" + +#include "ntp_stdlib.h" + +#include "unity.h" + +#ifndef VSNPRINTF_PERCENT_M +// format_errmsg() is normally private to msyslog.c +void format_errmsg (char *, size_t, const char *, int); +#endif + + + +void test_msnprintf(void) { +#define FMT_PREFIX "msyslog.cpp ENOENT: " + char exp_buf[512]; + char act_buf[512]; + int exp_cnt; + int act_cnt; + + exp_cnt = snprintf(exp_buf, sizeof(exp_buf), FMT_PREFIX "%s", + strerror(ENOENT)); + errno = ENOENT; + act_cnt = msnprintf(act_buf, sizeof(act_buf), FMT_PREFIX "%m"); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); + TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); +} + +void +test_msnprintfLiteralPercentm(void) +{ + char exp_buf[32]; + char act_buf[32]; + int exp_cnt; + int act_cnt; + + exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%%m"); + errno = ENOENT; + act_cnt = msnprintf(act_buf, sizeof(act_buf), "%%m"); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); + TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); +} + +void +test_msnprintfBackslashLiteralPercentm(void) { + char exp_buf[32]; + char act_buf[32]; + int exp_cnt; + int act_cnt; + + exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%%m"); + errno = ENOENT; + act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%%m"); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); + TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); +} + +void +test_msnprintfBackslashPercent(void) { + char exp_buf[32]; + char act_buf[32]; + int exp_cnt; + int act_cnt; + + exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%s", + strerror(ENOENT)); + errno = ENOENT; + act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%m"); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); + TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); +} + +void +test_msnprintfHangingPercent(void) { + static char fmt[] = "percent then nul term then non-nul %\0oops!"; + char exp_buf[64]; + char act_buf[64]; + int exp_cnt; + int act_cnt; + + ZERO(exp_buf); + ZERO(act_buf); + exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%s", fmt); + act_cnt = msnprintf(act_buf, sizeof(act_buf), "%s", fmt); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); + TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); + TEST_ASSERT_EQUAL_STRING("", act_buf + 1 + strlen(act_buf)); +} + +void +test_format_errmsgHangingPercent(void) { +#ifndef VSNPRINTF_PERCENT_M + static char fmt[] = "percent then nul term then non-nul %\0oops!"; + char act_buf[64]; + + ZERO(act_buf); + format_errmsg(act_buf, sizeof(act_buf), fmt, ENOENT); + TEST_ASSERT_EQUAL_STRING(fmt, act_buf); + TEST_ASSERT_EQUAL_STRING("", act_buf + 1 + strlen(act_buf)); +#else + TEST_IGNORE_MESSAGE("VSNPRINTF_PERCENT_M is defined") +#endif +} + +void +test_msnprintfNullTarget(void) { + int exp_cnt; + int act_cnt; + + exp_cnt = snprintf(NULL, 0, "%d", 123); + errno = ENOENT; + act_cnt = msnprintf(NULL, 0, "%d", 123); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); +} + +void +test_msnprintfTruncate(void) { + char undist[] = "undisturbed"; + char exp_buf[512]; + char act_buf[512]; + int exp_cnt; + int act_cnt; + + memcpy(exp_buf + 3, undist, sizeof(undist)); + memcpy(act_buf + 3, undist, sizeof(undist)); + exp_cnt = snprintf(exp_buf, 3, "%s", strerror(ENOENT)); + errno = ENOENT; + act_cnt = msnprintf(act_buf, 3, "%m"); + TEST_ASSERT_EQUAL('\0', exp_buf[2]); + TEST_ASSERT_EQUAL('\0', act_buf[2]); + TEST_ASSERT_TRUE(act_cnt > 0); + TEST_ASSERT_EQUAL(exp_cnt, act_cnt); + TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); + TEST_ASSERT_EQUAL_STRING(exp_buf + 3, undist); + TEST_ASSERT_EQUAL_STRING(act_buf + 3, undist); +} |