From b389028e08882e9bceaf847264da46a03074e055 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" <ldv@altlinux.org> Date: Mon, 22 Feb 2016 23:42:23 +0000 Subject: [PATCH] tests: add count-f.test * tests/count-f.c: New file. * tests/count-f.expected: Likewise. * tests/count-f.test: New test. * tests/.gitignore: Add count-f. * tests/Makefile.am (check_PROGRAMS): Likewise. (count_f_LDADD): New variable. (EXTRA_DIST): Add count-f.expected. (TESTS): Add count-f.test. --- tests/.gitignore | 1 + tests/Makefile.am | 4 ++ tests/count-f.c | 102 +++++++++++++++++++++++++++++++++++++++++ tests/count-f.expected | 1 + tests/count-f.test | 11 +++++ 5 files changed, 119 insertions(+) create mode 100644 tests/count-f.c create mode 100644 tests/count-f.expected create mode 100755 tests/count-f.test diff --git a/tests/.gitignore b/tests/.gitignore index e8824633..b89796a3 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -19,6 +19,7 @@ chmod clock_nanosleep clock_xettime copy_file_range +count-f dup dup2 dup3 diff --git a/tests/Makefile.am b/tests/Makefile.am index 4b48b3f9..59e7e782 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -69,6 +69,7 @@ check_PROGRAMS = \ clock_nanosleep \ clock_xettime \ copy_file_range \ + count-f \ dup \ dup2 \ dup3 \ @@ -199,6 +200,7 @@ check_PROGRAMS = \ attach_f_p_LDADD = -lrt -lpthread $(LDADD) clock_xettime_LDADD = -lrt $(LDADD) +count_f_LDADD = -lpthread $(LDADD) filter_unavailable_LDADD = -lpthread $(LDADD) fstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64 fstatat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64 @@ -239,6 +241,7 @@ TESTS = \ clock_nanosleep.test \ clock_xettime.test \ copy_file_range.test \ + count-f.test \ dumpio.test \ dup.test \ dup2.test \ @@ -381,6 +384,7 @@ AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) $(srcdir)/run.sh EXTRA_DIST = init.sh run.sh match.awk \ caps.awk \ + count-f.expected \ dumpio.expected \ eventfd.expected \ fanotify_mark.expected \ diff --git a/tests/count-f.c b/tests/count-f.c new file mode 100644 index 00000000..6992b16b --- /dev/null +++ b/tests/count-f.c @@ -0,0 +1,102 @@ +/* + * This file is part of count-f strace test. + * + * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org> + * 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. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 "tests.h" +#include <assert.h> +#include <errno.h> +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/wait.h> +#include <unistd.h> + +#define N 32 +#define P 8 +#define T 4 + +static void * +thread(void *arg) +{ + unsigned int i; + + assert(chdir(".") == 0); + for (i = 0; i < N; ++i) { + assert(chdir("") == -1); + assert(chdir(".") == 0); + } + + return NULL; +} + +static int +process(void) +{ + unsigned int i; + pthread_t t[T]; + + for (i = 0; i < T; ++i) { + errno = pthread_create(&t[i], NULL, thread, NULL); + if (errno) + perror_msg_and_fail("pthread_create"); + } + + for (i = 0; i < T; ++i) { + void *retval; + errno = pthread_join(t[i], &retval); + if (errno) + perror_msg_and_fail("pthread_join"); + } + + return 0; +} + +int +main(void) +{ + unsigned int i; + pid_t p[P]; + + for (i = 0; i < P; ++i) { + p[i] = fork(); + if (p[i] < 0) + perror_msg_and_fail("fork"); + if (!p[i]) + return process(); + } + for (i = 0; i < P; ++i) { + int s; + + assert(waitpid(p[i], &s, 0) == p[i]); + assert(WIFEXITED(s)); + if (WEXITSTATUS(s)) + return WEXITSTATUS(s); + } + + return 0; +} diff --git a/tests/count-f.expected b/tests/count-f.expected new file mode 100644 index 00000000..f61ba54e --- /dev/null +++ b/tests/count-f.expected @@ -0,0 +1 @@ +[ ]*[^ ]+ +[^ ]+ +[^ ]+ +2080 +1024 +chdir diff --git a/tests/count-f.test b/tests/count-f.test new file mode 100755 index 00000000..67515efa --- /dev/null +++ b/tests/count-f.test @@ -0,0 +1,11 @@ +#!/bin/sh + +# Check whether -c counts through forks and clones properly + +. "${srcdir=.}/init.sh" + +run_prog +run_strace -q -f -c $args +match_grep + +exit 0 -- 2.40.0