aboutsummaryrefslogtreecommitdiff
path: root/tests/sys_uio_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sys_uio_test.cpp')
-rw-r--r--tests/sys_uio_test.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/sys_uio_test.cpp b/tests/sys_uio_test.cpp
index 846004148..aac08e764 100644
--- a/tests/sys_uio_test.cpp
+++ b/tests/sys_uio_test.cpp
@@ -16,7 +16,11 @@
#include <gtest/gtest.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
#include <sys/uio.h>
+#include <unistd.h>
#include <android-base/file.h>
@@ -68,6 +72,42 @@ TEST(sys_uio, preadv64_pwritev64) {
TestPreadVPwriteV(preadv64, pwritev64);
}
+template <typename ReadFn, typename WriteFn>
+void TestPreadV2PwriteV2(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, 0)) << strerror(errno);
+ ASSERT_EQ(0, lseek(tf.fd, 0, SEEK_CUR));
+
+ strcpy(buf, "hello");
+ ASSERT_EQ(5, write_fn(tf.fd, ios, 1, 0, 0)) << strerror(errno);
+ ASSERT_EQ(0, lseek(tf.fd, 0, SEEK_CUR));
+
+ ASSERT_EQ(5, read_fn(tf.fd, ios, 1, 5, 0)) << strerror(errno);
+ ASSERT_STREQ("world", buf);
+ ASSERT_EQ(5, read_fn(tf.fd, ios, 1, 0, 0)) << strerror(errno);
+ ASSERT_STREQ("hello", buf);
+}
+
+TEST(sys_uio, preadv2_pwritev2) {
+#if defined(__BIONIC__)
+ TestPreadV2PwriteV2(preadv2, pwritev2);
+#else
+ GTEST_SKIP() << "preadv2/pwritev2 not available";
+#endif
+}
+
+TEST(sys_uio, preadv64v2_pwritev64v2) {
+#if defined(__BIONIC__)
+ TestPreadV2PwriteV2(preadv64v2, pwritev64v2);
+#else
+ GTEST_SKIP() << "preadv2/pwritev2 not available";
+#endif
+}
+
TEST(sys_uio, process_vm_readv) {
ASSERT_EQ(0, process_vm_readv(0, nullptr, 0, nullptr, 0, 0));