kernel_wrap_test.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
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) 58bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include <unistd.h> 68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gtest/gtest.h" 11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "kernel_proxy_mock.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "nacl_io/kernel_intercept.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "nacl_io/kernel_wrap.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "nacl_io/osmman.h" 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "nacl_io/ossocket.h" 16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "nacl_io/ostermios.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(__native_client__) && !defined(__GLIBC__) 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)extern "C" { 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// TODO(sbc): remove once these get added to the newlib toolchain headers. 218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)int fchdir(int fd); 228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)int utimes(const char *filename, const struct timeval times[2]); 238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing namespace nacl_io; 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using ::testing::DoAll; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Return; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::StrEq; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define COMPARE_FIELD(f) \ 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (arg->f != statbuf->f) { \ 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *result_listener << "mismatch of field \"" #f \ 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "\". " \ 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "expected: " << statbuf->f << " actual: " << arg->f; \ 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; \ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(IsEqualToStatbuf, statbuf, "") { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_dev); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_ino); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_mode); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_nlink); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_uid); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_gid); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_rdev); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_size); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_atime); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_mtime); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPARE_FIELD(st_ctime); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef COMPARE_FIELD 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P(SetStat, statbuf) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(arg1, 0, sizeof(struct stat)); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_dev = statbuf->st_dev; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_ino = statbuf->st_ino; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_mode = statbuf->st_mode; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_nlink = statbuf->st_nlink; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_uid = statbuf->st_uid; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_gid = statbuf->st_gid; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_rdev = statbuf->st_rdev; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_size = statbuf->st_size; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_atime = statbuf->st_atime; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_mtime = statbuf->st_mtime; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg1->st_ctime = statbuf->st_ctime; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MakeDummyStatbuf(struct stat* statbuf) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(&statbuf[0], 0, sizeof(struct stat)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_dev = 1; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_ino = 2; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_mode = 3; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_nlink = 4; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_uid = 5; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_gid = 6; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_rdev = 7; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_size = 8; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_atime = 9; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_mtime = 10; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statbuf->st_ctime = 11; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt = 0xdedbeef; 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt2 = 0xcabba6e; 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt3 = 0xf00ba4; 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kDummyInt4 = 0xabacdba; 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const size_t kDummySizeT = 0x60067e; 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char* kDummyConstChar = "foobar"; 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char* kDummyConstChar2 = "g00gl3"; 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char* kDummyConstChar3 = "fr00gl3"; 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const void* kDummyVoidPtr = "blahblah"; 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uid_t kDummyUid = 1001; 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst gid_t kDummyGid = 1002; 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class KernelWrapTest : public ::testing::Test { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) KernelWrapTest() {} 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetUp() { 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initializing the KernelProxy opens stdin/stdout/stderr. 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock, open(_, _)) 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)) 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(1)) 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(2)); 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // And will call mount / and /dev. 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(mock, mount(_, _, _, _, _)) 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)) 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ki_init(&mock); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void TearDown() { ki_uninit(); } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KernelProxyMock mock; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, access) { 1288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, access(kDummyConstChar, kDummyInt)) .WillOnce(Return(-1)); 1298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, access(kDummyConstChar, kDummyInt)); 1308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, access(kDummyConstChar, kDummyInt)) .WillOnce(Return(0)); 1328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, access(kDummyConstChar, kDummyInt)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, chdir) { 1368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, chdir(kDummyConstChar)).WillOnce(Return(-1)); 1378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, chdir(kDummyConstChar)); 1388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, chdir(kDummyConstChar)).WillOnce(Return(0)); 1408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, chdir(kDummyConstChar)); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, chmod) { 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, chmod(kDummyConstChar, kDummyInt)) 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, chmod(kDummyConstChar, kDummyInt)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, chown) { 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, chown(kDummyConstChar, kDummyUid, kDummyGid)) 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, chown(kDummyConstChar, kDummyUid, kDummyGid)); 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, close) { 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap close does not support returning arbitrary values, so we 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // test 0 and -1. 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, close(kDummyInt)) 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(0)) 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, close(kDummyInt)); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, close(kDummyInt)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, dup) { 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, dup(kDummyInt)).WillOnce(Return(kDummyInt2)); 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, dup(kDummyInt)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, dup2) { 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap dup2 does not support returning aribtrary values, only -1 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // or the value of the new fd. 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, dup2(kDummyInt, kDummyInt2)) 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)) 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, dup2(kDummyInt, kDummyInt2)); 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, dup2(kDummyInt, kDummyInt2)); 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, fchdir) { 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, fchdir(kDummyInt)) 1838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .WillOnce(Return(-1)); 1848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, fchdir(kDummyInt)); 1858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, fchmod) { 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, fchmod(kDummyInt, kDummyInt2)) .WillOnce(Return(-1)); 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, fchmod(kDummyInt, kDummyInt2)); 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, fchmod(kDummyInt, kDummyInt2)) .WillOnce(Return(0)); 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, fchmod(kDummyInt, kDummyInt2)); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, fchown) { 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fchown(kDummyInt, kDummyUid, kDummyGid)) 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, fchown(kDummyInt, kDummyUid, kDummyGid)); 199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(KernelWrapTest, fcntl) { 20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) char buffer[] = "fcntl"; 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fcntl(kDummyInt, kDummyInt2, _)) 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, fcntl(kDummyInt, kDummyInt2, buffer)); 20668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 20768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, fdatasync) { 2098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, fdatasync(kDummyInt)).WillOnce(Return(-1)); 2108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, fdatasync(kDummyInt)); 2118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, fdatasync(kDummyInt)).WillOnce(Return(0)); 2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, fdatasync(kDummyInt)); 2148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 2158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, fstat) { 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap fstat does not support returning aribtrary values, only 0 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // or -1. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat in_statbuf; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeDummyStatbuf(&in_statbuf); 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, fstat(kDummyInt, _)) 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(DoAll(SetStat(&in_statbuf), Return(0))) 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat out_statbuf; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, fstat(kDummyInt, &out_statbuf)); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(&in_statbuf, IsEqualToStatbuf(&out_statbuf)); 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, fstat(kDummyInt, &out_statbuf)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(KernelWrapTest, ftruncate) { 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, ftruncate(kDummyInt, kDummyInt2)) 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, ftruncate(kDummyInt, kDummyInt2)); 23490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 23590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, fsync) { 2378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, fsync(kDummyInt)).WillOnce(Return(-1)); 2388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, fsync(kDummyInt)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, getcwd) { 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) char result[] = "getcwd_result"; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buffer[] = "getcwd"; 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getcwd(buffer, kDummySizeT)).WillOnce(Return(result)); 2454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(result, getcwd(buffer, kDummySizeT)); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, getdents) { 2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef __GLIBC__ 2503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(sbc): Find a way to test the getdents wrapper under glibc. 2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // It looks like the only way to exercise it is to call readdir(2). 2523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // There is an internal glibc function __getdents that will call the 2533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // IRT but that cannot be accessed from here as glibc does not export it. 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* void_ptr = &dummy_val; 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getdents(kDummyInt, void_ptr, kDummyInt2)) 2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, getdents(kDummyInt, void_ptr, kDummyInt2)); 2593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gcc gives error: getwd is deprecated. 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__GNUC__) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, getwd) { 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) char result[] = "getwd_result"; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buffer[] = "getwd"; 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getwd(buffer)).WillOnce(Return(result)); 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(result, getwd(buffer)); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__GNUC__) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma GCC diagnostic warning "-Wdeprecated-declarations" 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, ioctl) { 277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch char buffer[] = "ioctl"; 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, ioctl(kDummyInt, kDummyInt2, _)) 2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 2804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, ioctl(kDummyInt, kDummyInt2, buffer)); 281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, isatty) { 2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, isatty(kDummyInt)).WillOnce(Return(kDummyInt2)); 2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, isatty(kDummyInt)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(KernelWrapTest, kill) { 2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, kill(kDummyInt, kDummyInt2)).WillOnce(Return(kDummyInt3)); 2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, kill(kDummyInt, kDummyInt2)); 2913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, lchown) { 2944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, lchown(kDummyConstChar, kDummyUid, kDummyGid)) 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, lchown(kDummyConstChar, kDummyUid, kDummyGid)); 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, link) { 3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, link(kDummyConstChar, kDummyConstChar2)) 3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, link(kDummyConstChar, kDummyConstChar2)); 303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, lseek) { 3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, lseek(kDummyInt, kDummyInt2, kDummyInt3)) 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, lseek(kDummyInt, kDummyInt2, kDummyInt3)); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, mkdir) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32) 3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, mkdir(kDummyConstChar, 0777)).WillOnce(Return(kDummyInt2)); 3144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, mkdir(kDummyConstChar)); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, mkdir(kDummyConstChar, kDummyInt)) 3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, mkdir(kDummyConstChar, kDummyInt)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, mmap) { 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // We only wrap mmap if |flags| has the MAP_ANONYMOUS bit unset. 3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int flags = kDummyInt2 & ~MAP_ANONYMOUS; 3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const size_t kDummySizeT2 = 0xbadf00d; 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy1 = 123; 3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy2 = 456; 3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* kDummyVoidPtr1 = &dummy1; 3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* kDummyVoidPtr2 = &dummy2; 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, 3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mmap(kDummyVoidPtr1, 3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT, 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) flags, 3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT2)).WillOnce(Return(kDummyVoidPtr2)); 3384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyVoidPtr2, 3394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mmap(kDummyVoidPtr1, 3404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT, 3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) flags, 3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 3444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySizeT2)); 3454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, mount) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock, 3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mount(kDummyConstChar, 3504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar2, 3514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar3, 3524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr)).WillOnce(Return(kDummyInt2)); 3544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, 3554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mount(kDummyConstChar, 3564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar2, 3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyConstChar3, 3584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, 3594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr)); 3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, munmap) { 3634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap munmap, calls the "real" mmap as well as the intercepted 3644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // one. The result returned is from the "real" mmap. 3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy1 = 123; 3664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* kDummyVoidPtr = &dummy1; 3674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t kDummySizeT = sizeof(kDummyVoidPtr); 3684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, munmap(kDummyVoidPtr, kDummySizeT)); 3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) munmap(kDummyVoidPtr, kDummySizeT); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, open) { 3744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, open(kDummyConstChar, kDummyInt)) 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, open(kDummyConstChar, kDummyInt)); 3778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, open(kDummyConstChar, kDummyInt)) 3798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 3808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kDummyInt2, open(kDummyConstChar, kDummyInt)); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(KernelWrapTest, pipe) { 3844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int fds[] = {1, 2}; 3854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, pipe(fds)).WillOnce(Return(kDummyInt)); 3864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, pipe(fds)); 38768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 38868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, read) { 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_value; 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_value; 3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, read(kDummyInt, dummy_void_ptr, kDummyInt2)) 3934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 3944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, read(kDummyInt, dummy_void_ptr, kDummyInt2)); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, readlink) { 3988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) char buf[10]; 3998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, readlink(kDummyConstChar, buf, 10)) 4018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .WillOnce(Return(-1)); 4028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, readlink(kDummyConstChar, buf, 10)); 4038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, readlink(kDummyConstChar, buf, 10)) 4058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 4068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kDummyInt, readlink(kDummyConstChar, buf, 10)); 4078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 409d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifdef __GLIBC__ 4108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Under newlib there is no remove syscall. Instead it is implemented 4118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// in terms of unlink()/rmdir(). 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, remove) { 4138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, remove(kDummyConstChar)).WillOnce(Return(-1)); 4148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, remove(kDummyConstChar)); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 416d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, rename) { 4198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, rename(kDummyConstChar, kDummyConstChar2)) 4208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .WillOnce(Return(-1)); 4218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, rename(kDummyConstChar, kDummyConstChar2)); 4228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, rename(kDummyConstChar, kDummyConstChar2)) 4248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .WillOnce(Return(0)); 4258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, rename(kDummyConstChar, kDummyConstChar2)); 4268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, rmdir) { 4294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, rmdir(kDummyConstChar)).WillOnce(Return(kDummyInt)); 4304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, rmdir(kDummyConstChar)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static void new_handler(int) {} 4344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static void old_handler(int) {} 4353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(KernelWrapTest, sigset) { 4374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, sigset(kDummyInt, new_handler)) 4384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(old_handler)); 4394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(&old_handler, sigset(kDummyInt, new_handler)); 4403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 4413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(KernelWrapTest, signal) { 4434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // KernelIntercept forwards calls to signal to KernelProxy::sigset. 4444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, sigset(kDummyInt, new_handler)) 4454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(old_handler)); 4464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(&old_handler, signal(kDummyInt, new_handler)); 4473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 4483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, stat) { 4504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The way we wrap stat does not support returning aribtrary values, only 0 4514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // or -1. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat in_statbuf; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeDummyStatbuf(&in_statbuf); 4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, stat(StrEq(kDummyConstChar), _)) 4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(DoAll(SetStat(&in_statbuf), Return(0))) 4564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(-1)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat out_statbuf; 4584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, stat(kDummyConstChar, &out_statbuf)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(&in_statbuf, IsEqualToStatbuf(&out_statbuf)); 4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(-1, stat(kDummyConstChar, &out_statbuf)); 4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, symlink) { 4644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, symlink(kDummyConstChar, kDummyConstChar2)) 4654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt)); 4664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, symlink(kDummyConstChar, kDummyConstChar2)); 4674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(KernelWrapTest, tcflush) { 4704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, tcflush(kDummyInt, kDummyInt2)) 4714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 4724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, tcflush(kDummyInt, kDummyInt2)); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(KernelWrapTest, tcgetattr) { 476bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch struct termios term; 4774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, tcgetattr(kDummyInt, &term)).WillOnce(Return(kDummyInt2)); 4784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, tcgetattr(kDummyInt, &term)); 479bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 480bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 481bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(KernelWrapTest, tcsetattr) { 482bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch struct termios term; 4834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, tcsetattr(kDummyInt, kDummyInt2, &term)) 4844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 4854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, tcsetattr(kDummyInt, kDummyInt2, &term)); 486bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 487bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, umount) { 4894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, umount(kDummyConstChar)).WillOnce(Return(kDummyInt)); 4904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, umount(kDummyConstChar)); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, truncate) { 4948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, truncate(kDummyConstChar, kDummyInt3)).WillOnce(Return(-1)); 4958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, truncate(kDummyConstChar, kDummyInt3)); 4968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, truncate(kDummyConstChar, kDummyInt3)).WillOnce(Return(0)); 4988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, truncate(kDummyConstChar, kDummyInt3)); 4998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, lstat) { 5028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) struct stat buf; 5038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, lstat(kDummyConstChar, &buf)).WillOnce(Return(-1)); 5048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, lstat(kDummyConstChar, &buf)); 5058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, lstat(kDummyConstChar, &buf)).WillOnce(Return(0)); 5078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, lstat(kDummyConstChar, &buf)); 5088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, unlink) { 5114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, unlink(kDummyConstChar)).WillOnce(Return(kDummyInt)); 5124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, unlink(kDummyConstChar)); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(KernelWrapTest, utime) { 516ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const struct utimbuf* times = NULL; 5174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, utime(kDummyConstChar, times)).WillOnce(Return(kDummyInt)); 5184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt, utime(kDummyConstChar, times)); 519eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 520eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(KernelWrapTest, utimes) { 5228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) struct timeval* times = NULL; 5238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock, utimes(kDummyConstChar, times)).WillOnce(Return(-1)); 5248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(-1, utimes(kDummyConstChar, times)); 5258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(KernelWrapTest, write) { 5284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, write(kDummyInt, kDummyVoidPtr, kDummyInt2)) 5294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 5304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, write(kDummyInt, kDummyVoidPtr, kDummyInt2)); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 532eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 533a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifdef PROVIDES_SOCKET_API 5343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochTEST_F(KernelWrapTest, poll) { 5354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct pollfd fds; 5364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, poll(&fds, kDummyInt, kDummyInt2)) 5374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 5384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, poll(&fds, kDummyInt, kDummyInt2)); 5393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 540a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5413240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochTEST_F(KernelWrapTest, select) { 5424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fd_set readfds; 5434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fd_set writefds; 5444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fd_set exceptfds; 5454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, select(kDummyInt, &readfds, &writefds, &exceptfds, NULL)) 5464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, 5484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) select(kDummyInt, &readfds, &writefds, &exceptfds, NULL)); 5493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 5503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 5513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch// Socket Functions 552a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, accept) { 5534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, accept(kDummyInt, &addr, &len)) 5564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, accept(kDummyInt, &addr, &len)); 558a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 559a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 560a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, bind) { 5614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, bind(kDummyInt, &addr, kDummyInt2)) 5634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, bind(kDummyInt, &addr, kDummyInt2)); 565a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 566a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 567a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, connect) { 5684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, connect(kDummyInt, &addr, kDummyInt2)) 5704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, connect(kDummyInt, &addr, kDummyInt2)); 572bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 573bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 574bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(KernelWrapTest, gethostbyname) { 5754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct hostent result; 5764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, gethostbyname(kDummyConstChar)).WillOnce(Return(&result)); 5774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(&result, gethostbyname(kDummyConstChar)); 578a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 579a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 580a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, getpeername) { 5814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getpeername(kDummyInt, &addr, &len)) 5844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, getpeername(kDummyInt, &addr, &len)); 586a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 587a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 588a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, getsockname) { 5894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 5904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 5914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, getsockname(kDummyInt, &addr, &len)) 5924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt2)); 5934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt2, getsockname(kDummyInt, &addr, &len)); 594a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 595a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 596a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, getsockopt) { 5974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 5984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_val; 5994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 6004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL( 6014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock, getsockopt(kDummyInt, kDummyInt2, kDummyInt3, dummy_void_ptr, &len)) 6024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 6044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt4, 6054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) getsockopt(kDummyInt, kDummyInt2, kDummyInt3, dummy_void_ptr, &len)); 606bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 607bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 608a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, listen) { 6094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, listen(kDummyInt, kDummyInt2)).WillOnce(Return(kDummyInt3)); 6104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, listen(kDummyInt, kDummyInt2)); 611a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 612a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 613a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, recv) { 6144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 6154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_val; 6164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, recv(kDummyInt, dummy_void_ptr, kDummySizeT, kDummyInt2)) 6174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 6184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, 6194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recv(kDummyInt, dummy_void_ptr, kDummySizeT, kDummyInt2)); 620a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 621a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 622a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, recvfrom) { 6234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 6244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void* dummy_void_ptr = &dummy_val; 6254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 6264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socklen_t len; 6274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL( 6284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock, 6294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recvfrom(kDummyInt, dummy_void_ptr, kDummyInt2, kDummyInt3, &addr, &len)) 6304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 6324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt4, 6334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recvfrom(kDummyInt, dummy_void_ptr, kDummyInt2, kDummyInt3, &addr, &len)); 634a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 635a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 636a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, recvmsg) { 6374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct msghdr msg; 6384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, recvmsg(kDummyInt, &msg, kDummyInt2)) 6394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 6404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, recvmsg(kDummyInt, &msg, kDummyInt2)); 641a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 642a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 643a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, send) { 6444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, send(kDummyInt, kDummyVoidPtr, kDummySizeT, kDummyInt2)) 6454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 6464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, 6474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) send(kDummyInt, kDummyVoidPtr, kDummySizeT, kDummyInt2)); 648a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 649a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 650a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, sendto) { 6514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const socklen_t kDummySockLen = 0x50cc5; 6524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct sockaddr addr; 6534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, 6544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sendto(kDummyInt, 6554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr, 6564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt2, 6574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 6584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &addr, 6594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySockLen)).WillOnce(Return(kDummyInt4)); 6604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, 6614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sendto(kDummyInt, 6624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyVoidPtr, 6634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt2, 6644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt3, 6654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &addr, 6664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummySockLen)); 667a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 668a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 669a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, sendmsg) { 6704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct msghdr msg; 6714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, sendmsg(kDummyInt, &msg, kDummyInt2)) 6724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 6734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, sendmsg(kDummyInt, &msg, kDummyInt2)); 674a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 675a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 676a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, setsockopt) { 6774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const socklen_t kDummySockLen = 0x50cc5; 6784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL( 6794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock, 6804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) setsockopt( 6814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, kDummyInt2, kDummyInt3, kDummyVoidPtr, kDummySockLen)) 6824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 6844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt4, 6854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) setsockopt( 6864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDummyInt, kDummyInt2, kDummyInt3, kDummyVoidPtr, kDummySockLen)); 687a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 688a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 689a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, shutdown) { 6904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, shutdown(kDummyInt, kDummyInt2)) 6914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt3)); 6924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt3, shutdown(kDummyInt, kDummyInt2)); 693a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 694a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 695a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, socket) { 6964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, socket(kDummyInt, kDummyInt2, kDummyInt3)) 6974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 6984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, socket(kDummyInt, kDummyInt2, kDummyInt3)); 699a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 700a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 701a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(KernelWrapTest, socketpair) { 7024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int dummy_val; 7034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(mock, socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val)) 7044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillOnce(Return(kDummyInt4)); 7054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(kDummyInt4, 7064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) socketpair(kDummyInt, kDummyInt2, kDummyInt3, &dummy_val)); 707a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 708a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 7094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // PROVIDES_SOCKET_API 710