kernel_wrap_test.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gtest/gtest.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "kernel_proxy_mock.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "nacl_io/kernel_intercept.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "nacl_io/kernel_wrap.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "nacl_io/osmman.h" 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "nacl_io/ossocket.h" 14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "nacl_io/ostermios.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing namespace nacl_io; 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::DoAll; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Return; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::StrEq; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define COMPARE_FIELD(f) \ 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (arg->f != statbuf->f) { \ 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *result_listener << "mismatch of field \"" #f \ 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "\". " \ 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "expected: " << statbuf->f << " actual: " << arg->f; \ 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; \ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(IsEqualToStatbuf, statbuf, "") { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_dev); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_ino); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_mode); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_nlink); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_uid); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_gid); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_rdev); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_size); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_atime); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_mtime); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_ctime); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef COMPARE_FIELD 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P(SetStat, statbuf) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(arg1, 0, sizeof(struct stat)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_dev = statbuf->st_dev; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_ino = statbuf->st_ino; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_mode = statbuf->st_mode; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_nlink = statbuf->st_nlink; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_uid = statbuf->st_uid; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_gid = statbuf->st_gid; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_rdev = statbuf->st_rdev; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_size = statbuf->st_size; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_atime = statbuf->st_atime; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_mtime = statbuf->st_mtime; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_ctime = statbuf->st_ctime; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MakeDummyStatbuf(struct stat* statbuf) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(&statbuf[0], 0, sizeof(struct stat)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_dev = 1; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_ino = 2; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_mode = 3; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_nlink = 4; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_uid = 5; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_gid = 6; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_rdev = 7; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_size = 8; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_atime = 9; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_mtime = 10; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_ctime = 11; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt = 0xdedbeef; 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt2 = 0xcabba6e; 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt3 = 0xf00ba4; 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt4 = 0xabacdba; 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const size_t kDummySizeT = 0x60067e; 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char* kDummyConstChar = "foobar"; 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char* kDummyConstChar2 = "g00gl3"; 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char* kDummyConstChar3 = "fr00gl3"; 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const void* kDummyVoidPtr = "blahblah"; 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uid_t kDummyUid = 1001; 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst gid_t kDummyGid = 1002; 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class KernelWrapTest : public ::testing::Test { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) KernelWrapTest() {} 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetUp() { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initializing the KernelProxy opens stdin/stdout/stderr. 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock, open(_, _)) 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)) 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(1)) 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(2)); 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // And will call mount / and /dev. 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(mock, mount(_, _, _, _, _)) 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)) 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ki_init(&mock); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void TearDown() { ki_uninit(); } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KernelProxyMock mock; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, access) { 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, access(kDummyConstChar, kDummyInt)) 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, access(kDummyConstChar, kDummyInt)); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, chdir) { 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, chdir(kDummyConstChar)).WillOnce(Return(kDummyInt)); 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, chdir(kDummyConstChar)); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, chmod) { 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, chmod(kDummyConstChar, kDummyInt)) 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, chmod(kDummyConstChar, kDummyInt)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, chown) { 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, chown(kDummyConstChar, kDummyUid, kDummyGid)) 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, chown(kDummyConstChar, kDummyUid, kDummyGid)); 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, close) { 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap close does not support returning arbitrary values, so we 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // test 0 and -1. 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, close(kDummyInt)) 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)) 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, close(kDummyInt)); 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, close(kDummyInt)); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, dup) { 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, dup(kDummyInt)).WillOnce(Return(kDummyInt2)); 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, dup(kDummyInt)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, dup2) { 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap dup2 does not support returning aribtrary values, only -1 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // or the value of the new fd. 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, dup2(kDummyInt, kDummyInt2)) 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)) 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, dup2(kDummyInt, kDummyInt2)); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, dup2(kDummyInt, kDummyInt2)); 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, fchmod) { 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fchmod(kDummyInt, kDummyInt2)) 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, fchmod(kDummyInt, kDummyInt2)); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, fchown) { 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fchown(kDummyInt, kDummyUid, kDummyGid)) 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, fchown(kDummyInt, kDummyUid, kDummyGid)); 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(KernelWrapTest, fcntl) { 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) char buffer[] = "fcntl"; 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fcntl(kDummyInt, kDummyInt2, _)) 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, fcntl(kDummyInt, kDummyInt2, buffer)); 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, fstat) { 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap fstat does not support returning aribtrary values, only 0 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // or -1. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat in_statbuf; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeDummyStatbuf(&in_statbuf); 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fstat(kDummyInt, _)) 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(DoAll(SetStat(&in_statbuf), Return(0))) 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat out_statbuf; 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, fstat(kDummyInt, &out_statbuf)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(&in_statbuf, IsEqualToStatbuf(&out_statbuf)); 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, fstat(kDummyInt, &out_statbuf)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(KernelWrapTest, ftruncate) { 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, ftruncate(kDummyInt, kDummyInt2)) 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, ftruncate(kDummyInt, kDummyInt2)); 20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, fsync) { 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fsync(kDummyInt)).WillOnce(Return(kDummyInt2)); 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, fsync(kDummyInt)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, getcwd) { 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) char result[] = "getcwd_result"; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buffer[] = "getcwd"; 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getcwd(buffer, kDummySizeT)).WillOnce(Return(result)); 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(result, getcwd(buffer, kDummySizeT)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, getdents) { 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef __GLIBC__ 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(sbc): Find a way to test the getdents wrapper under glibc. 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // It looks like the only way to exercise it is to call readdir(2). 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // There is an internal glibc function __getdents that will call the 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // IRT but that cannot be accessed from here as glibc does not export it. 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* void_ptr = &dummy_val; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getdents(kDummyInt, void_ptr, kDummyInt2)) 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, getdents(kDummyInt, void_ptr, kDummyInt2)); 2283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gcc gives error: getwd is deprecated. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__GNUC__) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, getwd) { 2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) char result[] = "getwd_result"; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buffer[] = "getwd"; 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getwd(buffer)).WillOnce(Return(result)); 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(result, getwd(buffer)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__GNUC__) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma GCC diagnostic warning "-Wdeprecated-declarations" 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, ioctl) { 246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch char buffer[] = "ioctl"; 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, ioctl(kDummyInt, kDummyInt2, _)) 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, ioctl(kDummyInt, kDummyInt2, buffer)); 250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, isatty) { 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, isatty(kDummyInt)).WillOnce(Return(kDummyInt2)); 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, isatty(kDummyInt)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(KernelWrapTest, kill) { 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, kill(kDummyInt, kDummyInt2)).WillOnce(Return(kDummyInt3)); 2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, kill(kDummyInt, kDummyInt2)); 2603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 262eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, lchown) { 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, lchown(kDummyConstChar, kDummyUid, kDummyGid)) 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, lchown(kDummyConstChar, kDummyUid, kDummyGid)); 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, link) { 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, link(kDummyConstChar, kDummyConstChar2)) 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, link(kDummyConstChar, kDummyConstChar2)); 272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, lseek) { 2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, lseek(kDummyInt, kDummyInt2, kDummyInt3)) 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, lseek(kDummyInt, kDummyInt2, kDummyInt3)); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, mkdir) { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32) 2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, mkdir(kDummyConstChar, 0777)).WillOnce(Return(kDummyInt2)); 2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, mkdir(kDummyConstChar)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, mkdir(kDummyConstChar, kDummyInt)) 2864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, mkdir(kDummyConstChar, kDummyInt)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, mmap) { 2924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // We only wrap mmap if |flags| has the MAP_ANONYMOUS bit unset. 2934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int flags = kDummyInt2 & ~MAP_ANONYMOUS; 2944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const size_t kDummySizeT2 = 0xbadf00d; 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy1 = 123; 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy2 = 456; 2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* kDummyVoidPtr1 = &dummy1; 2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* kDummyVoidPtr2 = &dummy2; 3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, 3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mmap(kDummyVoidPtr1, 3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT, 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) flags, 3054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT2)).WillOnce(Return(kDummyVoidPtr2)); 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyVoidPtr2, 3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mmap(kDummyVoidPtr1, 3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT, 3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) flags, 3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT2)); 3144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, mount) { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock, 3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mount(kDummyConstChar, 3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar2, 3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar3, 3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr)).WillOnce(Return(kDummyInt2)); 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, 3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mount(kDummyConstChar, 3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar2, 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar3, 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr)); 3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, munmap) { 3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap munmap, calls the "real" mmap as well as the intercepted 3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // one. The result returned is from the "real" mmap. 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy1 = 123; 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* kDummyVoidPtr = &dummy1; 3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t kDummySizeT = sizeof(kDummyVoidPtr); 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, munmap(kDummyVoidPtr, kDummySizeT)); 3384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) munmap(kDummyVoidPtr, kDummySizeT); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, open) { 3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, open(kDummyConstChar, kDummyInt)) 3444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 3454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, open(kDummyConstChar, kDummyInt)); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(KernelWrapTest, pipe) { 3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int fds[] = {1, 2}; 3504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, pipe(fds)).WillOnce(Return(kDummyInt)); 3514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, pipe(fds)); 35268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 35368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, read) { 3554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_value; 3564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_value; 3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, read(kDummyInt, dummy_void_ptr, kDummyInt2)) 3584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 3594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, read(kDummyInt, dummy_void_ptr, kDummyInt2)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifdef __GLIBC__ 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, remove) { 3644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, remove(kDummyConstChar)).WillOnce(Return(kDummyInt)); 3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, remove(kDummyConstChar)); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 367d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, rmdir) { 3704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, rmdir(kDummyConstChar)).WillOnce(Return(kDummyInt)); 3714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, rmdir(kDummyConstChar)); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static void new_handler(int) {} 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static void old_handler(int) {} 3763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(KernelWrapTest, sigset) { 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, sigset(kDummyInt, new_handler)) 3794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(old_handler)); 3804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(&old_handler, sigset(kDummyInt, new_handler)); 3813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 3823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(KernelWrapTest, signal) { 3844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // KernelIntercept forwards calls to signal to KernelProxy::sigset. 3854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, sigset(kDummyInt, new_handler)) 3864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(old_handler)); 3874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(&old_handler, signal(kDummyInt, new_handler)); 3883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 3893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, stat) { 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap stat does not support returning aribtrary values, only 0 3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // or -1. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat in_statbuf; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeDummyStatbuf(&in_statbuf); 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, stat(StrEq(kDummyConstChar), _)) 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(DoAll(SetStat(&in_statbuf), Return(0))) 3974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat out_statbuf; 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, stat(kDummyConstChar, &out_statbuf)); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(&in_statbuf, IsEqualToStatbuf(&out_statbuf)); 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, stat(kDummyConstChar, &out_statbuf)); 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, symlink) { 4054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, symlink(kDummyConstChar, kDummyConstChar2)) 4064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 4074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, symlink(kDummyConstChar, kDummyConstChar2)); 4084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, tcflush) { 4114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, tcflush(kDummyInt, kDummyInt2)) 4124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 4134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, tcflush(kDummyInt, kDummyInt2)); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 416bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(KernelWrapTest, tcgetattr) { 417bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch struct termios term; 4184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, tcgetattr(kDummyInt, &term)).WillOnce(Return(kDummyInt2)); 4194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, tcgetattr(kDummyInt, &term)); 420bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 421bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 422bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(KernelWrapTest, tcsetattr) { 423bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch struct termios term; 4244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, tcsetattr(kDummyInt, kDummyInt2, &term)) 4254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 4264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, tcsetattr(kDummyInt, kDummyInt2, &term)); 427bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 428bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, umount) { 4304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, umount(kDummyConstChar)).WillOnce(Return(kDummyInt)); 4314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, umount(kDummyConstChar)); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, unlink) { 4354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, unlink(kDummyConstChar)).WillOnce(Return(kDummyInt)); 4364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, unlink(kDummyConstChar)); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, utime) { 440ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const struct utimbuf* times = NULL; 4414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, utime(kDummyConstChar, times)).WillOnce(Return(kDummyInt)); 4424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, utime(kDummyConstChar, times)); 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, write) { 4464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, write(kDummyInt, kDummyVoidPtr, kDummyInt2)) 4474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 4484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, write(kDummyInt, kDummyVoidPtr, kDummyInt2)); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 451a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifdef PROVIDES_SOCKET_API 4523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochTEST_F(KernelWrapTest, poll) { 4534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct pollfd fds; 4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, poll(&fds, kDummyInt, kDummyInt2)) 4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 4564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, poll(&fds, kDummyInt, kDummyInt2)); 4573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 458a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochTEST_F(KernelWrapTest, select) { 4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fd_set readfds; 4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fd_set writefds; 4624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fd_set exceptfds; 4634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, select(kDummyInt, &readfds, &writefds, &exceptfds, NULL)) 4644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 4654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, 4664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) select(kDummyInt, &readfds, &writefds, &exceptfds, NULL)); 4673240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 4683240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 4693240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch// Socket Functions 470a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, accept) { 4714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 4724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 4734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, accept(kDummyInt, &addr, &len)) 4744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 4754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, accept(kDummyInt, &addr, &len)); 476a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 477a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 478a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, bind) { 4794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 4804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, bind(kDummyInt, &addr, kDummyInt2)) 4814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 4824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, bind(kDummyInt, &addr, kDummyInt2)); 483a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 484a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 485a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, connect) { 4864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 4874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, connect(kDummyInt, &addr, kDummyInt2)) 4884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 4894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, connect(kDummyInt, &addr, kDummyInt2)); 490bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 491bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 492bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(KernelWrapTest, gethostbyname) { 4934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct hostent result; 4944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, gethostbyname(kDummyConstChar)).WillOnce(Return(&result)); 4954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(&result, gethostbyname(kDummyConstChar)); 496a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 497a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 498a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, getpeername) { 4994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getpeername(kDummyInt, &addr, &len)) 5024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, getpeername(kDummyInt, &addr, &len)); 504a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 505a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 506a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, getsockname) { 5074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getsockname(kDummyInt, &addr, &len)) 5104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, getsockname(kDummyInt, &addr, &len)); 512a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 513a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 514a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, getsockopt) { 5154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 5164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_val; 5174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL( 5194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock, getsockopt(kDummyInt, kDummyInt2, kDummyInt3, dummy_void_ptr, &len)) 5204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 5214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 5224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt4, 5234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) getsockopt(kDummyInt, kDummyInt2, kDummyInt3, dummy_void_ptr, &len)); 524bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 525bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 526a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, listen) { 5274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, listen(kDummyInt, kDummyInt2)).WillOnce(Return(kDummyInt3)); 5284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, listen(kDummyInt, kDummyInt2)); 529a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 530a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 531a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, recv) { 5324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 5334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_val; 5344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, recv(kDummyInt, dummy_void_ptr, kDummySizeT, kDummyInt2)) 5354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 5364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, 5374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recv(kDummyInt, dummy_void_ptr, kDummySizeT, kDummyInt2)); 538a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 539a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 540a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, recvfrom) { 5414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 5424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_val; 5434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL( 5464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock, 5474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recvfrom(kDummyInt, dummy_void_ptr, kDummyInt2, kDummyInt3, &addr, &len)) 5484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 5494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 5504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt4, 5514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recvfrom(kDummyInt, dummy_void_ptr, kDummyInt2, kDummyInt3, &addr, &len)); 552a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 553a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 554a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, recvmsg) { 5554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct msghdr msg; 5564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, recvmsg(kDummyInt, &msg, kDummyInt2)) 5574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 5584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, recvmsg(kDummyInt, &msg, kDummyInt2)); 559a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 560a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 561a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, send) { 5624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, send(kDummyInt, kDummyVoidPtr, kDummySizeT, kDummyInt2)) 5634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 5644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, 5654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) send(kDummyInt, kDummyVoidPtr, kDummySizeT, kDummyInt2)); 566a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 567a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 568a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, sendto) { 5694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const socklen_t kDummySockLen = 0x50cc5; 5704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, 5724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sendto(kDummyInt, 5734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr, 5744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt2, 5754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 5764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &addr, 5774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySockLen)).WillOnce(Return(kDummyInt4)); 5784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, 5794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sendto(kDummyInt, 5804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr, 5814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt2, 5824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 5834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &addr, 5844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySockLen)); 585a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 586a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 587a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, sendmsg) { 5884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct msghdr msg; 5894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, sendmsg(kDummyInt, &msg, kDummyInt2)) 5904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 5914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, sendmsg(kDummyInt, &msg, kDummyInt2)); 592a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 593a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 594a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, setsockopt) { 5954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const socklen_t kDummySockLen = 0x50cc5; 5964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL( 5974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock, 5984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) setsockopt( 5994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, kDummyInt2, kDummyInt3, kDummyVoidPtr, kDummySockLen)) 6004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 6024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt4, 6034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) setsockopt( 6044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, kDummyInt2, kDummyInt3, kDummyVoidPtr, kDummySockLen)); 605a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 606a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 607a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, shutdown) { 6084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, shutdown(kDummyInt, kDummyInt2)) 6094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 6104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, shutdown(kDummyInt, kDummyInt2)); 611a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 612a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 613a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, socket) { 6144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, socket(kDummyInt, kDummyInt2, kDummyInt3)) 6154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, socket(kDummyInt, kDummyInt2, kDummyInt3)); 617a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 618a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 619a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, socketpair) { 6204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 6214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val)) 6224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, 6244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val)); 625a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 626a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 6274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // PROVIDES_SOCKET_API 628