All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
To: ltp-list@lists.sourceforge.net
Subject: [LTP] [PATCH v2] dup3(2): add EINVAL error number test
Date: Thu, 21 Nov 2013 16:22:01 +0800	[thread overview]
Message-ID: <528DC2A9.6060105@cn.fujitsu.com> (raw)


add EINVAL error number test

Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
---
 runtest/syscalls                         |   1 +
 testcases/kernel/syscalls/.gitignore     |   1 +
 testcases/kernel/syscalls/dup3/dup3_02.c | 119 +++++++++++++++++++++++++++++++
 3 files changed, 121 insertions(+)
 create mode 100644 testcases/kernel/syscalls/dup3/dup3_02.c

diff --git a/runtest/syscalls b/runtest/syscalls
index fa01ff7..e7e8a9a 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -118,6 +118,7 @@ dup204 dup204
 dup205 dup205
 
 dup3_01 dup3_01
+dup3_02 dup3_02
 
 epoll_create1_01 epoll_create1_01
 epoll01 epoll-ltp
diff --git a/testcases/kernel/syscalls/.gitignore b/testcases/kernel/syscalls/.gitignore
index 0130a53..e100dd9 100644
--- a/testcases/kernel/syscalls/.gitignore
+++ b/testcases/kernel/syscalls/.gitignore
@@ -96,6 +96,7 @@
 /dup2/dup204
 /dup2/dup205
 /dup3/dup3_01
+/dup3/dup3_02
 /epoll/epoll-ltp
 /epoll_create1/epoll_create1_01
 /eventfd/eventfd01
diff --git a/testcases/kernel/syscalls/dup3/dup3_02.c b/testcases/kernel/syscalls/dup3/dup3_02.c
new file mode 100644
index 0000000..962cc55
--- /dev/null
+++ b/testcases/kernel/syscalls/dup3/dup3_02.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2013 Fujitsu Ltd.
+ * Author: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ * Description:
+ * Verify that,
+ *  1. dup3() fails with -1 return value and sets errno to EINVAL
+ *     if flags contain an invalid value or oldfd was equal to newfd.
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/types.h>
+
+#include "test.h"
+#include "usctest.h"
+#include "safe_macros.h"
+#include "linux_syscall_numbers.h"
+
+
+static void setup(void);
+static void cleanup(void);
+
+#define INVALID_FLAG	-1
+
+static int old_fd;
+static int new_fd;
+
+static struct test_case_t {
+	int *oldfd;
+	int *newfd;
+	int flags;
+	int exp_errno;
+} test_cases[] = {
+	{&old_fd, &old_fd, O_CLOEXEC, EINVAL},
+	{&old_fd, &old_fd, 0, EINVAL},
+	{&old_fd, &new_fd, INVALID_FLAG, EINVAL}
+};
+
+char *TCID = "dup3_02";
+int TST_TOTAL = ARRAY_SIZE(test_cases);
+static int exp_enos[] = {EINVAL, 0};
+
+int main(int ac, char **av)
+{
+	int lc;
+	int i;
+
+
+	setup();
+
+	TEST_EXP_ENOS(exp_enos);
+
+	for (lc = 0; TEST_LOOPING(lc); lc++) {
+		tst_count = 0;
+
+		for (i = 0; i < TST_TOTAL; i++) {
+			TEST(ltp_syscall(__NR_dup3, *(test_cases[i].oldfd),
+			     *(test_cases[i].newfd), test_cases[i].flags));
+
+			if (TEST_RETURN != -1) {
+				tst_resm(TFAIL, "dup3 succeeded unexpectedly");
+				continue;
+			}
+
+			if (TEST_ERRNO == test_cases[i].exp_errno) {
+				tst_resm(TPASS | TTERRNO,
+					 "dup3 failed as expected");
+			} else {
+				tst_resm(TFAIL | TTERRNO,
+					 "dup3 failed unexpectedly; expected:",
+					 "%d - %s", test_cases[i].exp_errno,
+					 strerror(test_cases[i].exp_errno));
+			}
+		}
+	}
+
+	cleanup();
+	tst_exit();
+}
+
+static void setup(void)
+{
+	tst_sig(NOFORK, DEF_HANDLER, cleanup);
+
+	tst_tmpdir();
+
+	TEST_PAUSE;
+
+	old_fd = SAFE_CREAT(cleanup, "testeinval.file", 0644);
+	new_fd = -1;
+}
+
+static void cleanup(void)
+{
+	TEST_CLEANUP;
+
+	SAFE_CLOSE(cleanup, old_fd);
+
+	tst_rmdir();
+}
-- 
1.8.2.1



------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

             reply	other threads:[~2013-11-21  8:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-21  8:22 Xiaoguang Wang [this message]
2013-11-21  9:03 ` [LTP] [PATCH v2] dup3(2): add EINVAL error number test chrubis

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=528DC2A9.6060105@cn.fujitsu.com \
    --to=wangxg.fnst@cn.fujitsu.com \
    --cc=ltp-list@lists.sourceforge.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.