180959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// Copyright (C) 2017 The Android Open Source Project 280959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// 380959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// Licensed under the Apache License, Version 2.0 (the "License"); 480959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// you may not use this file except in compliance with the License. 580959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// You may obtain a copy of the License at 680959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// 780959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// http://www.apache.org/licenses/LICENSE-2.0 880959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// 980959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// Unless required by applicable law or agreed to in writing, software 1080959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// distributed under the License is distributed on an "AS IS" BASIS, 1180959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1280959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// See the License for the specific language governing permissions and 1380959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes// limitations under the License. 1480959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 1580959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes#include <string> 1680959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 1780959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes#include <android-base/file.h> 1880959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes#include <android-base/unique_fd.h> 1980959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 2080959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes#include <gtest/gtest.h> 2180959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 2280959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes#include "minijail.h" 2380959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 2480959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obesclass WritePolicyTest : public ::testing::Test 2580959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes{ 2680959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes protected: 2780959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes const std::string base_policy_ = 2880959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes "read: 1\n" 2980959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes "write: 1\n" 3080959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes "rt_sigreturn: 1\n" 3180959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes "exit: 1\n"; 3280959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 3380959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes const std::string additional_policy_ = 3480959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes "mmap: 1\n" 3580959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes "munmap: 1\n"; 3680959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 3780959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes const std::string full_policy_ = base_policy_ + std::string("\n") + additional_policy_; 3880959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes}; 3980959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 4080959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli ObesTEST_F(WritePolicyTest, OneFile) 4180959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes{ 4280959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes std::string final_string; 4380959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes android::base::unique_fd fd(android::WritePolicyToPipe(base_policy_, std::string())); 4480959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes EXPECT_LE(0, fd.get()); 4580959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes bool success = android::base::ReadFdToString(fd.get(), &final_string); 4680959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes EXPECT_TRUE(success); 4780959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes EXPECT_EQ(final_string, base_policy_); 4880959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes} 4980959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes 5080959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli ObesTEST_F(WritePolicyTest, TwoFiles) 5180959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes{ 5280959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes std::string final_string; 5380959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes android::base::unique_fd fd(android::WritePolicyToPipe(base_policy_, additional_policy_)); 5480959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes EXPECT_LE(0, fd.get()); 5580959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes bool success = android::base::ReadFdToString(fd.get(), &final_string); 5680959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes EXPECT_TRUE(success); 5780959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes EXPECT_EQ(final_string, full_policy_); 5880959a7c89e310b74c7e3a68d7f80ceac7a1574dJorge Lucangeli Obes} 59