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