| Index: native_client_sdk/src/tests/nacl_io_test/kernel_wrap_test.cc
|
| diff --git a/native_client_sdk/src/tests/nacl_io_test/kernel_wrap_test.cc b/native_client_sdk/src/tests/nacl_io_test/kernel_wrap_test.cc
|
| index 79446aee1396578a1a44c17d101cd18a124bbd9e..00f2e448cecfa2e686fa6ac1e212af339613dde6 100644
|
| --- a/native_client_sdk/src/tests/nacl_io_test/kernel_wrap_test.cc
|
| +++ b/native_client_sdk/src/tests/nacl_io_test/kernel_wrap_test.cc
|
| @@ -19,13 +19,13 @@
|
| #include "nacl_io/osmman.h"
|
| #include "nacl_io/ossocket.h"
|
| #include "nacl_io/ostermios.h"
|
| +#include "nacl_io/ostime.h"
|
| #include "ppapi_simple/ps.h"
|
|
|
| #if defined(__native_client__) && !defined(__GLIBC__)
|
| extern "C" {
|
| -// TODO(sbc): remove once these get added to the newlib toolchain headers.
|
| +// TODO(sbc): remove once this gets added to the newlib toolchain headers.
|
| int fchdir(int fd);
|
| -int utimes(const char *filename, const struct timeval times[2]);
|
| }
|
| #endif
|
|
|
| @@ -40,30 +40,48 @@ using ::testing::StrEq;
|
|
|
| namespace {
|
|
|
| -#define COMPARE_FIELD(f) \
|
| - if (arg->f != statbuf->f) { \
|
| - *result_listener << "mismatch of field \"" #f \
|
| - "\". " \
|
| - "expected: " << statbuf->f << " actual: " << arg->f; \
|
| - return false; \
|
| +#define COMPARE_FIELD(actual, expected, f) \
|
| + if (actual != expected) { \
|
| + *result_listener << "mismatch of field \"" f \
|
| + "\". " \
|
| + "expected: " << expected << " actual: " << actual; \
|
| + 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);
|
| +#define COMPARE_FIELD_SIMPLE(f) COMPARE_FIELD(arg->f, other->f, #f)
|
| +
|
| +MATCHER_P(IsEqualToStatbuf, other, "") {
|
| + COMPARE_FIELD_SIMPLE(st_dev);
|
| + COMPARE_FIELD_SIMPLE(st_ino);
|
| + COMPARE_FIELD_SIMPLE(st_mode);
|
| + COMPARE_FIELD_SIMPLE(st_nlink);
|
| + COMPARE_FIELD_SIMPLE(st_uid);
|
| + COMPARE_FIELD_SIMPLE(st_gid);
|
| + COMPARE_FIELD_SIMPLE(st_rdev);
|
| + COMPARE_FIELD_SIMPLE(st_size);
|
| + COMPARE_FIELD_SIMPLE(st_atime);
|
| + COMPARE_FIELD_SIMPLE(st_mtime);
|
| + COMPARE_FIELD_SIMPLE(st_ctime);
|
| + return true;
|
| +}
|
| +
|
| +MATCHER_P(IsEqualToUtimbuf, other, "") {
|
| + COMPARE_FIELD(arg[0].tv_sec, other->actime, "actime");
|
| + COMPARE_FIELD(arg[1].tv_sec, other->modtime, "modtime");
|
| + return true;
|
| +}
|
| +
|
| +MATCHER_P(IsEqualToTimeval, other, "") {
|
| + COMPARE_FIELD(arg[0].tv_sec, other[0].tv_sec, "[0].tv_sec");
|
| + COMPARE_FIELD(arg[0].tv_nsec, other[0].tv_usec * 1000, "[0].tv_usec");
|
| + COMPARE_FIELD(arg[1].tv_sec, other[1].tv_sec, "[1].tv_sec");
|
| + COMPARE_FIELD(arg[1].tv_nsec, other[1].tv_usec * 1000, "[1].tv_usec");
|
| return true;
|
| }
|
|
|
| #undef COMPARE_FIELD
|
| +#undef COMPARE_FIELD_SIMPLE
|
| +
|
|
|
| ACTION_P(SetErrno, value) {
|
| errno = value;
|
| @@ -302,6 +320,14 @@ TEST_F(KernelWrapTest, fsync) {
|
| ASSERT_EQ(kDummyErrno, errno);
|
| }
|
|
|
| +TEST_F(KernelWrapTest, futimes) {
|
| + struct timeval times[2] = {{123, 234}, {345, 456}};
|
| + EXPECT_CALL(mock, futimens(kDummyInt, IsEqualToTimeval(times)))
|
| + .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
|
| + EXPECT_EQ(-1, futimes(kDummyInt, times));
|
| + ASSERT_EQ(kDummyErrno, errno);
|
| +}
|
| +
|
| TEST_F(KernelWrapTest, getcwd) {
|
| char buffer[PATH_MAX];
|
| char result[PATH_MAX];
|
| @@ -615,14 +641,15 @@ TEST_F(KernelWrapTest, unlink) {
|
| }
|
|
|
| TEST_F(KernelWrapTest, utime) {
|
| - const struct utimbuf* times = NULL;
|
| - EXPECT_CALL(mock, utime(kDummyConstChar, times)).WillOnce(Return(kDummyInt));
|
| - EXPECT_EQ(kDummyInt, utime(kDummyConstChar, times));
|
| + const struct utimbuf times = {123, 456};
|
| + EXPECT_CALL(mock, utimens(kDummyConstChar, IsEqualToUtimbuf(×)))
|
| + .WillOnce(Return(kDummyInt));
|
| + EXPECT_EQ(kDummyInt, utime(kDummyConstChar, ×));
|
| }
|
|
|
| TEST_F(KernelWrapTest, utimes) {
|
| - struct timeval* times = NULL;
|
| - EXPECT_CALL(mock, utimes(kDummyConstChar, times))
|
| + struct timeval times[2] = {{123, 234}, {345, 456}};
|
| + EXPECT_CALL(mock, utimens(kDummyConstChar, IsEqualToTimeval(times)))
|
| .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
|
| EXPECT_EQ(-1, utimes(kDummyConstChar, times));
|
| ASSERT_EQ(kDummyErrno, errno);
|
|
|