| Index: native_client_sdk/src/libraries/nacl_mounts_test/kernel_wrap_test.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_mounts_test/kernel_wrap_test.cc b/native_client_sdk/src/libraries/nacl_mounts_test/kernel_wrap_test.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7a7f920e474958b262b300f68f2d8149a0d9b882
|
| --- /dev/null
|
| +++ b/native_client_sdk/src/libraries/nacl_mounts_test/kernel_wrap_test.cc
|
| @@ -0,0 +1,257 @@
|
| +/* 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 <string>
|
| +#include <vector>
|
| +#include "gtest/gtest.h"
|
| +#include "nacl_mounts/kernel_proxy.h"
|
| +#include "nacl_mounts/kernel_intercept.h"
|
| +#include "nacl_mounts/kernel_wrap.h"
|
| +#include "kernel_proxy_mock.h"
|
| +
|
| +using ::testing::StrEq;
|
| +using ::testing::_;
|
| +
|
| +namespace {
|
| +
|
| +#define COMPARE_FIELD(f) \
|
| + if (arg->f != statbuf->f) { \
|
| + *result_listener << "mismatch of field \""#f"\". " \
|
| + "expected: " << statbuf->f << \
|
| + " actual: " << arg->f; \
|
| + return false; \
|
| + }
|
| +
|
| +MATCHER_P(IsEqualToStatbuf, statbuf, "") {
|
| + COMPARE_FIELD(st_dev);
|
| + COMPARE_FIELD(st_ino);
|
| + COMPARE_FIELD(st_mode);
|
| + COMPARE_FIELD(st_nlink);
|
| + COMPARE_FIELD(st_uid);
|
| + COMPARE_FIELD(st_gid);
|
| + COMPARE_FIELD(st_rdev);
|
| + COMPARE_FIELD(st_size);
|
| + COMPARE_FIELD(st_atime);
|
| + COMPARE_FIELD(st_mtime);
|
| + COMPARE_FIELD(st_ctime);
|
| + return true;
|
| +}
|
| +
|
| +#undef COMPARE_FIELD
|
| +
|
| +ACTION_P(SetStat, statbuf) {
|
| + memset(arg1, 0, sizeof(struct stat));
|
| + arg1->st_dev = statbuf->st_dev;
|
| + arg1->st_ino = statbuf->st_ino;
|
| + arg1->st_mode = statbuf->st_mode;
|
| + arg1->st_nlink = statbuf->st_nlink;
|
| + arg1->st_uid = statbuf->st_uid;
|
| + arg1->st_gid = statbuf->st_gid;
|
| + arg1->st_rdev = statbuf->st_rdev;
|
| + arg1->st_size = statbuf->st_size;
|
| + arg1->st_atime = statbuf->st_atime;
|
| + arg1->st_mtime = statbuf->st_mtime;
|
| + arg1->st_ctime = statbuf->st_ctime;
|
| + return 0;
|
| +}
|
| +
|
| +void MakeDummyStatbuf(struct stat* statbuf) {
|
| + memset(&statbuf[0], 0, sizeof(struct stat));
|
| + statbuf->st_dev = 1;
|
| + statbuf->st_ino = 2;
|
| + statbuf->st_mode = 3;
|
| + statbuf->st_nlink = 4;
|
| + statbuf->st_uid = 5;
|
| + statbuf->st_gid = 6;
|
| + statbuf->st_rdev = 7;
|
| + statbuf->st_size = 8;
|
| + statbuf->st_atime = 9;
|
| + statbuf->st_mtime = 10;
|
| + statbuf->st_ctime = 11;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +TEST(KernelWrap, access) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, access(StrEq("access"), 12)).Times(1);
|
| + access("access", 12);
|
| +}
|
| +
|
| +TEST(KernelWrap, chdir) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, chdir(StrEq("chdir"))).Times(1);
|
| + chdir("chdir");
|
| +}
|
| +
|
| +TEST(KernelWrap, chmod) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, chmod(StrEq("chmod"), 23)).Times(1);
|
| + chmod("chmod", 23);
|
| +}
|
| +
|
| +TEST(KernelWrap, close) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, close(34)).Times(1);
|
| + close(34);
|
| +}
|
| +
|
| +TEST(KernelWrap, dup) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, dup(123)).Times(1);
|
| + dup(123);
|
| +}
|
| +
|
| +TEST(KernelWrap, fstat) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + struct stat in_statbuf;
|
| + MakeDummyStatbuf(&in_statbuf);
|
| + EXPECT_CALL(mock, fstat(234, _))
|
| + .Times(1)
|
| + .WillOnce(SetStat(&in_statbuf));
|
| + struct stat out_statbuf;
|
| + fstat(234, &out_statbuf);
|
| + EXPECT_THAT(&in_statbuf, IsEqualToStatbuf(&out_statbuf));
|
| +}
|
| +
|
| +TEST(KernelWrap, fsync) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, fsync(345)).Times(1);
|
| + fsync(345);
|
| +}
|
| +
|
| +TEST(KernelWrap, getcwd) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, getcwd(StrEq("getcwd"), 1)).Times(1);
|
| + char buffer[] = "getcwd";
|
| + getcwd(buffer, 1);
|
| +}
|
| +
|
| +TEST(KernelWrap, getdents) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, getdents(456, NULL, 567)).Times(1);
|
| + getdents(456, NULL, 567);
|
| +}
|
| +
|
| +// gcc gives error: getwd is deprecated.
|
| +#if defined(__GNUC__)
|
| +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
| +#endif
|
| +TEST(KernelWrap, getwd) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, getwd(StrEq("getwd"))).Times(1);
|
| + char buffer[] = "getwd";
|
| + getwd(buffer);
|
| +}
|
| +#if defined(__GNUC__)
|
| +#pragma GCC diagnostic warning "-Wdeprecated-declarations"
|
| +#endif
|
| +
|
| +TEST(KernelWrap, isatty) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, isatty(678)).Times(1);
|
| + isatty(678);
|
| +}
|
| +
|
| +TEST(KernelWrap, lseek) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, lseek(789, 891, 912)).Times(1);
|
| + lseek(789, 891, 912);
|
| +}
|
| +
|
| +TEST(KernelWrap, mkdir) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| +#if defined(WIN32)
|
| + EXPECT_CALL(mock, mkdir(StrEq("mkdir"), 0777)).Times(1);
|
| + mkdir("mkdir");
|
| +#else
|
| + EXPECT_CALL(mock, mkdir(StrEq("mkdir"), 1234)).Times(1);
|
| + mkdir("mkdir", 1234);
|
| +#endif
|
| +}
|
| +
|
| +TEST(KernelWrap, mount) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock,
|
| + mount(StrEq("mount1"), StrEq("mount2"), StrEq("mount3"), 2345, NULL))
|
| + .Times(1);
|
| + mount("mount1", "mount2", "mount3", 2345, NULL);
|
| +}
|
| +
|
| +TEST(KernelWrap, open) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, open(StrEq("open"), 3456)).Times(1);
|
| + open("open", 3456);
|
| +}
|
| +
|
| +TEST(KernelWrap, read) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, read(4567, NULL, 5678)).Times(1);
|
| + read(4567, NULL, 5678);
|
| +}
|
| +
|
| +TEST(KernelWrap, remove) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, remove(StrEq("remove"))).Times(1);
|
| + remove("remove");
|
| +}
|
| +
|
| +TEST(KernelWrap, rmdir) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, rmdir(StrEq("rmdir"))).Times(1);
|
| + rmdir("rmdir");
|
| +}
|
| +
|
| +TEST(KernelWrap, stat) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + struct stat in_statbuf;
|
| + MakeDummyStatbuf(&in_statbuf);
|
| + EXPECT_CALL(mock, stat(StrEq("stat"), _))
|
| + .Times(1)
|
| + .WillOnce(SetStat(&in_statbuf));
|
| + struct stat out_statbuf;
|
| + stat("stat", &out_statbuf);
|
| + EXPECT_THAT(&in_statbuf, IsEqualToStatbuf(&out_statbuf));
|
| +}
|
| +
|
| +TEST(KernelWrap, umount) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, umount(StrEq("umount"))).Times(1);
|
| + umount("umount");
|
| +}
|
| +
|
| +TEST(KernelWrap, unlink) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, unlink(StrEq("unlink"))).Times(1);
|
| + unlink("unlink");
|
| +}
|
| +
|
| +TEST(KernelWrap, write) {
|
| + KernelProxyMock mock;
|
| + ki_init(&mock);
|
| + EXPECT_CALL(mock, write(6789, NULL, 7891)).Times(1);
|
| + write(6789, NULL, 7891);
|
| +}
|
|
|