freebsd_amp_hwpstate/tests/libntp/g_msyslog.cpp

138 lines
3.1 KiB
C++

#include "g_libntptest.h"
extern "C" {
#include <stdio.h>
#include <string.h>
#include <errno.h>
#ifndef VSNPRINTF_PERCENT_M
// format_errmsg() is normally private to msyslog.c
void format_errmsg (char *, size_t, const char *, int);
#endif
};
class msyslogTest : public libntptest {
};
// msnprintf()
TEST_F(msyslogTest, msnprintf)
{
#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");
EXPECT_EQ(exp_cnt, act_cnt);
EXPECT_STREQ(exp_buf, act_buf);
}
TEST_F(msyslogTest, msnprintfLiteralPercentm)
{
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");
EXPECT_EQ(exp_cnt, act_cnt);
EXPECT_STREQ(exp_buf, act_buf);
}
TEST_F(msyslogTest, msnprintfBackslashLiteralPercentm)
{
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");
EXPECT_EQ(exp_cnt, act_cnt);
EXPECT_STREQ(exp_buf, act_buf);
}
TEST_F(msyslogTest, msnprintfBackslashPercent)
{
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");
EXPECT_EQ(exp_cnt, act_cnt);
EXPECT_STREQ(exp_buf, act_buf);
}
TEST_F(msyslogTest, msnprintfHangingPercent)
{
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), fmt);
act_cnt = msnprintf(act_buf, sizeof(act_buf), fmt);
EXPECT_EQ(exp_cnt, act_cnt);
EXPECT_STREQ(exp_buf, act_buf);
EXPECT_STREQ("", act_buf + 1 + strlen(act_buf));
}
#ifndef VSNPRINTF_PERCENT_M
TEST_F(msyslogTest, format_errmsgHangingPercent)
{
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);
EXPECT_STREQ(fmt, act_buf);
EXPECT_STREQ("", act_buf + 1 + strlen(act_buf));
}
#endif
TEST_F(msyslogTest, msnprintfNullTarget)
{
int exp_cnt;
int act_cnt;
exp_cnt = snprintf(NULL, 0, "%d", 123);
errno = ENOENT;
act_cnt = msnprintf(NULL, 0, "%d", 123);
EXPECT_EQ(exp_cnt, act_cnt);
}
TEST_F(msyslogTest, msnprintfTruncate)
{
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");
EXPECT_EQ('\0', exp_buf[2]);
EXPECT_EQ('\0', act_buf[2]);
EXPECT_TRUE(act_cnt > 0);
EXPECT_EQ(exp_cnt, act_cnt);
EXPECT_STREQ(exp_buf, act_buf);
EXPECT_STREQ(exp_buf + 3, undist);
EXPECT_STREQ(act_buf + 3, undist);
}