From: "Jiří Paleček" <jpalecek@web.de>
To: subrata@linux.vnet.ibm.com
Cc: "ltp-list@lists.sourceforge.net" <ltp-list@lists.sourceforge.net>
Subject: Re: [LTP] New test?
Date: Mon, 26 Oct 2009 01:43:41 +0100 [thread overview]
Message-ID: <op.u2dtmvt9u2flwt@debian> (raw)
In-Reply-To: <1255890120.5359.18.camel@subratamodak.linux.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 2024 bytes --]
On Sun, 18 Oct 2009 20:22:00 +0200, Subrata Modak
<subrata@linux.vnet.ibm.com> wrote:
> Jiri,
>
> Any further thoughts on this ?
Yes, see the attachment.
I created the directories for the different tests (rt_sigtimedwait,
sigwaitinfo etc.), but to avoid copy-pasting the code, they share the same
source. Please, tell me if that is OK.
Regards
Jiri Palecek
> On Tue, 2009-10-13 at 17:43 +0530, Subrata Modak wrote:
>> Hey Jiri,
>>
>> On Tue, 2009-09-29 at 16:28 +0200, Jiří Paleček wrote:
>> > Hello,
>> >
>> > I've decided to create a test for the rt_sigwaitinfo syscall. There
>> are
>> > other functions with similar interface (defined by POSIX) in libc -
>> > particularly sigwait, sigtimedwait and sigwaitinfo. The rt_sigwaitinfo
>>
>> The sigwait, sigtimedwait and sigwaitinfo testcases are not in LTP.
>>
>> > test could easily tests these too, so I wonder whether we want to test
>> > these too, and if yes, whether these tests can be located in the same
>> > executable.
>>
>> If you already have the logic to write the above tests, then please
>> create separate tests for sigwait, sigtimedwait and sigwaitinfo
>> (separate directories as well), and separate for rt_sigwaitinfo syscall.
>>
>> Regards--
>> Subrata
>>
>> >
>> > Regards
>> > Jiri Palecek
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA
>> is the only developer event you need to attend this year. Jumpstart your
>> developing skills, take BlackBerry mobile applications to market and
>> stay
>> ahead of the curve. Join us from November 9 - 12, 2009. Register now!
>> http://p.sf.net/sfu/devconference
>> _______________________________________________
>> Ltp-list mailing list
>> Ltp-list@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[-- Attachment #2: sigwaitinfo.patch --]
[-- Type: application/octet-stream, Size: 19774 bytes --]
commit 18b4011a52dc915f1780505c6a529d8aed21aea9
Author: Jiri Palecek <jirka@debian.(none)>
Date: Tue Oct 6 23:26:44 2009 +0200
New sigwaitinfo test
diff --git a/testcases/kernel/syscalls/rt_sigtimedwait/Makefile b/testcases/kernel/syscalls/rt_sigtimedwait/Makefile
new file mode 100644
index 0000000..b0d672b
--- /dev/null
+++ b/testcases/kernel/syscalls/rt_sigtimedwait/Makefile
@@ -0,0 +1,34 @@
+#
+# Copyright (c) International Business Machines Corp., 2009
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+CFLAGS += -I../../../../include -Wall -O2 -DTEST_RT_SIGTIMEDWAIT
+LDLIBS += -L../../../../lib -lltp
+
+SRCS = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS)) rt_sigtimedwait01
+
+all: $(TARGETS)
+
+rt_sigtimedwait01.o: ../sigwaitinfo/sigwaitinfo01.c
+ $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $^
+
+install:
+ @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+ rm -f $(TARGETS)
diff --git a/testcases/kernel/syscalls/sigtimedwait/Makefile b/testcases/kernel/syscalls/sigtimedwait/Makefile
new file mode 100644
index 0000000..a750d7a
--- /dev/null
+++ b/testcases/kernel/syscalls/sigtimedwait/Makefile
@@ -0,0 +1,34 @@
+#
+# Copyright (c) International Business Machines Corp., 2009
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+CFLAGS += -I../../../../include -Wall -O2 -DTEST_SIGTIMEDWAIT
+LDLIBS += -L../../../../lib -lltp
+
+SRCS = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS)) sigtimedwait01
+
+all: $(TARGETS)
+
+sigtimedwait01.o: ../sigwaitinfo/sigwaitinfo01.c
+ $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $^
+
+install:
+ @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+ rm -f $(TARGETS)
diff --git a/testcases/kernel/syscalls/sigwait/Makefile b/testcases/kernel/syscalls/sigwait/Makefile
new file mode 100644
index 0000000..2c3a465
--- /dev/null
+++ b/testcases/kernel/syscalls/sigwait/Makefile
@@ -0,0 +1,34 @@
+#
+# Copyright (c) International Business Machines Corp., 2009
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+CFLAGS += -I../../../../include -Wall -O2 -DTEST_SIGWAIT
+LDLIBS += -L../../../../lib -lltp
+
+SRCS = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS)) sigwait01
+
+all: $(TARGETS)
+
+sigwait01.o: ../sigwaitinfo/sigwaitinfo01.c
+ $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $^
+
+install:
+ @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+ rm -f $(TARGETS)
diff --git a/testcases/kernel/syscalls/sigwaitinfo/Makefile b/testcases/kernel/syscalls/sigwaitinfo/Makefile
new file mode 100644
index 0000000..299d028
--- /dev/null
+++ b/testcases/kernel/syscalls/sigwaitinfo/Makefile
@@ -0,0 +1,31 @@
+#
+# Copyright (c) International Business Machines Corp., 2009
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+CFLAGS += -I../../../../include -Wall -O2 -DTEST_SIGWAITINFO
+LDLIBS += -L../../../../lib -lltp
+
+SRCS = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS))
+
+all: $(TARGETS)
+
+install:
+ @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+ rm -f $(TARGETS)
diff --git a/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
new file mode 100644
index 0000000..ff9ca8f
--- /dev/null
+++ b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
@@ -0,0 +1,435 @@
+/*
+ * Copyright (c) Jiri Palecek<jpalecek@web.de>, 2009
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like. Any license provided herein, whether implied or
+ * otherwise, applies only to this software file. Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston MA 02111-1307, USA.
+ */
+#include "test.h"
+#include "usctest.h"
+#include <errno.h>
+#include <signal.h>
+#include "../utils/include_j_h.h"
+#include "../utils/common_j_h.c"
+#include <limits.h>
+#include "linux_syscall_numbers.h"
+
+#define SUCCEED_OR_DIE(syscall, message, ...) \
+ (errno = 0, \
+ ({int ret=syscall(__VA_ARGS__); \
+ if(ret==-1) \
+ tst_brkm(TBROK|TERRNO, cleanup, message); \
+ ret;}))
+
+/* Report success iff TEST_RETURN and TEST_ERRNO are equal to
+ exp_return and exp_errno, resp., and cond is true. If cond is not
+ true, report condition_errmsg
+*/
+static void report_success_cond(const char *func, const char* file, int line,
+ long exp_return, int exp_errno, int condition, char* condition_errmsg)
+{
+ if (exp_return == TEST_RETURN && (exp_return != -1 || exp_errno == TEST_ERRNO))
+ if(condition)
+ tst_resm(TPASS, "Test passed");
+ else
+ tst_resm(TFAIL, "%s (%s: %d): %s", func, file, line, condition_errmsg);
+ else if(TEST_RETURN != -1)
+ tst_resm(TFAIL, "%s (%s: %d): Unexpected return value; expected %ld, got %ld",
+ func, file, line, exp_return, TEST_RETURN);
+ else
+ tst_resm(TFAIL|TTERRNO, "%s (%s: %d): Unexpected failure", func, file, line);
+}
+
+#define REPORT_SUCCESS_COND(exp_return, exp_errno, condition, condition_errmsg) \
+ report_success_cond(__FUNCTION__, __FILE__, __LINE__, exp_return, exp_errno, condition, condition_errmsg);
+
+/* Report success iff TEST_RETURN and TEST_ERRNO are equal to
+ exp_return and exp_errno, resp.
+*/
+#define REPORT_SUCCESS(exp_return, exp_errno) \
+ REPORT_SUCCESS_COND(exp_return, exp_errno, 1, "");
+
+static void cleanup(void) LTP_ATTRIBUTE_NORETURN;
+
+static void empty_handler(int sig)
+{
+}
+
+static void setup(void)
+{
+ tst_sig(FORK, DEF_HANDLER, cleanup);
+ signal(SIGUSR1, empty_handler);
+ signal(SIGALRM, empty_handler);
+ signal(SIGUSR2, SIG_IGN);
+
+ TEST_PAUSE;
+}
+
+static void cleanup(void)
+{
+ TEST_CLEANUP;
+
+ tst_exit();
+}
+
+typedef int (*swi_func)(const sigset_t* set, siginfo_t* info, struct timespec* timeout);
+typedef void (*test_func)(swi_func, int);
+
+static int my_sigwait(const sigset_t* set, siginfo_t* info, struct timespec* timeout)
+{
+ int ret;
+ int err=sigwait(set, &ret);
+
+ if(err == 0)
+ return ret;
+ errno = err;
+ return -1;
+}
+
+static int my_sigwaitinfo(const sigset_t* set, siginfo_t* info, struct timespec* timeout)
+{
+ return sigwaitinfo(set, info);
+}
+
+static int my_sigtimedwait(const sigset_t* set, siginfo_t* info, struct timespec* timeout)
+{
+ return sigtimedwait(set, info, timeout);
+}
+
+static int my_rt_sigtimedwait(const sigset_t* set, siginfo_t* info, struct timespec* timeout)
+{
+ /* The last argument is (number_of_signals)/(bits_per_byte), which are 64 and 8, resp. */
+ return syscall(__NR_rt_sigtimedwait, set, info, timeout, 8);
+}
+
+void test_empty_set(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs;
+ siginfo_t si;
+ pid_t child;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ /* Run a child that will wake us up */
+ child=create_sig_proc(100000, signo, UINT_MAX);
+
+ TEST(sigwaitinfo(&sigs, &si, NULL));
+ REPORT_SUCCESS(-1, EINTR);
+
+ kill(child, SIGTERM);
+}
+
+void test_timeout(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs;
+ siginfo_t si;
+ pid_t child;
+ struct timespec ts = { .tv_sec = 1 };
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+
+ /* Run a child that will wake us up */
+ child=create_sig_proc(100000, signo, UINT_MAX);
+
+ TEST(sigwaitinfo(&sigs, &si, &ts));
+ REPORT_SUCCESS(-1, EAGAIN);
+
+ kill(child, SIGTERM);
+}
+
+/* Note: sigwait-ing for a signal that is not blocked is unspecified
+ * by POSIX; but works for non-ignored signals under Linux
+ */
+void test_unmasked_matching(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs;
+ siginfo_t si;
+ pid_t child;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
+
+ /* Run a child that will wake us up */
+ child=create_sig_proc(100000, signo, UINT_MAX);
+
+ TEST(sigwaitinfo(&sigs, &si, NULL));
+ REPORT_SUCCESS_COND(signo, 0, si.si_pid==child && si.si_code==SI_USER && si.si_signo==signo, "Struct siginfo mismatch");
+
+ kill(child, SIGTERM);
+}
+
+void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs;
+ pid_t child;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
+ /* Run a child that will wake us up */
+ child=create_sig_proc(100000, signo, UINT_MAX);
+
+ TEST(sigwaitinfo(&sigs, NULL, NULL));
+ REPORT_SUCCESS(signo, 0);
+
+ kill(child, SIGTERM);
+}
+
+void test_masked_matching(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs, oldmask;
+ siginfo_t si;
+ pid_t child;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
+ /* let's not get interrupted by our dying child */
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);
+
+ SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs, &oldmask);
+
+ /* don't wait on a SIGCHLD */
+ SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);
+
+ /* Run a child that will wake us up */
+ child=create_sig_proc(0, signo, 1);
+
+ TEST(sigwaitinfo(&sigs, &si, NULL));
+ REPORT_SUCCESS_COND(signo, 0, si.si_pid==child && si.si_code==SI_USER && si.si_signo==signo, "Struct siginfo mismatch");
+
+ SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed", SIG_SETMASK, &oldmask, &oldmask);
+
+ Tst_count--;
+
+ if(sigismember(&oldmask, signo))
+ tst_resm(TPASS, "sigwaitinfo restored the original mask");
+ else
+ tst_resm(TFAIL, "sigwaitinfo failed to restore the original mask");
+}
+
+void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs, oldmask;
+ siginfo_t si;
+ pid_t child[2];
+
+ signo = SIGRTMIN+1;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo+1);
+ /* let's not get interrupted by our dying child */
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);
+
+ SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs, &oldmask);
+
+ /* don't wait on a SIGCHLD */
+ SUCCEED_OR_DIE(sigdelset, "sigdelset failed", &sigs, SIGCHLD);
+
+ /* Run a child that will wake us up */
+ child[0]=create_sig_proc(0, signo, 1);
+ child[1]=create_sig_proc(0, signo+1, 1);
+
+ /* Need to be sure both signals arrive at once */
+ sleep(1); /* we could have as well wait()-ed for both children... */
+
+ TEST(sigwaitinfo(&sigs, &si, NULL));
+ REPORT_SUCCESS_COND(signo, 0, si.si_pid==child[0] && si.si_code==SI_USER && si.si_signo==signo, "Struct siginfo mismatch");
+
+ /* eat the other signal */
+ Tst_count--;
+ TEST(sigwaitinfo(&sigs, &si, NULL));
+ REPORT_SUCCESS_COND(signo+1, 0, si.si_pid==child[1] && si.si_code==SI_USER && si.si_signo==signo+1, "Struct siginfo mismatch");
+
+ SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed", SIG_SETMASK, &oldmask, &oldmask);
+
+ Tst_count--;
+
+ if(sigismember(&oldmask, signo))
+ tst_resm(TPASS, "sigwaitinfo restored the original mask");
+ else
+ tst_resm(TFAIL, "sigwaitinfo failed to restore the original mask");
+}
+
+void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs, oldmask;
+ pid_t child;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
+ /* let's not get interrupted by our dying child */
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);
+
+ SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs, &oldmask);
+
+ /* don't wait on a SIGCHLD */
+ SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);
+
+ /* Run a child that will wake us up */
+ child=create_sig_proc(0, signo, 1);
+
+ TEST(sigwaitinfo(&sigs, NULL, NULL));
+ REPORT_SUCCESS(signo, 0);
+
+ SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed", SIG_SETMASK, &oldmask, &oldmask);
+
+ Tst_count--;
+
+ if(sigismember(&oldmask, signo))
+ tst_resm(TPASS, "sigwaitinfo restored the original mask");
+ else
+ tst_resm(TFAIL, "sigwaitinfo failed to restore the original mask");
+
+}
+
+void test_bad_address(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs, oldmask;
+ pid_t child;
+
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
+ /* let's not get interrupted by our dying child */
+ SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);
+
+ SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs, &oldmask);
+
+ /* don't wait on a SIGCHLD */
+ SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);
+
+ /* Run a child that will wake us up */
+ child=create_sig_proc(0, signo, 1);
+
+ TEST(sigwaitinfo(&sigs, (void*)1, NULL));
+ REPORT_SUCCESS(-1, EFAULT);
+
+ SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &oldmask, &oldmask);
+
+ kill(child, SIGTERM);
+}
+
+void test_bad_address2(swi_func sigwaitinfo, int signo)
+{
+ TEST(sigwaitinfo((void*)1, NULL, NULL));
+ REPORT_SUCCESS(-1, EFAULT);
+}
+
+void test_bad_address3(swi_func sigwaitinfo, int signo)
+{
+ sigset_t sigs;
+ SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
+
+ TEST(sigwaitinfo(&sigs, NULL, (void*)1));
+ REPORT_SUCCESS(-1, EFAULT);
+}
+
+struct test_desc {
+ test_func tf;
+ swi_func swi;
+ int signo;
+} tests[]={
+#if defined TEST_RT_SIGTIMEDWAIT
+ test_empty_set, my_rt_sigtimedwait, SIGUSR1,
+ test_unmasked_matching, my_rt_sigtimedwait, SIGUSR1,
+ test_masked_matching, my_rt_sigtimedwait, SIGUSR1,
+ test_unmasked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1,
+ test_masked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1,
+ test_bad_address, my_rt_sigtimedwait, SIGUSR1,
+ test_bad_address2, my_rt_sigtimedwait, SIGUSR1,
+ test_bad_address3, my_rt_sigtimedwait, SIGUSR1,
+ test_timeout, my_rt_sigtimedwait, 0,
+
+ /* Special cases */
+ /* 1: sigwaitinfo does respond to ignored signal */
+ test_masked_matching, my_rt_sigtimedwait, SIGUSR2,
+
+ /* 2: An ignored signal doesn't cause sigwaitinfo to return EINTR */
+ test_timeout, my_rt_sigtimedwait, SIGUSR2,
+
+ /* 3: The handler is not called when the signal is waited for by sigwaitinfo */
+ test_masked_matching, my_rt_sigtimedwait, SIGTERM,
+
+ /* 4: Simultaneous realtime signals are delivered in the order of increasing signal number */
+ test_masked_matching_rt, my_rt_sigtimedwait, -1,
+#endif
+#if defined TEST_SIGWAIT
+ test_unmasked_matching_noinfo, my_sigwait, SIGUSR1,
+ test_masked_matching_noinfo, my_sigwait, SIGUSR1,
+#endif
+#if defined TEST_SIGWAITINFO
+ test_empty_set, my_sigwaitinfo, SIGUSR1,
+ test_unmasked_matching, my_sigwaitinfo, SIGUSR1,
+ test_masked_matching, my_sigwaitinfo, SIGUSR1,
+ test_unmasked_matching_noinfo, my_sigwaitinfo, SIGUSR1,
+ test_masked_matching_noinfo, my_sigwaitinfo, SIGUSR1,
+ test_bad_address, my_sigwaitinfo, SIGUSR1,
+ test_bad_address2, my_sigwaitinfo, SIGUSR1,
+#endif
+#if defined TEST_SIGTIMEDWAIT
+ test_empty_set, my_sigtimedwait, SIGUSR1,
+ test_unmasked_matching, my_sigtimedwait, SIGUSR1,
+ test_masked_matching, my_sigtimedwait, SIGUSR1,
+ test_unmasked_matching_noinfo, my_sigtimedwait, SIGUSR1,
+ test_masked_matching_noinfo, my_sigtimedwait, SIGUSR1,
+ test_bad_address, my_sigtimedwait, SIGUSR1,
+ test_bad_address2, my_sigtimedwait, SIGUSR1,
+ test_bad_address3, my_sigtimedwait, SIGUSR1,
+ test_timeout, my_sigtimedwait, 0,
+#endif
+};
+
+#if defined TEST_SIGWAITINFO
+const char* TCID="sigwaitinfo01";
+#elif defined TEST_RT_SIGTIMEDWAIT
+const char* TCID="rt_sigtimedwait01";
+#elif defined TEST_SIGTIMEDWAIT
+const char* TCID="sigtimedwait01";
+#elif defined TEST_SIGWAIT
+const char* TCID="sigwait01";
+#endif
+
+extern int Tst_count;
+
+int TST_TOTAL = sizeof(tests)/sizeof(*tests);
+
+int main(int argc, char** argv)
+{
+ unsigned i;
+ int lc;
+ char* msg;
+
+ /* parse standard options */
+ if ((msg = parse_opts(argc, argv, (option_t *) NULL, NULL)) !=
+ (char *)NULL) {
+ tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+ /*NOT REACHED */
+ }
+
+ setup();
+
+ for(lc = 0; TEST_LOOPING(lc); ++lc) {
+ Tst_count = 0;
+
+ for(i=0; i<sizeof(tests)/sizeof(*tests); i++) {
+ alarm(10); /* arrange a 10 second timeout */
+ tests[i].tf(tests[i].swi, tests[i].signo);
+ }
+ alarm(0);
+ }
+
+ cleanup();
+}
[-- Attachment #3: Type: text/plain, Size: 399 bytes --]
------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
[-- Attachment #4: Type: text/plain, Size: 155 bytes --]
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next prev parent reply other threads:[~2009-10-25 23:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-29 14:28 [LTP] New test? Jiří Paleček
2009-10-13 12:13 ` Subrata Modak
2009-10-18 18:22 ` Subrata Modak
2009-10-26 0:43 ` Jiří Paleček [this message]
2009-10-26 3:49 ` Garrett Cooper
2009-10-26 17:03 ` Subrata Modak
2009-10-27 9:29 ` Jiří Paleček
2009-10-27 23:06 ` Garrett Cooper
2009-10-30 10:56 ` Jiří Paleček
2009-10-30 11:21 ` Garrett Cooper
2009-10-30 11:24 ` Garrett Cooper
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=op.u2dtmvt9u2flwt@debian \
--to=jpalecek@web.de \
--cc=ltp-list@lists.sourceforge.net \
--cc=subrata@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox