blob: 8f4bd5bcce54507f3e4130b4dc5e497e64fe594e [file] [log] [blame]
subrata_modak1da30732009-05-21 18:47:14 +00001/******************************************************************************/
Garrett Cooperc5ed3e92010-11-22 15:13:01 -08002/* Copyright (c) Crackerjack Project., 2007 */
3/* */
subrata_modak1da30732009-05-21 18:47:14 +00004/* This program is free software; you can redistribute it and/or modify */
5/* it under the terms of the GNU General Public License as published by */
Garrett Cooperc5ed3e92010-11-22 15:13:01 -08006/* the Free Software Foundation; either version 2 of the License, or */
7/* (at your option) any later version. */
8/* */
9/* This program is distributed in the hope that it will be useful, */
10/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
11/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */
12/* the GNU General Public License for more details. */
13/* */
14/* You should have received a copy of the GNU General Public License */
15/* along with this program; if not, write to the Free Software */
Wanlong Gao4548c6c2012-10-19 18:03:36 +080016/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080017/* */
subrata_modak1da30732009-05-21 18:47:14 +000018/******************************************************************************/
19/******************************************************************************/
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080020/* */
21/* File: tkill02.c */
22/* */
23/* Description: This tests the tkill() syscall */
24/* */
25/* Usage: <for command-line> */
26/* tkill02 [-c n] [-e][-i n] [-I x] [-p x] [-t] */
27/* where, -c n : Run n copies concurrently. */
28/* -e : Turn on errno logging. */
29/* -i n : Execute test n times. */
30/* -I x : Execute test for x seconds. */
31/* -P x : Pause for x seconds between iterations. */
32/* -t : Turn on syscall timing. */
33/* */
34/* Total Tests: 1 */
35/* */
36/* Test Name: tkill02 */
37/* History: Porting from Crackerjack to LTP is done by */
38/* Manas Kumar Nayak maknayak@in.ibm.com> */
subrata_modak1da30732009-05-21 18:47:14 +000039/******************************************************************************/
40
41#include <stdio.h>
42#include <stdlib.h>
43#include <errno.h>
44#include <unistd.h>
45#include <signal.h>
46#include <sys/syscall.h>
47
subrata_modak1da30732009-05-21 18:47:14 +000048/* Harness Specific Include Files. */
49#include "test.h"
50#include "usctest.h"
51#include "linux_syscall_numbers.h"
52
53/* Extern Global Variables */
subrata_modak1da30732009-05-21 18:47:14 +000054
55/* Global Variables */
Wanlong Gao354ebb42012-12-07 10:10:04 +080056char *TCID = "tkill02"; /* Test program identifier. */
57int testno;
subrata_modak1da30732009-05-21 18:47:14 +000058
59/* Extern Global Functions */
60/******************************************************************************/
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080061/* */
62/* Function: cleanup */
63/* */
subrata_modak1da30732009-05-21 18:47:14 +000064/* Description: Performs all one time clean up for this test on successful */
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080065/* completion, premature exit or failure. Closes all temporary */
66/* files, removes all temporary directories exits the test with */
67/* appropriate return code by calling tst_exit() function. */
68/* */
69/* Input: None. */
70/* */
71/* Output: None. */
72/* */
subrata_modak1da30732009-05-21 18:47:14 +000073/* Return: On failure - Exits calling tst_exit(). Non '0' return code. */
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080074/* On success - Exits calling tst_exit(). With '0' return code. */
75/* */
subrata_modak1da30732009-05-21 18:47:14 +000076/******************************************************************************/
Wanlong Gao354ebb42012-12-07 10:10:04 +080077extern void cleanup()
78{
Garrett Cooper2c282152010-12-16 00:55:50 -080079
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080080 TEST_CLEANUP;
81 tst_rmdir();
subrata_modak1da30732009-05-21 18:47:14 +000082}
83
84/* Local Functions */
85/******************************************************************************/
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080086/* */
87/* Function: setup */
88/* */
subrata_modak1da30732009-05-21 18:47:14 +000089/* Description: Performs all one time setup for this test. This function is */
Garrett Cooperc5ed3e92010-11-22 15:13:01 -080090/* typically used to capture signals, create temporary dirs */
91/* and temporary files that may be used in the course of this */
92/* test. */
93/* */
94/* Input: None. */
95/* */
96/* Output: None. */
97/* */
98/* Return: On failure - Exits by calling cleanup(). */
99/* On success - returns 0. */
100/* */
subrata_modak1da30732009-05-21 18:47:14 +0000101/******************************************************************************/
Wanlong Gao354ebb42012-12-07 10:10:04 +0800102void setup()
103{
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800104 /* Capture signals if any */
105 /* Create temporary directories */
106 TEST_PAUSE;
107 tst_tmpdir();
subrata_modak1da30732009-05-21 18:47:14 +0000108}
109
110struct test_case_t {
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800111 int tid;
112 int exp_errno;
subrata_modak1da30732009-05-21 18:47:14 +0000113} test_cases[] = {
Wanlong Gao354ebb42012-12-07 10:10:04 +0800114 {
115 -1, EINVAL}, {
116 99999, ESRCH}
subrata_modak1da30732009-05-21 18:47:14 +0000117};
118
Garrett Cooper53740502010-12-16 00:04:01 -0800119int TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]);
120
Wanlong Gao354ebb42012-12-07 10:10:04 +0800121int main(int ac, char **av)
122{
Garrett Cooper53740502010-12-16 00:04:01 -0800123 int i;
subrata_modak1da30732009-05-21 18:47:14 +0000124
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800125 setup();
subrata_modak1da30732009-05-21 18:47:14 +0000126
Garrett Cooper53740502010-12-16 00:04:01 -0800127 for (i = 0; i < TST_TOTAL; i++) {
subrata_modak1da30732009-05-21 18:47:14 +0000128
Jan Stancek359980f2013-02-15 10:16:05 +0100129 TEST(ltp_syscall(__NR_tkill, test_cases[i].tid, SIGUSR1));
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800130
Garrett Cooper53740502010-12-16 00:04:01 -0800131 if (TEST_RETURN == -1) {
Wanlong Gao354ebb42012-12-07 10:10:04 +0800132 if (TEST_ERRNO == test_cases[i].exp_errno) {
133 tst_resm(TPASS | TTERRNO,
134 "tkill(%d, SIGUSR1) failed as expected",
135 test_cases[i].tid);
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800136 } else {
Wanlong Gao354ebb42012-12-07 10:10:04 +0800137 tst_brkm(TFAIL | TTERRNO, cleanup,
138 "tkill(%d, SIGUSR1) failed unexpectedly",
139 test_cases[i].tid);
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800140 }
Garrett Cooper53740502010-12-16 00:04:01 -0800141 } else {
142 tst_brkm(TFAIL, cleanup,
Wanlong Gao354ebb42012-12-07 10:10:04 +0800143 "tkill(%d) succeeded unexpectedly",
144 test_cases[i].tid);
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800145 }
146 }
subrata_modak1da30732009-05-21 18:47:14 +0000147 cleanup();
Garrett Cooperc5ed3e92010-11-22 15:13:01 -0800148 tst_exit();
Chris Dearmanec6edca2012-10-17 19:54:01 -0700149}