diff options
author | Pavel Labath <labath@google.com> | 2017-01-12 11:56:39 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2017-01-13 10:21:19 +0000 |
commit | cc441001c085f64bd94c32981842135f9a9652cd (patch) | |
tree | e6b8eb13ee7343507e214fbaf647e9d4d636dc55 /tests/sys_uio_test.cpp | |
parent | 1b2975d54b9c17ced29883aef24490773a4a9fe6 (diff) |
Beef up process_vm_readv/writev tests
LLDB uses process_vm_readv quite extensively (it's an order of
magnitude faster than PTRACE_PEEKDATA). Add a bit more tests of
the function to make sure it stays working.
Change-Id: I64e17e6d56842f118a9485e3a18f42ca5e1b7577
Test: run the new test
Diffstat (limited to 'tests/sys_uio_test.cpp')
-rw-r--r-- | tests/sys_uio_test.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/sys_uio_test.cpp b/tests/sys_uio_test.cpp index 569d4fbad..60bd22470 100644 --- a/tests/sys_uio_test.cpp +++ b/tests/sys_uio_test.cpp @@ -70,8 +70,38 @@ TEST(sys_uio, preadv64_pwritev64) { TEST(sys_uio, process_vm_readv) { ASSERT_EQ(0, process_vm_readv(0, nullptr, 0, nullptr, 0, 0)); + + // Test that we can read memory from our own process + char src[1024] = "This is the source buffer containing some data"; + char dst[1024] = ""; + iovec remote = { src, sizeof src }; + iovec local = { dst, sizeof dst }; + ASSERT_EQ(ssize_t(sizeof src), process_vm_readv(getpid(), &local, 1, &remote, 1, 0)); + // Check whether data was copied (in the correct direction) + ASSERT_EQ('T', dst[0]); + ASSERT_EQ(0, memcmp(src, dst, sizeof src)); + + // Reading from non-allocated memory should return an error + remote = { nullptr, sizeof dst }; + ASSERT_EQ(-1, process_vm_readv(getpid(), &local, 1, &remote, 1, 0)); + ASSERT_EQ(EFAULT, errno); } TEST(sys_uio, process_vm_writev) { ASSERT_EQ(0, process_vm_writev(0, nullptr, 0, nullptr, 0, 0)); + + // Test that we can read memory from our own process + char src[1024] = "This is the source buffer containing some data"; + char dst[1024] = ""; + iovec remote = { dst, sizeof dst }; + iovec local = { src, sizeof src }; + ASSERT_EQ(ssize_t(sizeof src), process_vm_writev(getpid(), &local, 1, &remote, 1, 0)); + // Check whether data was copied (in the correct direction) + ASSERT_EQ('T', dst[0]); + ASSERT_EQ(0, memcmp(src, dst, sizeof src)); + + // Writing to non-allocated memory should return an error + remote = { nullptr, sizeof dst }; + ASSERT_EQ(-1, process_vm_writev(getpid(), &local, 1, &remote, 1, 0)); + ASSERT_EQ(EFAULT, errno); } |