Add a test for the kernel snprintf.

This commit is contained in:
christos 2011-11-24 01:46:40 +00:00
parent 947906bba8
commit 408524dea5
2 changed files with 126 additions and 2 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.21 2011/10/15 07:00:49 jruoho Exp $
# $NetBSD: Makefile,v 1.22 2011/11/24 01:46:40 christos Exp $
NOMAN= # defined
@ -14,6 +14,7 @@ TESTS_C+= t_pty
TESTS_C+= t_rnd
TESTS_C+= t_extattrctl
TESTS_C+= t_filedesc
TESTS_C+= t_subr_prf
TESTS_SH= t_umount
TESTS_SH+= t_ps_strings
@ -23,7 +24,7 @@ PROGS= h_ps_strings1
PROGS+= h_ps_strings2
LDADD.t_rnd+= -lrumpvfs -lrumpdev_rnd -lrumpdev -lrump -lrumpuser -lpthread
LDADD.t_filedesc+= -lrumpvfs -lrumpdev_rnd -lrumpdev -lrump -lrumpuser -lpthread
LDADD.t_filedesc+= ${LDADD.t_rnd}
LDADD.t_extattrctl+= -lrumpvfs -lrump -lrumpuser -lpthread
.PATH: ${NETBSDSRCDIR}/sys/kern
@ -32,4 +33,9 @@ SRCS.t_extent= t_extent.c subr_extent.c
CPPFLAGS.t_extent.c= -D_EXTENT_TESTING -D__POOL_EXPOSE
CPPFLAGS.subr_extent.c= -D_EXTENT_TESTING -D__POOL_EXPOSE
t_subr_prf.c: gen_t_subr_prf ${NETBSDSRCDIR}/sys/kern/subr_prf.c
${HOST_SH} ${.ALLSRC} ${.TARGET}
CLEANFILES+= t_subr_prf.c
.include <bsd.test.mk>

118
tests/kernel/gen_t_subr_prf Executable file
View File

@ -0,0 +1,118 @@
#!/bin/sh
cat << _EOF > $2
#include <sys/types.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#include <string.h>
#include <atf-c.h>
#define KPRINTF_BUFSIZE 1024
#undef putchar
#define putchar xputchar
static int putchar(char c, int foo, void *b)
{
return fputc(c, stderr);
}
#define TOBUFONLY 1
static const char HEXDIGITS[] = "0123456789ABCDEF";
static const char hexdigits[] = "0123456789abcdef";
typedef int device_t;
#define device_xname(a) ""
int kprintf(const char *, int, void *, char *, va_list);
void device_printf(device_t, const char *, ...);
static void
empty(void)
{
}
static void (*v_flush)(void) = empty;
ATF_TC(snprintf_print);
ATF_TC_HEAD(snprintf_print, tc)
{
atf_tc_set_md_var(tc, "descr", "checks snprintf print");
}
ATF_TC_BODY(snprintf_print, tc)
{
char buf[10];
int i;
memset(buf, 'x', sizeof(buf));
i = snprintf(buf, sizeof(buf), "number %d", 10);
ATF_CHECK_EQ(i, 9);
ATF_CHECK_STREQ(buf, "number 10");
}
ATF_TC(snprintf_print_overflow);
ATF_TC_HEAD(snprintf_print_overflow, tc)
{
atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow");
}
ATF_TC_BODY(snprintf_print_overflow, tc)
{
char buf[10];
int i;
memset(buf, 'x', sizeof(buf));
i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10);
ATF_CHECK_EQ(i, 16);
ATF_CHECK_STREQ(buf, "fjsdfsdjf");
}
ATF_TC(snprintf_count);
ATF_TC_HEAD(snprintf_count, tc)
{
atf_tc_set_md_var(tc, "descr", "checks snprintf count");
}
ATF_TC_BODY(snprintf_count, tc)
{
int i;
i = snprintf(NULL, 20, "number %d", 10);
ATF_CHECK_EQ(i, 9);
}
ATF_TC(snprintf_count_overflow);
ATF_TC_HEAD(snprintf_count_overflow, tc)
{
atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow");
}
ATF_TC_BODY(snprintf_count_overflow, tc)
{
int i;
i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10);
ATF_CHECK_EQ(i, 16);
}
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, snprintf_print);
ATF_TP_ADD_TC(tp, snprintf_print_overflow);
ATF_TP_ADD_TC(tp, snprintf_count);
ATF_TP_ADD_TC(tp, snprintf_count_overflow);
return atf_no_error();
}
_EOF
awk '
/^snprintf\(/ {
print prevline
out = 1
}
{
if (out) print
else prevline = $0
}' $1 >>$2