Index: native_client_sdk/src/tests/nacl_io_test/kernel_proxy_test.cc |
diff --git a/native_client_sdk/src/tests/nacl_io_test/kernel_proxy_test.cc b/native_client_sdk/src/tests/nacl_io_test/kernel_proxy_test.cc |
index ffa4eeef9e7c197e6af0ee73dfd2149b8448235a..98fd431ea8fb1a437bbe925747eafae3586061c4 100644 |
--- a/native_client_sdk/src/tests/nacl_io_test/kernel_proxy_test.cc |
+++ b/native_client_sdk/src/tests/nacl_io_test/kernel_proxy_test.cc |
@@ -542,18 +542,27 @@ TEST_F(KernelProxyTest, UseAfterClose) { |
namespace { |
StringMap_t g_string_map; |
+bool g_fs_ioctl_called; |
+int g_fs_dev; |
class KernelProxyMountTest_Filesystem : public MemFs { |
public: |
- using MemFs::Init; |
- |
virtual Error Init(const FsInitArgs& args) { |
+ MemFs::Init(args); |
+ |
g_string_map = args.string_map; |
+ g_fs_dev = args.dev; |
+ |
if (g_string_map.find("false") != g_string_map.end()) |
return EINVAL; |
return 0; |
} |
+ virtual Error Filesystem_VIoctl(int request, va_list arglist) { |
+ g_fs_ioctl_called = true; |
+ return 0; |
+ } |
+ |
friend class TypedFsFactory<KernelProxyMountTest_Filesystem>; |
}; |
@@ -570,16 +579,33 @@ class KernelProxyMountTest : public ::testing::Test { |
KernelProxyMountTest() {} |
void SetUp() { |
+ g_string_map.clear(); |
+ g_fs_dev = -1; |
+ g_fs_ioctl_called = false; |
+ |
ASSERT_EQ(0, ki_push_state_for_testing()); |
ASSERT_EQ(0, ki_init(&kp_)); |
} |
- void TearDown() { ki_uninit(); } |
+ void TearDown() { |
+ g_string_map.clear(); |
+ ki_uninit(); |
+ } |
private: |
KernelProxyMountTest_KernelProxy kp_; |
}; |
+// Helper function for calling ki_ioctl without having |
+// to construct a va_list. |
+int ki_ioctl_wrapper(int fd, int request, ...) { |
+ va_list ap; |
+ va_start(ap, request); |
+ int rtn = ki_ioctl(fd, request, ap); |
+ va_end(ap); |
+ return rtn; |
+} |
+ |
} // namespace |
TEST_F(KernelProxyMountTest, MountInit) { |
@@ -594,6 +620,20 @@ TEST_F(KernelProxyMountTest, MountInit) { |
EXPECT_EQ("y", g_string_map["x"]); |
} |
+TEST_F(KernelProxyMountTest, MountAndIoctl) { |
+ ASSERT_EQ(0, ki_mount("/", "/mnt1", "initfs", 0, "")); |
+ ASSERT_NE(-1, g_fs_dev); |
+ |
+ char path[100]; |
+ snprintf(path, 100, "dev/fs/%d", g_fs_dev); |
+ |
+ int fd = ki_open(path, O_RDONLY); |
+ ASSERT_GT(fd, -1); |
+ |
+ EXPECT_EQ(0, ki_ioctl_wrapper(fd, 0xdeadbeef)); |
+ EXPECT_EQ(true, g_fs_ioctl_called); |
+} |
+ |
namespace { |
int g_MMapCount = 0; |