* [LTP] [PATCH v2] llseek/llseek03.c: add SEEK_CUR, SEEK_END flag test
@ 2014-02-18 7:01 Xiaoguang Wang
2014-02-20 6:19 ` Wanlong Gao
0 siblings, 1 reply; 2+ messages in thread
From: Xiaoguang Wang @ 2014-02-18 7:01 UTC (permalink / raw)
To: ltp-list
create a new case to test SEEK_CUR, SEEK_END flag for llseek(2)
Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
---
runtest/ltplite | 1 +
runtest/stress.part3 | 1 +
runtest/syscalls | 1 +
testcases/kernel/syscalls/.gitignore | 1 +
testcases/kernel/syscalls/llseek/llseek03.c | 187 ++++++++++++++++++++++++++++
5 files changed, 191 insertions(+)
create mode 100644 testcases/kernel/syscalls/llseek/llseek03.c
diff --git a/runtest/ltplite b/runtest/ltplite
index de01a94..c32a033 100644
--- a/runtest/ltplite
+++ b/runtest/ltplite
@@ -386,6 +386,7 @@ listen01 listen01
llseek01 llseek01
llseek02 llseek02
+llseek03 llseek03
lseek01 lseek01
lseek02 lseek02
diff --git a/runtest/stress.part3 b/runtest/stress.part3
index 4114205..276adcb 100644
--- a/runtest/stress.part3
+++ b/runtest/stress.part3
@@ -319,6 +319,7 @@ listen01 listen01
llseek01 llseek01
llseek02 llseek02
+llseek03 llseek03
lseek01 lseek01
lseek02 lseek02
diff --git a/runtest/syscalls b/runtest/syscalls
index b9c1927..010bfd9 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -492,6 +492,7 @@ listen01 listen01
llseek01 llseek01
llseek02 llseek02
+llseek03 llseek03
lseek01 lseek01
lseek02 lseek02
diff --git a/testcases/kernel/syscalls/.gitignore b/testcases/kernel/syscalls/.gitignore
index b622244..a5214ff 100644
--- a/testcases/kernel/syscalls/.gitignore
+++ b/testcases/kernel/syscalls/.gitignore
@@ -450,6 +450,7 @@
/listen/listen01
/llseek/llseek01
/llseek/llseek02
+/llseek/llseek03
/lseek/lseek01
/lseek/lseek02
/lseek/lseek03
diff --git a/testcases/kernel/syscalls/llseek/llseek03.c b/testcases/kernel/syscalls/llseek/llseek03.c
new file mode 100644
index 0000000..02f5d95
--- /dev/null
+++ b/testcases/kernel/syscalls/llseek/llseek03.c
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2014 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. llseek() succeeds to set the file pointer position to the current
+ * specified location, when 'whence' value is set to SEEK_CUR and the data
+ * read from the specified location should match the expected data.
+ * 2. llseek() succeeds to set the file pointer position to the end of
+ * the file when 'whence' value set to SEEK_END and any attempts to read
+ * from that position should return 0.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#include <unistd.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <utime.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <inttypes.h>
+
+#include "test.h"
+#include "usctest.h"
+#include "safe_macros.h"
+
+#define TEST_FILE "testfile"
+
+static void setup(void);
+static void cleanup(void);
+
+static void testfunc_seekcur(void);
+static void testfunc_seekend(void);
+
+static void (*testfunc[])(void) = { testfunc_seekcur, testfunc_seekend };
+
+char *TCID = "llseek03";
+int TST_TOTAL = 2;
+
+static size_t file_size;
+
+int main(int ac, char **av)
+{
+ int i, lc;
+ char *msg;
+
+ msg = parse_opts(ac, av, NULL, NULL);
+ if (msg != NULL)
+ tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
+
+ setup();
+
+ for (lc = 0; TEST_LOOPING(lc); lc++) {
+ tst_count = 0;
+
+ for (i = 0; i < TST_TOTAL; i++)
+ (*testfunc[i])();
+ }
+
+ cleanup();
+ tst_exit();
+}
+
+static void setup(void)
+{
+ int fd;
+ char write_buf[BUFSIZ];
+ struct stat stat_buf;
+
+ tst_sig(NOFORK, DEF_HANDLER, cleanup);
+
+ tst_tmpdir();
+
+ TEST_PAUSE;
+
+ if (strcpy(write_buf, "abcdefgh") != write_buf)
+ tst_brkm(TBROK | TERRNO, NULL, "strcpy failed");
+
+ fd = SAFE_CREAT(cleanup, TEST_FILE, 0644);
+
+ SAFE_WRITE(cleanup, 1, fd, write_buf, strlen(write_buf));
+
+ SAFE_FSTAT(cleanup, fd, &stat_buf);
+
+ SAFE_CLOSE(cleanup, fd);
+
+ file_size = stat_buf.st_size;
+}
+
+static void testfunc_seekcur(void)
+{
+ int fd;
+ static char read_buf[BUFSIZ];
+
+ /* reopen TEST_FILE and file offset will be 0 */
+ fd = SAFE_OPEN(cleanup, TEST_FILE, O_RDONLY);
+
+ /* after read, file offset will be 4 */
+ SAFE_READ(cleanup, 1, fd, read_buf, 4);
+
+ TEST(lseek64(fd, (loff_t) 1, SEEK_CUR));
+
+ if (TEST_RETURN == (loff_t) -1) {
+ tst_resm(TFAIL | TTERRNO, "llseek failed on %s ", TEST_FILE);
+ goto cleanup_seekcur;
+ }
+
+ if (TEST_RETURN != 5) {
+ tst_resm(TFAIL, "llseek return a incorrect file offset");
+ goto cleanup_seekcur;
+ }
+
+ memset(read_buf, 0, sizeof(read_buf));
+
+ /* the expected characters are "fgh" */
+ SAFE_READ(cleanup, 1, fd, read_buf, 3);
+
+ if (strcmp(read_buf, "fgh"))
+ tst_resm(TFAIL, "test SEEK_SET for llseek failed");
+ else
+ tst_resm(TPASS, "test SEEK_SET for llseek success");
+
+cleanup_seekcur:
+ SAFE_CLOSE(cleanup, fd);
+}
+
+
+static void testfunc_seekend(void)
+{
+ int fd;
+ ssize_t nread;
+ static char read_buf[BUFSIZ];
+
+ /* reopen TEST_FILE and file offset will be 0 */
+ fd = SAFE_OPEN(cleanup, TEST_FILE, O_RDONLY);
+
+ TEST(lseek64(fd, (loff_t) 0, SEEK_END));
+
+ if (TEST_RETURN == (loff_t) -1) {
+ tst_resm(TFAIL | TTERRNO, "llseek failed on %s ", TEST_FILE);
+ goto cleanup_seekend;
+ }
+
+ if (TEST_RETURN != file_size) {
+ tst_resm(TFAIL, "llseek return a incorrect file offset");
+ goto cleanup_seekend;
+ }
+
+ memset(read_buf, 0, sizeof(read_buf));
+
+ nread = SAFE_READ(cleanup, 0, fd, read_buf, file_size);
+ if (nread > 0)
+ tst_resm(TFAIL, "test SEEK_END for llseek failed");
+ else
+ tst_resm(TPASS, "test SEEK_END for llseek success");
+
+cleanup_seekend:
+ SAFE_CLOSE(cleanup, fd);
+}
+
+static void cleanup(void)
+{
+ TEST_CLEANUP;
+
+ tst_rmdir();
+}
--
1.8.2.1
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-02-20 6:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-18 7:01 [LTP] [PATCH v2] llseek/llseek03.c: add SEEK_CUR, SEEK_END flag test Xiaoguang Wang
2014-02-20 6:19 ` Wanlong Gao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox