Index: sys/netinet/libalias/tests/Makefile =================================================================== --- /dev/null +++ sys/netinet/libalias/tests/Makefile @@ -0,0 +1,14 @@ +# $FreeBSD$ + +.include + +ATF_TESTS_C+= aliasdb_test + +SRCS.aliasdb_test= aliasdb_test.c + +LIBADD+= alias + +.include + +try: $(ATF_TESTS_C) + cd /usr/obj/usr/src/amd64.amd64/sys/netinet/libalias/tests/; kyua test Index: sys/netinet/libalias/tests/aliasdb_test.c =================================================================== --- /dev/null +++ sys/netinet/libalias/tests/aliasdb_test.c @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include + +static int randcmp(const void *a, const void *b) { + int res, r = rand(); + + (void)a; + (void)b; + res = (r/4 < RAND_MAX/9) ? 1 + : (r/5 < RAND_MAX/9) ? 0 + : -1; + return (res); +} + +ATF_TC(destroynull); +ATF_TC_HEAD(destroynull, env) +{ + atf_tc_set_md_var(env, "descr", "Destroy the NULL instance"); +} +ATF_TC_BODY(destroynull, dummy) +{ + atf_tc_expect_signal(SIGSEGV, "Code expects valid pointer."); + LibAliasUninit(NULL); +} + +ATF_TC(singleinit); +ATF_TC_HEAD(singleinit, env) +{ + atf_tc_set_md_var(env, "descr", "Create an instance"); +} +ATF_TC_BODY(singleinit, dummy) +{ + struct libalias *la; + + la = LibAliasInit(NULL); + ATF_CHECK_MSG(la != NULL, "Creating an instance failed."); + LibAliasUninit(la); +} + +ATF_TC(multiinit); +ATF_TC_HEAD(multiinit, env) +{ + atf_tc_set_md_var(env, "descr", "Recreate an instance multiple times"); +} +ATF_TC_BODY(multiinit, dummy) +{ + struct libalias *la; + int i; + + la = LibAliasInit(NULL); + for(i = 1; i < 30; i++) { + struct libalias *lo = la; + + la = LibAliasInit(la); + ATF_CHECK_MSG(la == lo, "Recreating moved the instance around: %d", i); + } + LibAliasUninit(la); +} + +ATF_TC(multiinstance); +ATF_TC_HEAD(multiinstance, env) +{ + atf_tc_set_md_var(env, "descr", "Create and destoy multiple instances."); +} +ATF_TC_BODY(multiinstance, dummy) +{ +#define MAX_INSTANCES 300 + struct libalias *la[MAX_INSTANCES]; + int i; + + for (i = 0; i < MAX_INSTANCES; i++) { + la[i] = LibAliasInit(NULL); + ATF_CHECK_MSG(la[i] != NULL, "Creating instance %d failed.", i); + } + + qsort(la, MAX_INSTANCES, sizeof(*la), randcmp); + + for (i = 0; i < MAX_INSTANCES; i++) + LibAliasUninit(la[i]); +} + +ATF_TP_ADD_TCS(aliasdb) +{ + ATF_TP_ADD_TC(aliasdb, destroynull); + ATF_TP_ADD_TC(aliasdb, singleinit); + ATF_TP_ADD_TC(aliasdb, multiinit); + ATF_TP_ADD_TC(aliasdb, multiinstance); + + return atf_no_error(); +}