Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/regress/sys/kern The sleeping test has been converted to ATF
details: https://anonhg.NetBSD.org/src/rev/4dc5151810e4
branches: trunk
changeset: 782590:4dc5151810e4
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Thu Nov 08 03:16:04 2012 +0000
description:
The sleeping test has been converted to ATF
diffstat:
regress/sys/kern/Makefile | 5 +-
regress/sys/kern/sleeping/Makefile | 12 -
regress/sys/kern/sleeping/sleeptest.c | 231 ----------------------------------
3 files changed, 2 insertions(+), 246 deletions(-)
diffs (263 lines):
diff -r 8e6406c366f4 -r 4dc5151810e4 regress/sys/kern/Makefile
--- a/regress/sys/kern/Makefile Thu Nov 08 03:14:32 2012 +0000
+++ b/regress/sys/kern/Makefile Thu Nov 08 03:16:04 2012 +0000
@@ -1,6 +1,5 @@
-# $NetBSD: Makefile,v 1.33 2012/11/07 16:52:01 pgoyette Exp $
+# $NetBSD: Makefile,v 1.34 2012/11/08 03:16:04 pgoyette Exp $
-SUBDIR+= execve getcwd ras \
- sleeping unfdpass
+SUBDIR+= execve getcwd ras unfdpass
.include <bsd.subdir.mk>
diff -r 8e6406c366f4 -r 4dc5151810e4 regress/sys/kern/sleeping/Makefile
--- a/regress/sys/kern/sleeping/Makefile Thu Nov 08 03:14:32 2012 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-# $NetBSD: Makefile,v 1.3 2011/05/26 12:56:30 joerg Exp $
-
-NOMAN= # defined
-
-PROG= sleeptest
-
-regress: ${PROG}
- ./sleeptest
-
-CWARNFLAGS.clang+= -Wno-format
-
-.include <bsd.prog.mk>
diff -r 8e6406c366f4 -r 4dc5151810e4 regress/sys/kern/sleeping/sleeptest.c
--- a/regress/sys/kern/sleeping/sleeptest.c Thu Nov 08 03:14:32 2012 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-/* $NetBSD: sleeptest.c,v 1.3 2010/03/23 20:32:13 drochner Exp $ */
-
-/*-
- * Copyright (c) 2006 Frank Kardel
- * 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 THE NETBSD FOUNDATION, INC. 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 THE FOUNDATION 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 <sys/event.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <errno.h>
-#include <sys/signal.h>
-#include <string.h>
-#include <err.h>
-#include <unistd.h>
-#include <poll.h>
-
-#define FUZZ 30000000LL /* scheduling fuzz accepted - 30 ms */
-#define MAXSLEEP 32000000000LL /* 32 seconds */
-#define ALARM 11 /* SIGALRM after this time */
-#define KEVNT_TIMEOUT 13200
-
-static int sig, sigs;
-
-static char *sleepers[] = {
- "nanosleep",
- "select",
- "poll",
- "sleep",
- "kevent"
-};
-
-#define N_SLEEPERS (sizeof(sleepers)/sizeof(sleepers[0]))
-
-void
-sigalrm()
-{
- sig++;
-}
-
-int
-main(int argc, char *argv[])
-{
- struct timespec tsa, tsb, tslp, tslplast, tremain;
- struct timeval tv;
- int64_t delta1, delta2, delta3, round;
- int errors = 0, i;
- char *rtype;
-
- printf("Testing sleep/timeout implementations\n");
- printf("accepted scheduling delta %lld ms\n", FUZZ/ 1000000LL);
- printf("testing up to %lld ms for %d interfaces\n", MAXSLEEP / 1000000LL, N_SLEEPERS);
- printf("ALARM interrupt after %d sec once per run\n", ALARM);
- printf("kevent timer will fire after %d ms\n", KEVNT_TIMEOUT);
-
- signal(SIGALRM, sigalrm);
-
- for (i = 0; i < N_SLEEPERS; i++) {
- switch (i) {
- case 3: /* sleep has only second resolution */
- round = 1000000000;
- delta3 = round;
- break;
- default:
- round = 1;
- delta3 = FUZZ;
- break;
- }
- sigs += sig;
- sig = 0;
- rtype = "simulated";
-
- tslp.tv_sec = delta3 / 1000000000;
- tslp.tv_nsec = delta3 % 1000000000;
- tslplast = tslp;
-
- while (delta3 <= MAXSLEEP) {
- printf("[%s] sleeping %lld nsec ... ", sleepers[i], delta3);
- /*
- * disturb sleep by signal on purpose
- */
- if (delta3 > ALARM * 1000000000LL && sig == 0)
- alarm(ALARM);
-
- fflush(stdout);
- clock_gettime(CLOCK_REALTIME, &tsa);
- switch (i) {
- case 0: /* nanosleep */
- rtype = "returned";
- if (nanosleep(&tslp, &tremain) == -1) {
- if (errno != EINTR)
- errors++;
- printf("- errno=%s (%s) - ", strerror(errno), (errno == EINTR) ? "OK" : "ERROR");
- }
- clock_gettime(CLOCK_REALTIME, &tsb);
- break;
-
- case 1: /* select */
- TIMESPEC_TO_TIMEVAL(&tv, &tslp);
- if (select(0, NULL, NULL, NULL, &tv) == -1) {
- if (errno != EINTR)
- errors++;
- printf("- errno=%s (%s) - ", strerror(errno), (errno == EINTR) ? "OK" : "ERROR");
- }
- /* simulate remaining time */
- clock_gettime(CLOCK_REALTIME, &tsb);
- timespecsub(&tsb, &tsa, &tremain);
- timespecsub(&tslp, &tremain, &tremain);
- break;
-
- case 2: /* poll */
- TIMESPEC_TO_TIMEVAL(&tv, &tslp);
- if (pollts(NULL, 0, &tslp, NULL) == -1) {
- if (errno != EINTR)
- errors++;
- printf("- errno=%s (%s) - ", strerror(errno), (errno == EINTR) ? "OK" : "ERROR");
- }
- /* simulate remaining time */
- clock_gettime(CLOCK_REALTIME, &tsb);
- timespecsub(&tsb, &tsa, &tremain);
- timespecsub(&tslp, &tremain, &tremain);
- break;
-
- case 3: /* sleep */
- rtype = "returned";
- tremain.tv_sec = sleep(tslp.tv_sec);
- tremain.tv_nsec = 0;
- clock_gettime(CLOCK_REALTIME, &tsb);
- break;
-
- case 4: /* kevent */
- {
- struct kevent ktimer;
- struct kevent kresult;
- int rtc, timeout = KEVNT_TIMEOUT;
- int kq = kqueue();
-
- if (kq == -1) {
- err(EXIT_FAILURE, "kqueue");
- }
-
- EV_SET(&ktimer, 1, EVFILT_TIMER, EV_ADD, 0, timeout, 0);
-
- rtc = kevent(kq, &ktimer, 1, &kresult, 1, &tslp);
- if (rtc == -1) {
- if (errno != EINTR)
- errors++;
- printf("- errno=%s (%s) - ", strerror(errno), (errno == EINTR) ? "OK" : "ERROR");
- }
- clock_gettime(CLOCK_REALTIME, &tsb);
- if (rtc == 0) {
- printf("- not fired");
- if (tslp.tv_sec * 1000000000LL + tslp.tv_nsec -
- timeout * 1000000LL > 0) {
- printf(" - TIMING ERROR");
- errors++;
- }
- printf(" - ");
- } else if (rtc > 0) {
- printf("- fired - ");
- }
- timespecsub(&tsb, &tsa, &tremain);
- timespecsub(&tslp, &tremain, &tremain);
- (void)close(kq);
- }
- break;
-
- default:
- errx(EXIT_FAILURE, "programming error - sleep method to test not implemented\n");
- }
-
- delta1 = ((int64_t)tsb.tv_sec - (int64_t)tsa.tv_sec) * 1000000000LL + (int64_t)tsb.tv_nsec - (int64_t)tsa.tv_nsec;
- delta2 = (((int64_t)tremain.tv_sec * 1000000000LL) + (int64_t)tremain.tv_nsec);
- delta3 = (int64_t)tslp.tv_sec * 1000000000LL + (int64_t)tslp.tv_nsec - delta1 - delta2;
- printf("sig %d, real time sleep %lld nsec, remain(%s) %lld nsec, diff to supposed sleep %lld nsec (rounded %lld nsec)",
- sigs + sig, delta1, rtype, delta2, delta3, (delta3 / round) * round);
- fflush(stdout);
- delta3 /= round;
- delta3 *= round;
- if (delta3 > FUZZ || delta3 < -FUZZ) {
- errors++;
- printf(" ERROR\n");
- delta3 = ((int64_t)tslp.tv_sec + (int64_t)tslplast.tv_sec) * 1000000000LL + (int64_t)tslplast.tv_nsec
- + (int64_t)tslp.tv_nsec;
- delta3 /= 2;
- } else {
- printf(" OK\n");
- tslplast = tslp;
- delta3 = ((int64_t)tslp.tv_sec + (int64_t)tslplast.tv_sec) * 1000000000LL + (int64_t)tslplast.tv_nsec
- + (int64_t)tslp.tv_nsec;
- }
- delta3 /= round;
- delta3 *= round;
- if (delta3 < FUZZ)
- break;
- tslp.tv_sec = delta3 / 1000000000LL;
- tslp.tv_nsec = delta3 % 1000000000LL;
- }
- }
- sigs += sig;
-
- if (errors || sigs != N_SLEEPERS) {
- printf("TEST FAIL (%d errors, %d alarms, %d interfaces)\n", errors, sigs, N_SLEEPERS);
- return 1;
- } else {
- printf("TEST SUCCESSFUL\n");
- return 0;
- }
-}
Home |
Main Index |
Thread Index |
Old Index