| Index: native_client_sdk/src/libraries/nacl_mounts_test/kernel_proxy_test.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_mounts_test/kernel_proxy_test.cc b/native_client_sdk/src/libraries/nacl_mounts_test/kernel_proxy_test.cc
|
| deleted file mode 100644
|
| index a63f5a0f940fa788f0067a8199ab6b254281a0fc..0000000000000000000000000000000000000000
|
| --- a/native_client_sdk/src/libraries/nacl_mounts_test/kernel_proxy_test.cc
|
| +++ /dev/null
|
| @@ -1,244 +0,0 @@
|
| -/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include <errno.h>
|
| -#include <fcntl.h>
|
| -#include <pthread.h>
|
| -#include <sys/stat.h>
|
| -
|
| -#include <map>
|
| -#include <string>
|
| -
|
| -#include "nacl_mounts/kernel_handle.h"
|
| -#include "nacl_mounts/kernel_intercept.h"
|
| -#include "nacl_mounts/kernel_proxy.h"
|
| -#include "nacl_mounts/mount.h"
|
| -#include "nacl_mounts/mount_mem.h"
|
| -#include "nacl_mounts/path.h"
|
| -
|
| -#include "gtest/gtest.h"
|
| -
|
| -
|
| -class KernelProxyTest : public ::testing::Test {
|
| - public:
|
| - KernelProxyTest()
|
| - : kp_(new KernelProxy) {
|
| - ki_init(kp_);
|
| - }
|
| -
|
| - ~KernelProxyTest() {
|
| - ki_uninit();
|
| - delete kp_;
|
| - }
|
| -
|
| - private:
|
| - KernelProxy* kp_;
|
| -};
|
| -
|
| -
|
| -TEST_F(KernelProxyTest, WorkingDirectory) {
|
| - char text[1024];
|
| -
|
| - text[0] = 0;
|
| - ki_getcwd(text, sizeof(text));
|
| - EXPECT_STREQ("/", text);
|
| -
|
| - char* alloc = ki_getwd(NULL);
|
| - EXPECT_EQ((char *) NULL, alloc);
|
| - EXPECT_EQ(EFAULT, errno);
|
| -
|
| - text[0] = 0;
|
| - alloc = ki_getwd(text);
|
| - EXPECT_STREQ("/", alloc);
|
| -
|
| - EXPECT_EQ(-1, ki_chdir("/foo"));
|
| - EXPECT_EQ(ENOENT, errno);
|
| -
|
| - EXPECT_EQ(0, ki_chdir("/"));
|
| -
|
| - EXPECT_EQ(0, ki_mkdir("/foo", S_IREAD | S_IWRITE));
|
| - EXPECT_EQ(-1, ki_mkdir("/foo", S_IREAD | S_IWRITE));
|
| - EXPECT_EQ(EEXIST, errno);
|
| -
|
| - memset(text, 0, sizeof(text));
|
| - EXPECT_EQ(0, ki_chdir("foo"));
|
| - EXPECT_EQ(text, ki_getcwd(text, sizeof(text)));
|
| - EXPECT_STREQ("/foo", text);
|
| -
|
| - memset(text, 0, sizeof(text));
|
| - EXPECT_EQ(-1, ki_chdir("foo"));
|
| - EXPECT_EQ(ENOENT, errno);
|
| - EXPECT_EQ(0, ki_chdir(".."));
|
| - EXPECT_EQ(0, ki_chdir("/foo"));
|
| - EXPECT_EQ(text, ki_getcwd(text, sizeof(text)));
|
| - EXPECT_STREQ("/foo", text);
|
| -}
|
| -
|
| -TEST_F(KernelProxyTest, MemMountIO) {
|
| - char text[1024];
|
| - int fd1, fd2, fd3;
|
| - int len;
|
| -
|
| - // Create "/foo"
|
| - EXPECT_EQ(0, ki_mkdir("/foo", S_IREAD | S_IWRITE));
|
| -
|
| - // Fail to open "/foo/bar"
|
| - EXPECT_EQ(-1, ki_open("/foo/bar", O_RDONLY));
|
| - EXPECT_EQ(ENOENT, errno);
|
| -
|
| - // Create bar "/foo/bar"
|
| - fd1 = ki_open("/foo/bar", O_RDONLY | O_CREAT);
|
| - EXPECT_NE(-1, fd1);
|
| -
|
| - // Open (optionally create) bar "/foo/bar"
|
| - fd2 = ki_open("/foo/bar", O_RDONLY | O_CREAT);
|
| - EXPECT_NE(-1, fd2);
|
| -
|
| - // Fail to exclusively create bar "/foo/bar"
|
| - EXPECT_EQ(-1, ki_open("/foo/bar", O_RDONLY | O_CREAT | O_EXCL));
|
| - EXPECT_EQ(EEXIST, errno);
|
| -
|
| - // Write hello and world to same node with different descriptors
|
| - // so that we overwrite each other
|
| - EXPECT_EQ(5, ki_write(fd2, "WORLD", 5));
|
| - EXPECT_EQ(5, ki_write(fd1, "HELLO", 5));
|
| -
|
| - fd3 = ki_open("/foo/bar", O_WRONLY);
|
| - EXPECT_NE(-1, fd3);
|
| -
|
| - len = ki_read(fd3, text, sizeof(text));
|
| - if (len > -0) text[len] = 0;
|
| - EXPECT_EQ(5, len);
|
| - EXPECT_STREQ("HELLO", text);
|
| - EXPECT_EQ(0, ki_close(fd1));
|
| - EXPECT_EQ(0, ki_close(fd2));
|
| -
|
| - fd1 = ki_open("/foo/bar", O_WRONLY | O_APPEND);
|
| - EXPECT_NE(-1, fd1);
|
| - EXPECT_EQ(5, ki_write(fd1, "WORLD", 5));
|
| -
|
| - len = ki_read(fd3, text, sizeof(text));
|
| - if (len >= 0) text[len] = 0;
|
| -
|
| - EXPECT_EQ(5, len);
|
| - EXPECT_STREQ("WORLD", text);
|
| -
|
| - fd2 = ki_open("/foo/bar", O_RDONLY);
|
| - EXPECT_NE(-1, fd2);
|
| - len = ki_read(fd2, text, sizeof(text));
|
| - if (len > 0) text[len] = 0;
|
| - EXPECT_EQ(10, len);
|
| - EXPECT_STREQ("HELLOWORLD", text);
|
| -}
|
| -
|
| -TEST_F(KernelProxyTest, MemMountLseek) {
|
| - int fd = ki_open("/foo", O_CREAT | O_RDWR);
|
| - EXPECT_EQ(9, ki_write(fd, "Some text", 9));
|
| -
|
| - EXPECT_EQ(9, ki_lseek(fd, 0, SEEK_CUR));
|
| - EXPECT_EQ(9, ki_lseek(fd, 0, SEEK_END));
|
| - EXPECT_EQ(-1, ki_lseek(fd, -1, SEEK_SET));
|
| - EXPECT_EQ(EINVAL, errno);
|
| -
|
| - // Seek past end of file.
|
| - EXPECT_EQ(13, ki_lseek(fd, 13, SEEK_SET));
|
| - char buffer[4];
|
| - memset(&buffer[0], 0xfe, 4);
|
| - EXPECT_EQ(9, ki_lseek(fd, -4, SEEK_END));
|
| - EXPECT_EQ(4, ki_read(fd, &buffer[0], 4));
|
| - EXPECT_EQ(0, memcmp("\0\0\0\0", buffer, 4));
|
| -}
|
| -
|
| -TEST_F(KernelProxyTest, CloseTwice) {
|
| - int fd = ki_open("/foo", O_CREAT | O_RDWR);
|
| - EXPECT_EQ(9, ki_write(fd, "Some text", 9));
|
| -
|
| - int fd2 = ki_dup(fd);
|
| - EXPECT_NE(-1, fd2);
|
| -
|
| - EXPECT_EQ(0, ki_close(fd));
|
| - EXPECT_EQ(0, ki_close(fd2));
|
| -}
|
| -
|
| -TEST_F(KernelProxyTest, MemMountDup) {
|
| - int fd = ki_open("/foo", O_CREAT | O_RDWR);
|
| -
|
| - int dup_fd = ki_dup(fd);
|
| - EXPECT_NE(-1, dup_fd);
|
| -
|
| - EXPECT_EQ(9, ki_write(fd, "Some text", 9));
|
| - EXPECT_EQ(9, ki_lseek(fd, 0, SEEK_CUR));
|
| - EXPECT_EQ(9, ki_lseek(dup_fd, 0, SEEK_CUR));
|
| -
|
| - int dup2_fd = 123;
|
| - EXPECT_EQ(dup2_fd, ki_dup2(fd, dup2_fd));
|
| - EXPECT_EQ(9, ki_lseek(dup2_fd, 0, SEEK_CUR));
|
| -
|
| - int new_fd = ki_open("/bar", O_CREAT | O_RDWR);
|
| -
|
| - EXPECT_EQ(fd, ki_dup2(new_fd, fd));
|
| - // fd, new_fd -> "/bar"
|
| - // dup_fd, dup2_fd -> "/foo"
|
| -
|
| - // We should still be able to write to dup_fd (i.e. it should not be closed).
|
| - EXPECT_EQ(4, ki_write(dup_fd, "more", 4));
|
| -
|
| - EXPECT_EQ(0, ki_close(dup2_fd));
|
| - // fd, new_fd -> "/bar"
|
| - // dup_fd -> "/foo"
|
| -
|
| - EXPECT_EQ(dup_fd, ki_dup2(fd, dup_fd));
|
| - // fd, new_fd, dup_fd -> "/bar"
|
| -}
|
| -
|
| -
|
| -StringMap_t g_StringMap;
|
| -
|
| -class MountMockInit : public MountMem {
|
| - public:
|
| - virtual bool Init(int dev, StringMap_t& args, PepperInterface* ppapi) {
|
| - g_StringMap = args;
|
| - if (args.find("false") != args.end())
|
| - return false;
|
| - return true;
|
| - };
|
| -};
|
| -
|
| -class KernelProxyMountMock : public KernelProxy {
|
| - virtual void Init(PepperInterface* ppapi) {
|
| - KernelProxy::Init(NULL);
|
| - factories_["initfs"] = MountMockInit::Create<MountMockInit>;
|
| - }
|
| -};
|
| -
|
| -class KernelProxyMountTest : public ::testing::Test {
|
| - public:
|
| - KernelProxyMountTest()
|
| - : kp_(new KernelProxyMountMock) {
|
| - ki_init(kp_);
|
| - }
|
| -
|
| - ~KernelProxyMountTest() {
|
| - ki_uninit();
|
| - delete kp_;
|
| - }
|
| -
|
| - private:
|
| - KernelProxy* kp_;
|
| -};
|
| -
|
| -
|
| -
|
| -TEST_F(KernelProxyMountTest, MountInit) {
|
| - int res1 = ki_mount("/", "/mnt1", "initfs", 0, "false,foo=bar");
|
| -
|
| - EXPECT_EQ("bar", g_StringMap["foo"]);
|
| - EXPECT_EQ(-1, res1);
|
| - EXPECT_EQ(EINVAL, errno);
|
| -
|
| - int res2 = ki_mount("/", "/mnt2", "initfs", 0, "true,bar=foo,x=y");
|
| - EXPECT_NE(-1, res2);
|
| - EXPECT_EQ("y", g_StringMap["x"]);
|
| -}
|
|
|