svn commit: r353305 - head/tests/sys/kern
Konstantin Belousov
kostikbel at gmail.com
Tue Oct 8 15:04:47 UTC 2019
On Tue, Oct 08, 2019 at 01:43:05PM +0000, Eric van Gyzen wrote:
> Author: vangyzen
> Date: Tue Oct 8 13:43:05 2019
> New Revision: 353305
> URL: https://svnweb.freebsd.org/changeset/base/353305
>
> Log:
> Fix problems in the kern_maxfiles__increase test
>
> ATF functions such as ATF_REQUIRE do not work correctly in child processes.
> Use plain C functions to report errors instead.
There are much more tests that fork and use ATF_ in children.
Look e.g. at most ptrace(2) tests.
>
> In the parent, check for the untimely demise of children. Without this,
> the test hung until the framework's timeout.
>
> Raise the resource limit on the number of open files. If this was too low,
> the test hit the two problems above.
>
> Restore the kern.maxfiles sysctl OID in the cleanup function.
> The body prematurely removed the symlink in which the old value was saved.
>
> Make the test more robust by opening more files. In fact, due to the
> integer division by 4, this was necessary to make the test valid with
> some initial values of maxfiles. Thanks, asomers at .
>
> wait() for children instead of sleeping.
>
> Clean up a temporary file created by the test ("afile").
>
> Reviewed by: asomers
> MFC after: 1 week
> Sponsored by: Dell EMC Isilon
> Differential Revision: https://reviews.freebsd.org/D21900
>
> Modified:
> head/tests/sys/kern/kern_descrip_test.c
>
> Modified: head/tests/sys/kern/kern_descrip_test.c
> ==============================================================================
> --- head/tests/sys/kern/kern_descrip_test.c Tue Oct 8 11:27:48 2019 (r353304)
> +++ head/tests/sys/kern/kern_descrip_test.c Tue Oct 8 13:43:05 2019 (r353305)
> @@ -28,16 +28,22 @@
> __FBSDID("$FreeBSD$");
>
> #include <sys/param.h>
> +#include <sys/limits.h>
> +#include <sys/resource.h>
> +#include <sys/stat.h>
> +#include <sys/sysctl.h>
> +#include <sys/time.h>
> +#include <sys/wait.h>
> +
> #include <errno.h>
> #include <fcntl.h>
> #include <signal.h>
> #include <stdio.h>
> #include <stdlib.h>
> +#include <string.h>
> #include <strings.h>
> -#include <sys/limits.h>
> -#include <sys/stat.h>
> -#include <sys/sysctl.h>
> #include <unistd.h>
> +
> #include <atf-c.h>
>
> static volatile sig_atomic_t done;
> @@ -92,8 +98,13 @@ openfiles2(size_t n)
> int r;
>
> errno = 0;
> - for (i = 0; i < n; i++)
> - ATF_REQUIRE((r = open(AFILE, O_RDONLY)) != -1);
> + for (i = 0; i < n; i++) {
> + r = open(AFILE, O_RDONLY);
> + if (r < 0) {
> + fprintf(stderr, "open: %s\n", strerror(errno));
> + _exit(1);
> + }
> + }
> kill(getppid(), SIGUSR1);
>
> for (;;) {
> @@ -118,10 +129,14 @@ openfiles(size_t n)
> for (i = 0; i < PARALLEL; i++)
> if (fork() == 0)
> openfiles2(n / PARALLEL);
> - while (done != PARALLEL)
> + while (done != PARALLEL) {
> usleep(1000);
> + ATF_REQUIRE_EQ_MSG(0, waitpid(-1, NULL, WNOHANG),
> + "a child exited unexpectedly");
> + }
> unlink(RENDEZVOUS);
> - usleep(40000);
> + for (i = 0; i < PARALLEL; i++)
> + ATF_CHECK_MSG(wait(NULL) > 0, "wait: %s", strerror(errno));
> }
>
> ATF_TC_WITH_CLEANUP(kern_maxfiles__increase);
> @@ -138,6 +153,7 @@ ATF_TC_BODY(kern_maxfiles__increase, tc)
> size_t oldlen;
> int maxfiles, oldmaxfiles, current;
> char buf[80];
> + struct rlimit rl;
>
> oldlen = sizeof(maxfiles);
> if (sysctlbyname("kern.maxfiles", &maxfiles, &oldlen, NULL, 0) == -1)
> @@ -160,8 +176,11 @@ ATF_TC_BODY(kern_maxfiles__increase, tc)
> atf_tc_fail("getsysctlbyname(%s): %s", "kern.maxfiles",
> strerror(errno));
>
> - openfiles(oldmaxfiles - current + 1);
> - (void)unlink(VALUE);
> + rl.rlim_cur = rl.rlim_max = maxfiles;
> + ATF_REQUIRE_EQ_MSG(0, setrlimit(RLIMIT_NOFILE, &rl),
> + "setrlimit(RLIMIT_NOFILE, %d): %s", maxfiles, strerror(errno));
> +
> + openfiles(oldmaxfiles - current + EXPANDBY / 2);
> }
>
> ATF_TC_CLEANUP(kern_maxfiles__increase, tc)
> @@ -178,6 +197,8 @@ ATF_TC_CLEANUP(kern_maxfiles__increase, tc)
> &oldmaxfiles, oldlen);
> }
> }
> + (void)unlink(VALUE);
> + (void)unlink(AFILE);
> }
>
> ATF_TP_ADD_TCS(tp)
More information about the svn-src-all
mailing list