#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "sandbox/linux/syscall_broker/broker_simple_message.h"
#include <linux/kcmp.h>
#include <unistd.h>
#include "base/files/scoped_file.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/logging.h"
#include "base/run_loop.h"
#include "base/synchronization/waitable_event.h"
#include "base/task/thread_pool.h"
#include "base/test/bind.h"
#include "base/test/task_environment.h"
#include "base/threading/thread.h"
#include "sandbox/linux/syscall_broker/broker_channel.h"
#include "sandbox/linux/syscall_broker/broker_simple_message.h"
#include "sandbox/linux/system_headers/linux_syscalls.h"
#include "sandbox/linux/tests/test_utils.h"
#include "sandbox/linux/tests/unit_tests.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace sandbox {
namespace syscall_broker {
namespace {
void PostWaitableEventToThread(base::Thread* thread,
base::WaitableEvent* wait_event) { … }
}
class ExpectedResultValue { … };
class ExpectedResultDataValue : public ExpectedResultValue { … };
class ExpectedResultIntValue : public ExpectedResultValue { … };
class BrokerSimpleMessageTestHelper { … };
ExpectedResultDataValue::ExpectedResultDataValue() { … }
ExpectedResultDataValue::ExpectedResultDataValue(const char* data,
size_t length)
: … { … }
bool ExpectedResultDataValue::NextMessagePieceMatches(
BrokerSimpleMessage* message) { … }
size_t ExpectedResultDataValue::Size() { … }
ExpectedResultIntValue::ExpectedResultIntValue() { … }
ExpectedResultIntValue::ExpectedResultIntValue(int value) : … { … }
bool ExpectedResultIntValue::NextMessagePieceMatches(
BrokerSimpleMessage* message) { … }
size_t ExpectedResultIntValue::Size() { … }
bool BrokerSimpleMessageTestHelper::MessageContentMatches(
const BrokerSimpleMessage& message,
const uint8_t* content,
size_t length) { … }
void BrokerSimpleMessageTestHelper::SendMsg(int write_fd,
BrokerSimpleMessage* message,
int fd) { … }
void BrokerSimpleMessageTestHelper::RecvMsg(
BrokerChannel::EndPoint* ipc_reader,
ExpectedResultValue** expected_values,
int expected_values_length) { … }
void BrokerSimpleMessageTestHelper::RecvMsgBadRead(
BrokerChannel::EndPoint* ipc_reader,
int fd) { … }
void BrokerSimpleMessageTestHelper::RecvMsgAndReply(
BrokerChannel::EndPoint* ipc_reader,
ExpectedResultValue** expected_values,
int expected_values_length,
const char* response_msg,
int fd) { … }
uint8_t* BrokerSimpleMessageTestHelper::WriteDataType(uint8_t* dst) { … }
uint8_t* BrokerSimpleMessageTestHelper::WriteIntType(uint8_t* dst) { … }
TEST(BrokerSimpleMessage, AddData) { … }
TEST(BrokerSimpleMessage, SendAndRecvMsg) { … }
TEST(BrokerSimpleMessage, SendRecvMsgSynchronous) { … }
namespace {
bool CheckKcmpResult(int fd1, int fd2) { … }
void ReceiveStdoutDupFd(BrokerChannel::EndPoint* ipc_reader) { … }
void ReceiveTwoDupFds(BrokerChannel::EndPoint* ipc_reader) { … }
void ReceiveThreeFdsSendTwoBack(BrokerChannel::EndPoint* ipc_reader) { … }
}
class BrokerSimpleMessageFdTest : public testing::Test { … };
TEST_F(BrokerSimpleMessageFdTest, PassOneFd) { … }
TEST_F(BrokerSimpleMessageFdTest, PassTwoFds) { … }
TEST_F(BrokerSimpleMessageFdTest, SynchronousPassTwoFds) { … }
}
}