summaryrefslogtreecommitdiff
path: root/tests/sys_uio_test.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2015-08-26 13:27:43 -0700
committerElliott Hughes <enh@google.com>2015-08-26 14:48:55 -0700
commit6f4594d5dc61bb67978c44cd6eeb0e7bfb621c9b (patch)
tree9c925e99fe826914d93a6c1e00c5f62a8cd8c0a8 /tests/sys_uio_test.cpp
parent629ed517126b3be32f2b2e8b710e63358691c296 (diff)
Add preadv/pwritev.
Bug: http://b/12612572 Change-Id: I38ff2684d69bd0fe3f21b1d371b88fa60d5421cb
Diffstat (limited to 'tests/sys_uio_test.cpp')
-rw-r--r--tests/sys_uio_test.cpp54
1 files changed, 52 insertions, 2 deletions
diff --git a/tests/sys_uio_test.cpp b/tests/sys_uio_test.cpp
index c7af8a77c..569d4fbad 100644
--- a/tests/sys_uio_test.cpp
+++ b/tests/sys_uio_test.cpp
@@ -18,10 +18,60 @@
#include <sys/uio.h>
-TEST(sys_uio, process_vm_readv_ESRCH) {
+#include "TemporaryFile.h"
+
+TEST(sys_uio, readv_writev) {
+ TemporaryFile tf;
+
+ char buf1[] = "hello";
+ char buf2[] = "world";
+ iovec ios[] = { { buf1, 5 }, { buf2, 5 } };
+
+ ASSERT_EQ(10, writev(tf.fd, ios, 2));
+
+ ASSERT_EQ(0, lseek(tf.fd, 0, SEEK_SET));
+
+ memset(buf1, '1', sizeof(buf1));
+ memset(buf2, '2', sizeof(buf2));
+
+ ASSERT_EQ(10, readv(tf.fd, ios, 2));
+ buf1[5] = buf2[5] = '\0';
+ ASSERT_STREQ("hello", buf1);
+ ASSERT_STREQ("world", buf2);
+}
+
+template <typename ReadFn, typename WriteFn>
+void TestPreadVPwriteV(ReadFn read_fn, WriteFn write_fn) {
+ TemporaryFile tf;
+
+ char buf[] = "world";
+ iovec ios[] = { { buf, 5 } };
+
+ ASSERT_EQ(5, write_fn(tf.fd, ios, 1, 5));
+ ASSERT_EQ(0, lseek(tf.fd, 0, SEEK_CUR));
+
+ strcpy(buf, "hello");
+ ASSERT_EQ(5, write_fn(tf.fd, ios, 1, 0));
+ ASSERT_EQ(0, lseek(tf.fd, 0, SEEK_CUR));
+
+ ASSERT_EQ(5, read_fn(tf.fd, ios, 1, 5));
+ ASSERT_STREQ("world", buf);
+ ASSERT_EQ(5, read_fn(tf.fd, ios, 1, 0));
+ ASSERT_STREQ("hello", buf);
+}
+
+TEST(sys_uio, preadv_pwritev) {
+ TestPreadVPwriteV(preadv, pwritev);
+}
+
+TEST(sys_uio, preadv64_pwritev64) {
+ TestPreadVPwriteV(preadv64, pwritev64);
+}
+
+TEST(sys_uio, process_vm_readv) {
ASSERT_EQ(0, process_vm_readv(0, nullptr, 0, nullptr, 0, 0));
}
-TEST(sys_uio, process_vm_writev_ESRCH) {
+TEST(sys_uio, process_vm_writev) {
ASSERT_EQ(0, process_vm_writev(0, nullptr, 0, nullptr, 0, 0));
}