From owner-svn-src-user@freebsd.org Mon Nov 16 03:28:30 2015 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 850F5A30335 for ; Mon, 16 Nov 2015 03:28:30 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 58E621EE7; Mon, 16 Nov 2015 03:28:30 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id tAG3STNm016963; Mon, 16 Nov 2015 03:28:29 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id tAG3STEv016959; Mon, 16 Nov 2015 03:28:29 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201511160328.tAG3STEv016959@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Garrett Cooper Date: Mon, 16 Nov 2015 03:28:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r290904 - in user/ngie/more-tests2: etc/mtree tests/sys/kern tests/sys/kern/acct X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Nov 2015 03:28:30 -0000 Author: ngie Date: Mon Nov 16 03:28:28 2015 New Revision: 290904 URL: https://svnweb.freebsd.org/changeset/base/290904 Log: Integrate kern/kern_acct.c testcase in as tests/sys/kern/acct/acct_test The :encode_tv_random_million testcase fails the epsilon tests few thousand times out of one million, so expect the testcase to fail MFC after: 1 week Submitted by: keramida Sponsored by: EMC / Isilon Storage Division Added: user/ngie/more-tests2/tests/sys/kern/acct/ user/ngie/more-tests2/tests/sys/kern/acct/Makefile (contents, props changed) user/ngie/more-tests2/tests/sys/kern/acct/acct_test.c (contents, props changed) Modified: user/ngie/more-tests2/etc/mtree/BSD.tests.dist user/ngie/more-tests2/tests/sys/kern/Makefile Modified: user/ngie/more-tests2/etc/mtree/BSD.tests.dist ============================================================================== --- user/ngie/more-tests2/etc/mtree/BSD.tests.dist Mon Nov 16 03:18:40 2015 (r290903) +++ user/ngie/more-tests2/etc/mtree/BSD.tests.dist Mon Nov 16 03:28:28 2015 (r290904) @@ -373,6 +373,8 @@ file .. kern + acct + .. execve .. .. Modified: user/ngie/more-tests2/tests/sys/kern/Makefile ============================================================================== --- user/ngie/more-tests2/tests/sys/kern/Makefile Mon Nov 16 03:18:40 2015 (r290903) +++ user/ngie/more-tests2/tests/sys/kern/Makefile Mon Nov 16 03:28:28 2015 (r290904) @@ -13,6 +13,7 @@ LDADD.unix_seqpacket_test+= -lpthread WARNS?= 5 +TESTS_SUBDIRS+= acct TESTS_SUBDIRS+= execve .include Added: user/ngie/more-tests2/tests/sys/kern/acct/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/ngie/more-tests2/tests/sys/kern/acct/Makefile Mon Nov 16 03:28:28 2015 (r290904) @@ -0,0 +1,17 @@ +# $FreeBSD$ + +TESTSDIR= ${TESTSBASE}/sys/kern/acct + +ATF_TESTS_C= acct_test + +CFLAGS+= -I${.OBJDIR} + +CLEANFILES+= convert.c + +DPSRCS.acct_test= convert.c + +convert.c: ${SRCTOP}/sys/kern/kern_acct.c + sed -n -e 's/log(/syslog(/g' \ + -e '/FLOAT_CONVERSION_START/,/FLOAT_CONVERSION_END/p' ${.ALLSRC} >>${.TARGET} + +.include Added: user/ngie/more-tests2/tests/sys/kern/acct/acct_test.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/ngie/more-tests2/tests/sys/kern/acct/acct_test.c Mon Nov 16 03:28:28 2015 (r290904) @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2011 Giorgos Keramidas. All rights reserved. + * Copyright (c) 2007 Diomidis Spinellis. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define KASSERT(val, msg) assert(val) + +typedef u_int32_t comp_t; + +#define AHZ 1000000 + +#include "convert.c" + +union cf { + comp_t c; + float f; +}; + +static void +check_result(const char *name, float expected, union cf v) +{ + double eps; + + eps = fabs(expected - v.f) / expected; + ATF_CHECK(eps <= FLT_EPSILON); + if (eps > FLT_EPSILON) { + printf("Error in %s\n", name); + printf("Got 0x%08x %12g\n", v.c, v.f); + v.f = expected; + printf("Expected 0x%08x %12g (%.15lg)\n", v.c, v.f, expected); + printf("Epsilon=%lg, rather than %g\n", eps, FLT_EPSILON); + } +} + +/* + * Test case for encoding {0 sec, 0 usec} within a reasonable epsilon. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_zero); +ATF_TC_BODY(encode_tv_zero, tc) +{ + union cf v; + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = 0; + v.c = encode_timeval(tv); + ATF_CHECK(fabs(v.f - 0.0) < FLT_EPSILON); +} + +/* + * Test case for encoding a random long number. + */ + +ATF_TC_WITHOUT_HEAD(encode_long); +ATF_TC_BODY(encode_long, tc) +{ + union cf v; + long l; + + l = random(); + v.c = encode_long(l); + check_result(atf_tc_get_ident(tc), l, v); +} + +/* + * Test case for encoding a small number of seconds {1 sec, 0 usec}. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_only_sec); +ATF_TC_BODY(encode_tv_only_sec, tc) +{ + union cf v; + struct timeval tv; + + tv.tv_sec = 1; + tv.tv_usec = 0; + v.c = encode_timeval(tv); + check_result(atf_tc_get_ident(tc), + (float)tv.tv_sec * AHZ + tv.tv_usec, v); +} + +/* + * Test case for encoding a small number of usec {0 sec, 1 usec}. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_only_usec); +ATF_TC_BODY(encode_tv_only_usec, tc) +{ + union cf v; + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = 1; + v.c = encode_timeval(tv); + check_result(atf_tc_get_ident(tc), + (float)tv.tv_sec * AHZ + tv.tv_usec, v); +} + +/* + * Test case for encoding a large number of usec {1 sec, 999.999 usec}. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_many_usec); +ATF_TC_BODY(encode_tv_many_usec, tc) +{ + union cf v; + struct timeval tv; + + tv.tv_sec = 1; + tv.tv_usec = 999999L; + v.c = encode_timeval(tv); + check_result(atf_tc_get_ident(tc), + (float)tv.tv_sec * AHZ + tv.tv_usec, v); +} + +/* + * Test case for encoding a huge number of usec {1 sec, 1.000.000 usec} that + * overflows the usec counter and should show up as an increase in timeval's + * seconds instead. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_usec_overflow); +ATF_TC_BODY(encode_tv_usec_overflow, tc) +{ + union cf v; + struct timeval tv; + + tv.tv_sec = 1; + tv.tv_usec = 1000000L; + v.c = encode_timeval(tv); + check_result(atf_tc_get_ident(tc), + (float)tv.tv_sec * AHZ + tv.tv_usec, v); +} + +/* + * Test case for encoding a very large number of seconds, one that is very + * near to the limit of 32-bit signed values. With a usec value of 999.999 + * microseconds this should result in the largest value we can represent with + * a timeval struct. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_upper_limit); +ATF_TC_BODY(encode_tv_upper_limit, tc) +{ + union cf v; + struct timeval tv; + + tv.tv_sec = 2147483647L; + tv.tv_usec = 999999L; + v.c = encode_timeval(tv); + check_result(atf_tc_get_ident(tc), + (float)tv.tv_sec * AHZ + tv.tv_usec, v); +} + +/* + * Test case for encoding a million random timeval objects, and checking that + * the conversion does not diverge too much from the expected values. + */ + +ATF_TC_WITHOUT_HEAD(encode_tv_random_million); +ATF_TC_BODY(encode_tv_random_million, tc) +{ + union cf v; + struct timeval tv; + long k; + + atf_tc_expect_fail("the testcase violates FLT_EPSILON"); + + ATF_REQUIRE_MSG(unsetenv("TZ") == 0, "unsetting TZ failed; errno=%d", errno); + + for (k = 1; k < 1000000L; k++) { + tv.tv_sec = random(); + tv.tv_usec = (random() % 1000000L); + v.c = encode_timeval(tv); + check_result(atf_tc_get_ident(tc), + (float)tv.tv_sec * AHZ + tv.tv_usec, v); + } +} + +/* --------------------------------------------------------------------- + * Main. + * --------------------------------------------------------------------- */ + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, encode_long); + ATF_TP_ADD_TC(tp, encode_tv_zero); + ATF_TP_ADD_TC(tp, encode_tv_only_sec); + ATF_TP_ADD_TC(tp, encode_tv_only_usec); + ATF_TP_ADD_TC(tp, encode_tv_many_usec); + ATF_TP_ADD_TC(tp, encode_tv_usec_overflow); + ATF_TP_ADD_TC(tp, encode_tv_upper_limit); + ATF_TP_ADD_TC(tp, encode_tv_random_million); + + return atf_no_error(); +}