Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: native_client_sdk/src/tests/nacl_io_test/kernel_wrap_test.cc

Issue 565343002: [NaCl SDK] nacl_io: Plumb through {,f}utime{,s} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // The linux host build of nacl_io can't do wrapping of syscalls so all 5 // The linux host build of nacl_io can't do wrapping of syscalls so all
6 // these tests must be disabled. 6 // these tests must be disabled.
7 #if !defined(__linux__) 7 #if !defined(__linux__)
8 8
9 #include <unistd.h> 9 #include <unistd.h>
10 10
11 #include <string> 11 #include <string>
12 #include <vector> 12 #include <vector>
13 13
14 #include "gtest/gtest.h" 14 #include "gtest/gtest.h"
15 #include "mock_kernel_proxy.h" 15 #include "mock_kernel_proxy.h"
16 #include "nacl_io/kernel_intercept.h" 16 #include "nacl_io/kernel_intercept.h"
17 #include "nacl_io/kernel_wrap.h" 17 #include "nacl_io/kernel_wrap.h"
18 #include "nacl_io/kernel_wrap_real.h" 18 #include "nacl_io/kernel_wrap_real.h"
19 #include "nacl_io/osmman.h" 19 #include "nacl_io/osmman.h"
20 #include "nacl_io/ossocket.h" 20 #include "nacl_io/ossocket.h"
21 #include "nacl_io/ostermios.h" 21 #include "nacl_io/ostermios.h"
22 #include "nacl_io/ostime.h"
22 #include "ppapi_simple/ps.h" 23 #include "ppapi_simple/ps.h"
23 24
24 #if defined(__native_client__) && !defined(__GLIBC__) 25 #if defined(__native_client__) && !defined(__GLIBC__)
25 extern "C" { 26 extern "C" {
26 // TODO(sbc): remove once these get added to the newlib toolchain headers. 27 // TODO(sbc): remove once this gets added to the newlib toolchain headers.
27 int fchdir(int fd); 28 int fchdir(int fd);
28 int utimes(const char *filename, const struct timeval times[2]);
29 } 29 }
30 #endif 30 #endif
31 31
32 using namespace nacl_io; 32 using namespace nacl_io;
33 33
34 using ::testing::_; 34 using ::testing::_;
35 using ::testing::AnyNumber; 35 using ::testing::AnyNumber;
36 using ::testing::DoAll; 36 using ::testing::DoAll;
37 using ::testing::Invoke; 37 using ::testing::Invoke;
38 using ::testing::Return; 38 using ::testing::Return;
39 using ::testing::StrEq; 39 using ::testing::StrEq;
40 40
41 namespace { 41 namespace {
42 42
43 #define COMPARE_FIELD(f) \ 43 #define COMPARE_FIELD(actual, expected, f) \
44 if (arg->f != statbuf->f) { \ 44 if (actual != expected) { \
45 *result_listener << "mismatch of field \"" #f \ 45 *result_listener << "mismatch of field \"" f \
46 "\". " \ 46 "\". " \
47 "expected: " << statbuf->f << " actual: " << arg->f; \ 47 "expected: " << expected << " actual: " << actual; \
48 return false; \ 48 return false; \
49 } 49 }
50 50
51 MATCHER_P(IsEqualToStatbuf, statbuf, "") { 51 #define COMPARE_FIELD_SIMPLE(f) COMPARE_FIELD(arg->f, other->f, #f)
52 COMPARE_FIELD(st_dev); 52
53 COMPARE_FIELD(st_ino); 53 MATCHER_P(IsEqualToStatbuf, other, "") {
54 COMPARE_FIELD(st_mode); 54 COMPARE_FIELD_SIMPLE(st_dev);
55 COMPARE_FIELD(st_nlink); 55 COMPARE_FIELD_SIMPLE(st_ino);
56 COMPARE_FIELD(st_uid); 56 COMPARE_FIELD_SIMPLE(st_mode);
57 COMPARE_FIELD(st_gid); 57 COMPARE_FIELD_SIMPLE(st_nlink);
58 COMPARE_FIELD(st_rdev); 58 COMPARE_FIELD_SIMPLE(st_uid);
59 COMPARE_FIELD(st_size); 59 COMPARE_FIELD_SIMPLE(st_gid);
60 COMPARE_FIELD(st_atime); 60 COMPARE_FIELD_SIMPLE(st_rdev);
61 COMPARE_FIELD(st_mtime); 61 COMPARE_FIELD_SIMPLE(st_size);
62 COMPARE_FIELD(st_ctime); 62 COMPARE_FIELD_SIMPLE(st_atime);
63 COMPARE_FIELD_SIMPLE(st_mtime);
64 COMPARE_FIELD_SIMPLE(st_ctime);
65 return true;
66 }
67
68 MATCHER_P(IsEqualToUtimbuf, other, "") {
69 COMPARE_FIELD(arg[0].tv_sec, other->actime, "actime");
70 COMPARE_FIELD(arg[1].tv_sec, other->modtime, "modtime");
71 return true;
72 }
73
74 MATCHER_P(IsEqualToTimeval, other, "") {
75 COMPARE_FIELD(arg[0].tv_sec, other[0].tv_sec, "[0].tv_sec");
76 COMPARE_FIELD(arg[0].tv_nsec, other[0].tv_usec * 1000, "[0].tv_usec");
77 COMPARE_FIELD(arg[1].tv_sec, other[1].tv_sec, "[1].tv_sec");
78 COMPARE_FIELD(arg[1].tv_nsec, other[1].tv_usec * 1000, "[1].tv_usec");
63 return true; 79 return true;
64 } 80 }
65 81
66 #undef COMPARE_FIELD 82 #undef COMPARE_FIELD
83 #undef COMPARE_FIELD_SIMPLE
84
67 85
68 ACTION_P(SetErrno, value) { 86 ACTION_P(SetErrno, value) {
69 errno = value; 87 errno = value;
70 } 88 }
71 89
72 ACTION_P2(SetString, target, source) { 90 ACTION_P2(SetString, target, source) {
73 strcpy(target, source); 91 strcpy(target, source);
74 } 92 }
75 93
76 ACTION_P(SetStat, statbuf) { 94 ACTION_P(SetStat, statbuf) {
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 EXPECT_EQ(kDummyInt3, ftruncate(kDummyInt, kDummyInt2)); 313 EXPECT_EQ(kDummyInt3, ftruncate(kDummyInt, kDummyInt2));
296 } 314 }
297 315
298 TEST_F(KernelWrapTest, fsync) { 316 TEST_F(KernelWrapTest, fsync) {
299 EXPECT_CALL(mock, fsync(kDummyInt)) 317 EXPECT_CALL(mock, fsync(kDummyInt))
300 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1))); 318 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
301 EXPECT_EQ(-1, fsync(kDummyInt)); 319 EXPECT_EQ(-1, fsync(kDummyInt));
302 ASSERT_EQ(kDummyErrno, errno); 320 ASSERT_EQ(kDummyErrno, errno);
303 } 321 }
304 322
323 TEST_F(KernelWrapTest, futimes) {
324 struct timeval times[2] = {{123, 234}, {345, 456}};
325 EXPECT_CALL(mock, futimens(kDummyInt, IsEqualToTimeval(times)))
326 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
327 EXPECT_EQ(-1, futimes(kDummyInt, times));
328 ASSERT_EQ(kDummyErrno, errno);
329 }
330
305 TEST_F(KernelWrapTest, getcwd) { 331 TEST_F(KernelWrapTest, getcwd) {
306 char buffer[PATH_MAX]; 332 char buffer[PATH_MAX];
307 char result[PATH_MAX]; 333 char result[PATH_MAX];
308 memset(buffer, 0, PATH_MAX); 334 memset(buffer, 0, PATH_MAX);
309 strcpy(result, "getcwd_result"); 335 strcpy(result, "getcwd_result");
310 EXPECT_CALL(mock, getcwd(buffer, kDummySizeT)) 336 EXPECT_CALL(mock, getcwd(buffer, kDummySizeT))
311 .WillOnce(DoAll(SetString(buffer, result), Return(buffer))); 337 .WillOnce(DoAll(SetString(buffer, result), Return(buffer)));
312 EXPECT_STREQ(result, getcwd(buffer, kDummySizeT)); 338 EXPECT_STREQ(result, getcwd(buffer, kDummySizeT));
313 } 339 }
314 340
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 } 634 }
609 635
610 TEST_F(KernelWrapTest, unlink) { 636 TEST_F(KernelWrapTest, unlink) {
611 EXPECT_CALL(mock, unlink(kDummyConstChar)) 637 EXPECT_CALL(mock, unlink(kDummyConstChar))
612 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1))); 638 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
613 EXPECT_EQ(-1, unlink(kDummyConstChar)); 639 EXPECT_EQ(-1, unlink(kDummyConstChar));
614 ASSERT_EQ(kDummyErrno, errno); 640 ASSERT_EQ(kDummyErrno, errno);
615 } 641 }
616 642
617 TEST_F(KernelWrapTest, utime) { 643 TEST_F(KernelWrapTest, utime) {
618 const struct utimbuf* times = NULL; 644 const struct utimbuf times = {123, 456};
619 EXPECT_CALL(mock, utime(kDummyConstChar, times)).WillOnce(Return(kDummyInt)); 645 EXPECT_CALL(mock, utimens(kDummyConstChar, IsEqualToUtimbuf(&times)))
620 EXPECT_EQ(kDummyInt, utime(kDummyConstChar, times)); 646 .WillOnce(Return(kDummyInt));
647 EXPECT_EQ(kDummyInt, utime(kDummyConstChar, &times));
621 } 648 }
622 649
623 TEST_F(KernelWrapTest, utimes) { 650 TEST_F(KernelWrapTest, utimes) {
624 struct timeval* times = NULL; 651 struct timeval times[2] = {{123, 234}, {345, 456}};
625 EXPECT_CALL(mock, utimes(kDummyConstChar, times)) 652 EXPECT_CALL(mock, utimens(kDummyConstChar, IsEqualToTimeval(times)))
626 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1))); 653 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
627 EXPECT_EQ(-1, utimes(kDummyConstChar, times)); 654 EXPECT_EQ(-1, utimes(kDummyConstChar, times));
628 ASSERT_EQ(kDummyErrno, errno); 655 ASSERT_EQ(kDummyErrno, errno);
629 } 656 }
630 657
631 TEST_F(KernelWrapTest, write) { 658 TEST_F(KernelWrapTest, write) {
632 EXPECT_CALL(mock, write(kDummyInt, kDummyVoidPtr, kDummyInt2)) 659 EXPECT_CALL(mock, write(kDummyInt, kDummyVoidPtr, kDummyInt2))
633 .WillOnce(Return(kDummyInt3)); 660 .WillOnce(Return(kDummyInt3));
634 EXPECT_EQ(kDummyInt3, write(kDummyInt, kDummyVoidPtr, kDummyInt2)); 661 EXPECT_EQ(kDummyInt3, write(kDummyInt, kDummyVoidPtr, kDummyInt2));
635 } 662 }
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 .WillOnce(Return(0)) 920 .WillOnce(Return(0))
894 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1))); 921 .WillOnce(DoAll(SetErrno(kDummyErrno), Return(-1)));
895 EXPECT_EQ(0, socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val)); 922 EXPECT_EQ(0, socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val));
896 EXPECT_EQ(-1, socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val)); 923 EXPECT_EQ(-1, socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val));
897 EXPECT_EQ(kDummyErrno, errno); 924 EXPECT_EQ(kDummyErrno, errno);
898 } 925 }
899 926
900 #endif // PROVIDES_SOCKET_API 927 #endif // PROVIDES_SOCKET_API
901 928
902 #endif // __linux__ 929 #endif // __linux__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698