Skip to content

Commit 6efe969

Browse files
radolinpevik
authored andcommitted
Convert dup02 to new API and clean up
Signed-off-by: Radoslav Kolev <[email protected]> Reviewed-by: Petr Vorel <[email protected]>
1 parent 123e6db commit 6efe969

File tree

1 file changed

+44
-165
lines changed
  • testcases/kernel/syscalls/dup

1 file changed

+44
-165
lines changed

testcases/kernel/syscalls/dup/dup02.c

Lines changed: 44 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -1,179 +1,58 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
12
/*
23
* Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
4+
* Copyright (c) 2020 SUSE LLC
35
*
4-
* This program is free software; you can redistribute it and/or modify it
5-
* under the terms of version 2 of the GNU General Public License as
6-
* published by the Free Software Foundation.
7-
*
8-
* This program is distributed in the hope that it would be useful, but
9-
* WITHOUT ANY WARRANTY; without even the implied warranty of
10-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11-
*
12-
* Further, this software is distributed without any warranty that it is
13-
* free of the rightful claim of any third person regarding infringement
14-
* or the like. Any license provided herein, whether implied or
15-
* otherwise, applies only to this software file. Patent licenses, if
16-
* any, provided herein do not apply to combinations of this program with
17-
* other software, or any other product whatsoever.
18-
*
19-
* You should have received a copy of the GNU General Public License along
20-
* with this program; if not, write the Free Software Foundation, Inc.,
21-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22-
*
23-
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24-
* Mountain View, CA 94043, or:
25-
*
26-
* http://www.sgi.com
27-
*
28-
* For further information regarding this notice, see:
29-
*
30-
* http://oss.sgi.com/projects/GenInfo/NoticeExplan/
6+
* 03/30/1992 AUTHOR: Richard Logan CO-PILOT: William Roske
317
*
328
*/
33-
/* $Id: dup02.c,v 1.6 2009/10/13 14:00:46 subrata_modak Exp $ */
34-
/**********************************************************
35-
*
36-
* OS Test - Silicon Graphics, Inc.
37-
*
38-
* TEST IDENTIFIER : dup02
39-
*
40-
* EXECUTED BY : anyone
41-
*
42-
* TEST TITLE : Negative test for dup(2) with bad fd.
43-
*
44-
* PARENT DOCUMENT : usctpl01
45-
*
46-
* TEST CASE TOTAL : 2
47-
*
48-
* WALL CLOCK TIME : 1
49-
*
50-
* CPU TYPES : ALL
51-
*
52-
* AUTHOR : Richard Logan
53-
*
54-
* CO-PILOT : William Roske
55-
*
56-
* DATE STARTED : 06/94
57-
*
58-
* INITIAL RELEASE : UNICOS 7.0
59-
*
60-
* TEST CASES
61-
*
62-
* 1-?.) dup(2) returns -1 with errno set to EBADF...(See Description)
63-
*
64-
* INPUT SPECIFICATIONS
65-
* The standard options for system call tests are accepted.
66-
* (See the parse_opts(3) man page).
67-
*
68-
* OUTPUT SPECIFICATIONS
69-
* Standard tst_res formatted output
70-
*$
71-
* DURATION
72-
* Terminates - with frequency and infinite modes.
73-
*
74-
* SIGNALS
75-
* Uses SIGUSR1 to pause before test if option set.
76-
* (See the parse_opts(3) man page).
77-
*
78-
* RESOURCES
79-
* None
80-
*
81-
* ENVIRONMENTAL NEEDS
82-
* No run-time environmental needs.
83-
*
84-
* SPECIAL PROCEDURAL REQUIREMENTS
85-
* None
86-
*
87-
* INTERCASE DEPENDENCIES
88-
* None
89-
*
90-
* DETAILED DESCRIPTION
91-
*
92-
* Setup:
93-
* Setup signal handling.
94-
* Pause for SIGUSR1 if option specified.
95-
*
96-
* Test:
97-
* Loop if the proper options are given.
98-
* Loop through the test cases
99-
* Execute system call
100-
* Check return code, if system call failed (return=-1)
101-
* if doing functional check
102-
* check if errno set correctly, report results
103-
* Otherwise, Issue a FAIL message.
104-
*
105-
* Cleanup:
106-
* Print errno log and/or timing stats if options given
107-
*
108-
*
109-
*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
110-
111-
#include <sys/types.h>
112-
#include <fcntl.h>
113-
#include <errno.h>
114-
#include <string.h>
115-
#include <signal.h>
116-
#include "test.h"
117-
#include "safe_macros.h"
118-
119-
void setup();
120-
void cleanup();
121-
122-
char *TCID = "dup02";
123-
int TST_TOTAL = 2;
124-
125-
int Fds[] = { -1, 1500 };
126-
127-
int main(int ac, char **av)
9+
/*\
10+
* [DESCRIPTION]
11+
* Negative test for dup(2) with bad fds.
12+
*
13+
* [ALGORITHM]
14+
* Call dup(2) with invalid argument and make sure it returns -1 with errno set
15+
* to EBADF.
16+
\*/
17+
18+
#include "tst_test.h"
19+
20+
static struct tcase {
21+
int fd;
22+
int expected_errno;
23+
} tcases[] = {
24+
{-1, EBADF},
25+
{1500, EBADF},
26+
};
27+
28+
static void run(unsigned int n)
12829
{
129-
int lc;
130-
int nfds = sizeof(Fds) / sizeof(int);
131-
int ind;
132-
133-
tst_parse_opts(ac, av, NULL, NULL);
134-
135-
setup();
30+
struct tcase *tc = &tcases[n];
13631

137-
for (lc = 0; TEST_LOOPING(lc); lc++) {
32+
TEST(dup(tc->fd));
13833

139-
tst_count = 0;
140-
141-
for (ind = 0; ind < nfds; ind++) {
142-
143-
TEST(dup(Fds[ind]));
144-
145-
if (TEST_RETURN == -1) {
146-
if (TEST_ERRNO == EBADF)
147-
tst_resm(TPASS,
148-
"dup failed as expected "
149-
"with EBADF");
150-
else
151-
tst_resm(TFAIL | TTERRNO,
152-
"dup failed unexpectedly");
153-
} else {
154-
tst_resm(TFAIL, "dup succeeded unexpectedly");
34+
if (TST_RET < -1) {
35+
tst_res(TFAIL | TTERRNO, "Invalid dup() return value %ld",
36+
TST_RET);
37+
return;
38+
}
15539

156-
SAFE_CLOSE(cleanup, TEST_RETURN);
157-
}
40+
if (TST_RET == -1) {
41+
if (tc->expected_errno == TST_ERR) {
42+
tst_res(TPASS | TTERRNO, "dup(%d) failed as expected",
43+
tc->fd);
44+
} else {
45+
tst_res(TFAIL | TTERRNO, "dup(%d) failed unexpectedly",
46+
tc->fd);
15847
}
48+
return;
15949
}
16050

161-
cleanup();
162-
tst_exit();
51+
tst_res(TFAIL, "dup(%d) succeeded unexpectedly", tc->fd);
52+
SAFE_CLOSE(TST_RET);
16353
}
16454

165-
void setup(void)
166-
{
167-
168-
tst_sig(FORK, DEF_HANDLER, cleanup);
169-
170-
TEST_PAUSE;
171-
172-
tst_tmpdir();
173-
174-
}
175-
176-
void cleanup(void)
177-
{
178-
tst_rmdir();
179-
}
55+
static struct tst_test test = {
56+
.test = run,
57+
.tcnt = ARRAY_SIZE(tcases),
58+
};

0 commit comments

Comments
 (0)